リスティング広告代行の専門会社|Yahoo!プロモーション広告・Google AdWords完全対応|東京・大阪・名古屋

【PHP】XSS(クロスサイトスクリプティング)とは


Webアプリケーションに対する攻撃の手法には色々なものがありますが、中でも有名なものにクロスサイトスクリプティング(「XSS」と略します)があります。

XSS(クロスサイトスクリプティング)とは

XSSは、あるサイトから別のサイトにスクリプトを送り込み、悪意あるスクリプトを、そうとは知らない訪問者に実行させます。このため、「クロスサイト(サイト横断的な)スクリプティング(スクリプト処理)」と呼ばれます。

この説明ではよく分からないかも知れませんが、実質的には、「PHPなどで、ユーザがフォームに入力した文字列を出力するときに、適切にエスケープしないと、スクリプトのコードがそのまま出力されて実行されてしまいますよ」ということです。

簡単な例

例えば、以下のようなPHPコードがあったとします。

<a href="/search.php?q=<?php echo $keyword; ?>">検索</a>

この場合、変数 $keyword の中身が「test」だったら、出力されるHTMLコードは以下のようになります。

<a href="/search.php?q=test">検索</a>

このコードには何ら問題ないですね。

しかし、変数 $keyword の中身が
"><script>alert('attack!');</script><a href="
だったらどうでしょうか。

この場合、出力されるHTMLコードは以下のようになります。

<a href="/search.php?q="><script>alert('attack!');</script><a href="">検索</a>

このコード、ブラウザで表示してみれば分かりますが、

<script>alert('attack!');</script>

このスクリプトのコードが実行されてしまいます。

この変数 $keyword の中身がサイトのフォームから受け取った値だとすると、フォーム経由で悪意あるスクリプトのコードを上記のようにして送られてしまうリスクに対して、対策がされていないと言えるでしょう。

これがXSS脆弱性です。

対策

XSS対策は、至って簡単です。
「ユーザに入力させた値を出力するときは適切にエスケープする」、これだけです。

具体的には、元のこのコードを・・・

<a href="/search.php?q=<?php echo $keyword; ?>">検索</a>

このように修正します。

<a href="/search.php?q=<?php echo htmlspecialchars($keyword); ?>">検索</a>

これでXSS対策は基本的にはOKです。

htmlspecialchars はPHPの組み込み関数で、HTMLにおいて特殊な意味を持つ文字(< とか " とか)をHTMLエンティティ(&lt; とか &quot; とか)に変換してくれます。

こうしておくと、出力されるHTMLコードは

<a href="/search.php?q=&quot;&gt;&lt;script&gt;
alert(&apos;attack!&apos;);&lt;/script&gt;&lt;a href=&quot;">検索</a>

となり、スクリプトのコードは無効化されているため、安全です。

まとめ

XSSは非常に有名な攻撃手法ですが、それでも多くのWebアプリケーション(動的なWebサイト)が対策をしていないのが現状です。

たったこれだけの対策でも、しているのとしていないのでは安全性が全く違ってきますので、Webアプリケーションを公開する場合は、手を抜かずにしっかりセキュリティホールを埋めるように気をつけましょう。




業界初のリスティング広告運用総合支援ツール Lisket(リスケット)

リスティング広告の下請け業務請け負います

リスティング広告お客様実績資料集のご請求

サービス概要ご紹介資料

お問い合わせ