Re:PHPで誰でも簡単Webサービス製作!でなんか作って公開した奴ちょっと来い

ネタ元:PHPで誰でも簡単Webサービス製作!でなんか作って公開した奴ちょっと来い

PHPのXSSとSQLインジェクションの解説が書かれています。丁寧に書かれていますのでぜひ一読ください。ただ、読む上で1点注意することがあります。

XSSはそれほど単純じゃない!

ネタもとのXSS対策済みのソースコードの1行目で次のようなコードがあります。

<form action="<?=$_SERVER['PHP_SELF']?>" method="get">

実はここにもXSSの脆弱性が含まれています。次のようなURLでアクセスされた場合、任意のスクリプトを実行することが出来ます。

http://www.example.jp/ 
example.php/%22%3E%3Cscript%3Ealert(document.cookie);%3C/script%3E

これはネタ元で対策方法として「変数を書き出す時は、必ずエスケープを行いましょう。」と書きながら$_SERVER['PHP_SELF']をエスケープしていないのが原因でしょう。
(注意:最近ではこのようなスクリプトはブラウザがブロックしてくれるのですが、IE6とか古いブラウザもありますしね)

$_SERVER['PHP_SELF']に関してはエスケープより次のようにformのaction属性を空にする対策が一般的じゃないでしょうか?

<form action="" method="get">

このようにXSSはセキュリティ意識が高くても発生してしまいます。

Movable TypeやWordpressなどの、業界で超一流と呼ばれる方々が開発してるプログラムでも定期的にXSSの脆弱性が発見されています。
100%脆弱性がないというのは規模が大きくなればなるほど難しくなってきています。

常にセキュリティを意識して様々な事例を知識として身につけ、なるべくセキュアなプログラムを作成するようこころがけるのがよいのではないでしょうか?

特に初心者の方はネタ元で指摘されている内容から強く意識するのがよいでしょう。

スポンサードリンク

«Web Designing (ウェブデザイニング)2010年 03月号で執筆しました。 | メイン | Web 制作の現場で使う jQueryデザイン入門 Amazonで通常購入可能に»