PHPでのクロスサイトスクリプティング対策 - D-ramのWeb開発日記

PHPでのクロスサイトスクリプティング対策

クロスサイトスクリプティングの(XSS)対策はサニタイジング(データの無害化)になります。
サニタイジングのタイミングはデータ入力時ではなくHTML生成時に行うのが良いです。

PHPでは、htmlspecialchars()を通せばほとんどのXSSは対応できるようです。

PHP: htmlspecialchars - Manual
http://jp.php.net/htmlspecialchars
<?php
htmlspecialchars($_POST["url"], ENT_QUOTES, 'UTF-8');
?>
第二引数には、ENT_QUOTESを入れておけばシングルクオートとダブルクオートが
共に変換されます。

ただし、上記ではまずいケースもあります。
Aタグの中ではJavaScriptが実行可能なので以下のような場合はXSSに対処できません。
<a href="<? echo htmlspecialchars( $_POST['url'] ) ?>">URLリンク</a>
このページに対してPOSTで'url'にjavascript:alert('NG') と入れて送信すると
URLリンクをクリックした際、アラートが表示されます。

実装する場合は、まずGETやPOSTに不正なデータが入っていないかを必ずチェックしてから
エスケープするということをやっておけば、問題ないでしょう。


【関連記事】

このブログ記事について

このページは、d-ramが2008年6月13日 16:10に書いたブログ記事です。

ひとつ前のブログ記事は「Apacheのディレクトリ表示を行わない方法」です。

次のブログ記事は「FireFox3 ダウンロード開始」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。