【php入門②】formの値を安全にphpで取得する~XSS対策~
【今回の紹介】
前回に引き続き以下の本を参考にphpの基礎的な部分の学習を行います。
前回の内容:http://forse.hatenablog.com/entry/2014/03/20/230824
【メモ】
①phpのセキュリティについて(クロスサイトスクリプティング(XSS対策))
クロスサイトスクリプティングとはformで作成する入力フォームなどに
悪意のあるスクリプトを埋め込む攻撃。
なにも対策を行っていなければ、formからJavascriptを自由に実行できるため、
・クッキーからユーザの情報を抜き取る
・他のサイトへの誘導
などなどが出来てしまうそうです。
参考:http://www.hp-stylelink.com/news/2013/09/20130913.php
http://www.websec-room.com/2013/03/14/567
※ちなみにクロームではXSS対策をしなくても
スクリプトの実行を防いでくれましたが、IE10では実行されました。
ブラウザの違いもあるようです。
①-①対策
php側で受け取った値をそのまま出力しないように
以下のようhtmlspecialcharsとENT_QUOTESを使用する
htmlspecialchars($_POST[],ENT_QUOTES);
■htmlspecialchars
htmlspecialcharsはHTMLの特殊文字を変換してくれるものです。
特殊文字の例を紹介すると、<や>、/,&などです。
■ENT_QUOTES
ENT_QUOTESは、htmlspecialcharsの引数の中の一つで、
シングルクオートとダブルクオートを共に変換してくれるものです。
参考:http://www.php.net/manual/ja/function.htmlspecialchars.php
http://d.hatena.ne.jp/porco_webangya/20130904/1378259713
【参考ソース】
<html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <form action="./testForm.php"method="post"> <span>名前は</span><input type="text" name="input1"> <p> <span>性別は</span><input type="radio" name="input2" value="男">男 <input type="radio" name="input2" value="女">女 </p> <input type="submit" value="送信"> </form> </body> </html>
<html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <?php $input1=(htmlspecialchars($_POST['input1'],ENT_QUOTES)); $input2=(htmlspecialchars($_POST['input2'],ENT_QUOTES)); print ($input1); print ($input2); ?> </body> </html>