クロスサイトスクリティング(XSS)とは
掲示板サイトなどの入力内容をWebページに表示するWebアプリケーションにおいて、Webサイトの脆弱性を利用した攻撃手法のこと。
入力内容からWebサイトの表示を生成する処理の際、Webページに任意のスクリプトが紛れ込み、Webサイトを閲覧したユーザーにスクリプトが実行されてしまう。
クロスサイトスクリティング(XSS)が起こる原因
起こる原因は2つ
- 入力が制限されていないこと
- HTMLタグやJavaScriptなどのスクリプトが入力された場合、その内容をそのまま実行してしまう
→ エスケープ処理がされていない
起こるとどうなるのか?
実際にクロスサイトスクリプティングの被害に合うと下記のようなことが起こってしまう。
- ユーザーを騙す表示によるフィッシング詐欺
- 正当なメールやWebサイトを装い、個人情報・暗証番号等が取得されてしまう
- クッキー情報の取得によるセッションハイジャック
- Webアプリケーションなどでユーザーを識別する情報、セッションID(IDやパスワード情報など)のCookie情報をネットワーク上で盗聴されたり、規則性から類推されることで、攻撃者が利用者になりすます攻撃手法
- 不正な送金、利用者が意図しない商品購入、利用者が意図しない退会処理等が発生する
- Webアプリケーションなどでユーザーを識別する情報、セッションID(IDやパスワード情報など)のCookie情報をネットワーク上で盗聴されたり、規則性から類推されることで、攻撃者が利用者になりすます攻撃手法
- Webサイトの改ざん
- Webサイト内のコンテンツやシステムが、攻撃者によって意図しない状態に変更されてしまう
実例
Youtube
「ニュース速報:ジャスティン・ビーバーが交通事故で死亡」といったデマのポップアップが表示されたり、他のWebサイトにリダイレクト、コメントが表示されないなどの被害が発生した。
- ユーザーのアカウントが遠隔的にハイジャックされ、訳の分からないリツイートを大量に投稿したりといった被害が発生
対策
①入力値を制限する
例えば、年齢や電話番号を入力する際は数値しか入力できないようにすれば、スクリプトを入力されることがなくなる
ただクライアントサイドのみで制限をかけてしまうとデベロッパーツール等で簡単に変更ができてしまうため、必ずサーバ側での制限設定を行うようにする
②エスケープする
例えば<script>〜</script>という文字列をスクリプトではなく、文字列となるように置換してあげる
③WAFで防御する
①・②はアプリケーション作成の段階で対応するものであり、人が作成するためどうしても見落とす可能性がある
WAFではユーザからのリクエスト内容をチェックしているため、クロスサイトスクリプティングを防御することが可能