普通CGIなどWebアプリケーションは、Webページから検索のキーワード入力や個人情報の登録入力などを処理して、Webページとして出力します。
ここで、Webページへの出力処理に問題があると、そのWebページにスクリプトなどを埋め込まれてしまうことがあります。
このようなスクリプトのインジェクション(注入)を、特にクロスサイト・スクリプティング攻撃と言います。
対策としては、HTMLテキストの入力をエスケープ処理し、HTMLテキストを許可しない方法があります。
どうしても、HTMLテキストが必要な場合は、構文解析を行い、「ホワイトリスト方式」で許可する要素のみを抽出します。
また、共通の対策としては、HTTPレスポンスヘッダのContent-Typeフィールドに文字コード(charset)の指定を行います。
◆ 補足
・エスケープ処理
エスケープ処理には、Webページの表示に影響する特別な記号文字(「<」、「>」、「&」、「"」、「'」など)を、
HTMLエンティティ(「<」、「>」、「&」、「"」、「'」など)に置換します。
また、URLを出力するときは、「http://」や 「https://」で始まるURLのみを許可するようにします。
これは、「javascript:」の形式で始まるURLがあるからです。
以下は、上記の置換をするPerlでのソースです(前に書いた記事の引用です)。
sub htmlf { my ($strhtml) = @_; $strhtml =~ s/&/&/g; $strhtml =~ s/>/>/g; $strhtml =~ s/</</g; $strhtml =~ s/"/"/g; $strhtml =~ s/'/'/g; return $strhtml; }http://d.hatena.ne.jp/chaichanPaPa/20080329/1206748795