【PHP脆弱性対策】XSS(クロスサイトスクリプティング)への対応方法
今週の主な作業は、お問い合せフォームの脆弱性対策でした。
例えば、
入力フォームに「<script>alert(“test”);</script>」というJavascriptコードを打ち込んでみてください。
送信ボタンをクリックした特に、このコードが実行されてしまうことがあります。
これは、XSS(クロスサイトスクリプティング)やスクリプトインサーションという現象です。
上記のようなコードであれば大きな問題はないです。
ですが、ユーザーが悪意のあるコードを入力すると、そのまま実行されて重大なトラブルに繋がってしまうこともあります。
そこで、入力画面から送られてきた値をhtmlspecialchars()という関数を使って安全に出力する必要があります。
htmlspecialchars()を利用することで、JavaScriptやHTMLなどの意味のある文字列をエンティティに変換することができます。
このように使います↓
<?php
echo htmlspecialchars($_POST[“name”], ENT_QUOTES, “UTF-8”);
?>
実際には、配列の値が送られてくることもあり得るので、
私の場合は、
/*
*説明:特殊文字をHTMLエンティティに変換する
* IN :$string HTMLエンティティの対象となる文字列
* OUT:HTMLエンティティ変換後の文字列
*/
function h($string){
if(is_array($string)){
return array_map(“h”, $string);
}else{
return htmlspecialchars($string, ENT_QUOTES, “UTF-8”);
}
}
このような関数を作ってやり、
foreach($_POST as $key => $val){
if(!empty($val)){
$$key = (function_exists(“h”)) ? h($val) : @htmlspecialchars($val);
}
}
という具合にして、POSTされてきた入力値を確認画面で処理してやります。
XSS(クロスサイトスクリプティング)に関しては、これで完了です。
フォームの脆弱性・セキュリティ対策は、他にもたくさんあります。
それは、また別の記事で書きます。