13. $_SERVER['PHP_SELF']とXSS脆弱性皆さんは同じスクリプトへのリンクを貼る時、どの様に記述していますか? $_SERVER['PHP_SELF']を用いることがあるのではないでしょうか。これを直接用 いることは危険です。なぜならば、$_SERVER['PHP_SELF']にはクロスサイト・ス クリプティング(XSS)脆弱性が存在するからです。 $_SERVER['PHP_SELF']はしばしば次のように使われます。
このページ(ここではhttp:/www.example.jp/example.php)へ下記の様にリンク を貼り、クリックしてみて下さい。
JavaScriptが実行され、アラートでXSSと表示されたと思います。なぜこのよう なことが起こるのでしょうか?これは$_SERVER ['PHP_SELF']の本質に関わって くる問題です。 $_SERVER['PHP_SELF']は渡されたURIのHOST部分の後から、GETクエリ部分の前ま で(ここには記述していませんが、一般的には?id=10&type=0などの?の前まで) をURLデコードした形で格納します。つまり上記の場合、$_SERVER ['PHP_SELF']は
となります。この結果、formタグ内のaction属性値にそのまま表示されると、 JavaScriptを実行してしまいます。 これを防ぐ方法は、$_SERVER['PHP_SELF']をhtmlspecialcharsでエスケープする ことです。また、CGI版以外では$ _SERVER['PHP_SELF']の代わりに$_SERVER ['SCRIPT_NAME']を用いることも可能です。もしくは、formタグ内の action属性 値を空にしてもいいでしょう。 同様の脆弱性が$_SERVER['PATH_INFO']と$_SERVER['PATH_TRANSLATED']にも存在 します。お気を付け下さい。 (アシアル 井川数志)
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。 |