感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

スクリプトを仕込んで情報を抜き出すクロスサイトスクリプティング(XSS)

スポンサーリンク

概要

クロスサイトスクリプティング(XSS)はスクリプト攻撃の一種。
その実行過程で複数のWebサイトを行き来することから、クロス・サイトという呼び方になっている。
"XSS"と称しているのは、CSSとの混同を避けるためだ。

クロスサイトスクリプティング(XSS)は、HTMLへのスクリプト埋め込みを利用して、複数のサイトにまたがって誘導・情報の搾取などを行う攻撃手法である。

脆弱性があるWebサイトだと、攻撃者が仕込んだスクリプトが実行されてしまう。
XSSの悪用の方法は、「クッキー値の盗み出し」、「JavaScriptによる攻撃」、「画面の書き換え」などがある。

たとえば、セッションハイジャックを狙っている場合。
攻撃者はセッション情報が欲しい。
そのセッション情報はどこに書いてあるか?クッキーに書いてある!
クッキーを盗み見たいが、発行したサーバじゃないとクッキーが見れないことが多い。

ではどうするか、発行したサーバじゃないのにクッキーを見るために、XSSを使う。

具体的には、「攻撃者が用意した罠のサイト」を見に行くと、そこに「お前、今からTwitterにアクセスして、そのクッキーを俺に送れ!」みたいなスクリプトが書いてある。
罠のサイトを見たら、その罠サイトの中でTwitterにアクセスして、そのTwitterのクッキー情報を攻撃者に送る、みたいなことをされてしまう。

クッキーにセッションIDが書かれていれば、セッションハイジャックされるかもしれないし、ユーザIDとパスワードが書いてあれば、そのまま取られてしまうかもしれない。

対策

利用者が送ってくるデータを無害化するサニタイジングを行う。
たとえば、サーバ側でHTMLを生成する際は、「<」のタグは「<」と記述(=エスケープ)する。

「安全なWebアプリケーションの作り方」では、XSS対策の基本として、

・要素内容については「<」と「&」をエスケープする
・属性値については、ダブルクォートで囲って、「<」と「"」と「&」をエスケープする

と書かれている。必要最小限の対策だと。

その他の具体的な対策方法などは、書籍を読むと非常に詳しく書いてある。