クロスサイトスクリプティングの(XSS)対策はサニタイジング(データの無害化)になります。
サニタイジングのタイミングはデータ入力時ではなくHTML生成時に行うのが良いです。
PHPでは、htmlspecialchars
PHP: htmlspecialchars - Manual
http://jp.php.net/htmlspecialchars
共に変換されます。
ただし、上記ではまずいケースもあります。
Aタグの中ではJavaScriptが実行可能なので以下のような場合はXSSに対処できません。
URLリンクをクリックした際、アラートが表示されます。
実装する場合は、まずGETやPOSTに不正なデータが入っていないかを必ずチェックしてから
エスケープするということをやっておけば、問題ないでしょう。
サニタイジングのタイミングはデータ入力時ではなくHTML生成時に行うのが良いです。
PHPでは、htmlspecialchars
()を通せばほとんどのXSSは対応できるようです。PHP: htmlspecialchars - Manual
http://jp.php.net/htmlspecialchars
<?php
htmlspecialchars($_POST["url"], ENT_QUOTES, 'UTF-8');
?>
第二引数には、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に不正なデータが入っていないかを必ずチェックしてから
エスケープするということをやっておけば、問題ないでしょう。
