読者です 読者をやめる 読者になる 読者になる

FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【php入門②】formの値を安全にphpで取得する~XSS対策~

【今回の紹介】

前回に引き続き以下の本を参考にphpの基礎的な部分の学習を行います。


前回の内容:http://forse.hatenablog.com/entry/2014/03/20/230824


よくわかるPHPの教科書

よくわかるPHPの教科書






【メモ】

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>
.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }