XSSは、入力された文字列をスクリプト文と認識し、それを実行してしまうことが原因であるため、対策として、「<」「>」「&」「”」「’」などの特殊文字を、無害化(ただの文字(見た目は記号)として表示)するエスケープ処理が必要となる。
PHPでエスケープ処理をするのに用いる関数の一つが、htmlspecialchars()である。
書き方:htmlspecialchars('文字列',エスケープの種類(方法),'文字コード')
ただこれを何度も書くのは手間がかかり、コードが見づらくなるため、複数この処理をする場合、
function h($s) { return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); } ...h($_POST[ ]);
と書くほうが良い。
エスケープの種類(方法)のうち3つを以下に示す。
ENT_COMPAT ダブルクオートは変換するが、シングルクオートは変換しない
ENT_QUOTES シングルクオートとダブルクオートを共に変換する
ENT_NOQUOTES シングルクオートとダブルクオートは共に変換されない
<メモ>
サニタイジング:入力データの無害化。記号、特殊文字をエスケープしたり、もしくはそのような値があるときにプログラムを停止させたりすること。
エスケープ:サニタイジングするための手段の一つ。プログラム上使用出来ない記号、特殊文字を適切な文字列に置換する。HTMLでは「< 」を「&gt;」へ変換することをエスケープ処理と呼称。
エンコード:情報を暗号や通信に適した形式(コード)に変換すること。