今週の主な作業は、お問い合せフォームの脆弱性対策でした。
例えば、
入力フォームに「<script>alert("test");</script>」とJavascriptのコードを打ち込まれると、
確認画面に移動した際にこのコードが実行されてしまいます。
いわゆる、
XSS(クロスサイトスクリプティング)やスクリプトインサーションという現象で、
ユーザーが悪意のあるコードをテキストボックスなどに入力すると、
確認画面でそのまま実行されてしまい、重大な脆弱性に繋がってしまいます。
そこで、
入力画面から送られてきた値をhtmlspecialchars()を使って安全に出力する必要があります。
htmlspecialchars()を利用することで、
JavaScriptやHTMLなどの意味のある文字列をエンティティに変換することができます。
このように使います。
<?php
echo htmlspecialchars($_POST["name"], ENT_QUOTES, "UTF-8");
?>
実際には、配列の値が送られてくることもあり得るので、
私の場合は、
<?php /* *説明:特殊文字を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"); } } ?>
のような関数を作ってやり、
<?php foreach($_POST as $key => $val){ if(!empty($val)){ $$key = (function_exists("h")) ? h($val) : @htmlspecialchars($val); } } ?>
という具合にして、
送信されてきた入力値を確認画面で処理してやります。
まあ、
XSS(クロスサイトスクリプティング)に関してはこれでいいですかね。
フォームの脆弱性・セキュリティ対策は、
他にもたくさんあります。
それは、
また別の記事で書きます。
PHP脆弱性対応PHP脆弱性対応 クリックジャッキング攻撃への対応
PHP脆弱性対応PHP脆弱性対応:フォームのセキュリティー対策 入力値の妥当性チェック
PHP脆弱性対応PHP クッキー(Cookie)にセキュア属性(secure属性)を付与
この記事へのコメントはありません。