- 2007-05-21 (月)
- PHP
form などで受け取った文字列をそのまま表示すると、悪意のあるタグが埋め込まれた時に悲劇が起こります。
例えば、以下のような PHP プログラムは非常に危険です。
echo $_GET['query'];
この場合、訪問者が form にアンカータグを埋め込んだ場合、
<a href="http://yahoo.co.jp/">Yahoo!JAPAN</a>
と入力すると、
Yahoo!JAPAN
というように、タグがそのまま解釈されて表示されてしまいます。
悪用される時は、こんな子供染みたいたずらではなく、JavaScript を使ってクッキー情報を抜き取られたりなど、サイト訪問者に害を及ぼすことも考えられます。
エスケープ処理
form から受け取ったデータに限らず、とにかく他所から受け取ったデータを生で表示するのは避けましょう。
PHP であれば、htmlspecialchars 関数を使えば、HTML で危険とされる5つの文字(&,<,>,",')をエスケープした文字列を返してくれます。
echo htmlspecialchars($_GET['query'], ENT_QUOTES);
第二引数に ENT_QUOTES を設定すると、シングル、ダブルクオート 共に変換されます。ENT_QUOTES を設定しないとシングルクオートは変換されません。
PHP で他所から受け取ったデータを HTML で出力する際には、データの安全性を確認しましょう。データの安全性が確認出来ない場合は、出力する際に、エスケープ処理を行うようにしましょう。
Tags :Php?クロスサイトスクリプティング?Htmlspecialchars?クロスサイト?エスケープ?
カテゴリ「PHP」の最新記事
-
2008-02-09 20:00 - PHPのエラー表示を制御する
-
2007-12-23 16:00 - Pear::HTTP_Requestで外部ページにPOSTする
-
2007-12-18 22:00 - PEAR::Cache_Lite でデータのキャッシュ
-
2007-12-16 01:00 - HTMLをスクレイピング
-
2007-12-10 22:00 - JavaScriptからPHPを呼び出しHTML上に出力する方法