注目の書籍

好評発売中!

IT業界徹底研究就職ガイド2013年版

IT/ネット業界で働くと いうことを分かりやす く解説。2013年3月卒 業の学生向けの1冊。

必聴講座ご紹介

Cloud Days Tokyo 2012
クラウド時代を勝ち抜く企業戦略を考える

エムオーテックス


Cloud Days Tokyo 2012
クラウド時代の企業インフラとユーザー環境の姿

ヴイエムウェア


Cloud Days Osaka 2012
クラウドでIT維新を〜ビジネスを加速させるベストプラクティス

アマゾン データ サービス ジャパン

オープンソース/Linux

PHP TIPS

ITpro

13. $_SERVER['PHP_SELF']とXSS脆弱性

2007/02/27

皆さんは同じスクリプトへのリンクを貼る時、どの様に記述していますか? $_SERVER['PHP_SELF']を用いることがあるのではないでしょうか。これを直接用 いることは危険です。なぜならば、$_SERVER['PHP_SELF']にはクロスサイト・ス クリプティング(XSS)脆弱性が存在するからです。

$_SERVER['PHP_SELF']はしばしば次のように使われます。

<form method="post" action="<?php echo $_SERVER['PHP_SELF'?>">

このページ(ここではhttp:/www.example.jp/example.php)へ下記の様にリンク を貼り、クリックしてみて下さい。

<a href="http://www.example.jp/
example.php/%22%3E%3Cscript%3Ealert(%27XSS%27);%3C/script%3E/">

JavaScriptが実行され、アラートでXSSと表示されたと思います。なぜこのよう なことが起こるのでしょうか?これは$_SERVER ['PHP_SELF']の本質に関わって くる問題です。

$_SERVER['PHP_SELF']は渡されたURIのHOST部分の後から、GETクエリ部分の前ま で(ここには記述していませんが、一般的には?id=10&type=0などの?の前まで) をURLデコードした形で格納します。つまり上記の場合、$_SERVER ['PHP_SELF']は

/example.php/"><script>alert('XSS')</script>/

となります。この結果、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メーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介