クロスサイト・スクリプティングとは
悪意のある人が不正なスクリプトをウェブページに埋め込み、利用者がブラウザ上で不正なスクリプトを実行してしまい被害にあってしまう脆弱性のことを言う。
その他の脆弱性と組み合わせて使われてしまうこともある。
脆弱性の原理
悪意のある人が不正なスクリプトを何らかの形で埋め込み、第三者が不正なスクリプトを実行することにより発生する。
埋め込みの方法、形式によって3種類に分類される。
反射型クロスサイトスクリプティング
ウェブアプリケーションがユーザから受け取った入力をそのままの形でウェブページの出力に利用していることが原因で発生する。
ウェブページの入力欄や、GET方式を採用している場合のURL中のクエリストリングから攻撃されうる。
格納型クロスサイトスクリプティング
攻撃者が入力した不正なスクリプトを、ウェブアプリケーションが内部に格納してしまうことが原因で発生する。
この場合、不正なスクリプトを格納したウェブページにアクセスしたすべてのユーザが被害を被る可能性がある。
DOMベースのクロスサイトスクリプティング
Webページに含まれる正規にスクリプトで動的にウェブページを操作した結果、意図しないスクリプトをウェブページに出力してしまうクロスサイト・スクリプティング
Javascriptのようにクライアントが動的にウェブページを生成する手段を用いている場合に発生しうる。
この不正な入力はサーバ側では実行されないという特徴がある。
脆弱性が悪用された際の影響
被害を受けるのはサーバ側ではなくユーザ側が主となる。
- 本物のウェブサイト上に偽物のウェブページが表示される。
- ブラウザに保存されているCookieを取得される。
- 任意のCookieをブラウザに保存させられる。
検査方法
情報の入力欄にスクリプトを含んだ文字列入力し、そのスクリプトが実行されないかを確認する。
文字入力欄に限らず、GET方式で送信されるhidden属性の情報も対象である。
例えば、HTMLの場合 '>"><hr>
と入力した際に水平線が表示されるようだと脆弱性が存在している。
対策方法
いずれも根本的な対策は入力された文字列をエスケープ処理をすることとなる。
他の言語に引き渡す前に適切なエスケープ処理を行うことで、DOMベースのクロスサイト・スクリプティングを防ぐことが可能である。