9月 092012
 

■ XSS(クロスサイトスクリプティング)対策

ソフトウェアのセキュリティホールの一つで、Webサイトの訪問者の入力をそのまま画面に表示する掲示板などのプログラムが、悪意のあるコードを訪問者のブラウザに送ってしまう脆弱性のこと。(e-wordsから)

* Example

データ入力フォーム-form.html

<html>
<body>
お名前を入力して下さい。
<form action="welcome.php" method="post">
  <input type="text" name="name" value="" />
  <input type="submit" value="OK" />
</form>
</body>
</html>

データ表示スクリプト-welcome.php

<php
//フォーム入力値取得
$name = $_POST['name'];

echo 'ようこそ、',$name,'さん!';

* Description

上記のコードにはXSS脆弱性がある。
例えば、名前の代わりにテキストボックスに><script>alert("checkXSS");</script>と入力した場合、入力したスクリプトが実行されてしまう。(最近のブラウザでは対処されているものもあるが、悪意のある人間であればそれは関係無い話)
この脆弱性を利用すると、javascriptが実行できてしまうため、非常に危険である。例えば、掲示板に対策がされていなかったらどうなるか。悪意のあるページに移動させたりできてしまう。

* Answer

対策としては、$_GETや$_POST、また$_COOKIEで取得する文字列はエスケープ(変換)が必要。htmlspecialcharshtmlentitiesを行うと良い。

htmlspecialchars(String, Flags[, Encoding])
htmlspecialchars(String, Flags[, Encoding])

文字中にあるHTML特殊文字をHTML用の表現形式へ変換する関数。(PHP5.4ではEncodingはデフォルトでutf-8となっている)

htmlspecialchars('<script>alert("checkXSS");</script>', ENT_QUOTES, 'utf-8');

結果(表示)

'<script>alert("checkXSS");</script>

結果(ソース)

&lt;script&gt;alert(&quot;check&quot;);&lt;/script&gt;

このようになります。これでXSS対策が出来ますね。

Pocket

 Posted by at 12:28 AM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*