XSS(クロスサイトスクリプティング)とは
この教材でわかること:コメント欄や投稿フォームに仕込まれた悪意のある文字が、訪問者のブラウザで動いてしまう「XSS(クロスサイトスクリプティング)」のしくみと、サイト運営者としての備えです。
このシリーズ「攻撃者の視点を知る」では、Webサイトを狙う代表的な攻撃の手口を、1つずつやさしく解説します。目的は攻撃の「やり方」を知ることではなく、しくみを知ることで「何を」「なぜ」「どう」守るべきかを判断できるようになることです。実際に攻撃を試すための情報は含みません。前の教材「SQLインジェクション」では、入力された文字が「命令」として読み取られてしまう問題を見ました。今回のXSSも根っこの仕組みは似ていますが、何が実行されてしまう場所が違います。
XSSとは
SQLインジェクションでは、紛れ込んだ命令が「厨房」(データベース)に伝わって実行されました。XSS(クロスサイトスクリプティング)では、同じような紛れ込みが「客席の掲示板」(訪問者のブラウザ)で起きます。
たとえば、お店が「お客様の声」コーナーとして、だれでも書き込める掲示板を店内に設置しているとします。そこに、だれかが本物の店内アナウンスのように見える張り紙をこっそり貼ったとしたら、後から来たお客さまは、それが本物のお知らせだと思い込んで従ってしまうかもしれません。XSSとは、本来は訪問者に見せる文章だけを受け付けるはずの入力欄(コメント欄、お問い合わせフォーム、プロフィール欄など)に、ブラウザ上で動くプログラムの断片が紛れ込み、それがほかの訪問者のブラウザでそのまま実行されてしまう手口です。ブラウザは「このサイトが表示した内容」として受け取るため、紛れ込んだ部分が悪意のあるものかどうかを見分けることができません。
2つの代表的なパターン
蓄積型(ためこみ型)
コメント欄や投稿フォームなど、サイト側に文字が保存される場所に仕込まれ、その後そのページを開いたすべての訪問者のブラウザで動いてしまうパターンです。先ほどの掲示板の例で言えば、貼り紙がそのまま掲示板に残り続けている状態です。一度仕込まれると、管理者が気づかない限り動き続けます。
反射型(その場返し型)
検索結果やエラーメッセージのように、送った内容がそのまま画面に表示される仕組みを利用し、特定のリンクを開いた人だけに影響するパターンです。攻撃者は、巧妙に作ったリンクを相手に開かせることで成立させます。
何が起きるおそれがあるのか
- ログイン中の訪問者の情報(ログイン状態を保つための情報)が盗まれ、本人になりすまされる
- ページの内容が勝手に書き換わって表示される
- 偽の入力欄やリンクが表示され、訪問者がだまされて別の情報を入力してしまう
なぜ起きてしまうのか
サイトが、入力された文字を「そのまま画面に表示していい文章」として扱ってしまい、「ブラウザに実行させてはいけない部分」として変換(エスケープ処理)していない場合に起こります。訪問者が入力した内容を表示する場所がある限り、どこでも起こりうる問題です。
サイト運営者としての備え
- 制作会社に出力の扱いを確認する:「入力された内容を表示するとき、ブラウザに実行されないよう変換(エスケープ)する処理をしているか」を確認しましょう。
- CMSとプラグインを更新する:コメント機能やお問い合わせフォームのプラグインで見つかったXSSの弱点は、更新で修正されます。使っていないプラグインは減らしておきましょう。
- コメント・投稿機能の運用を見直す:コメント欄を使っていない場合は無効にする、公開前に承認制にするなど、紛れ込む経路そのものを減らすことも有効です。
外から見える範囲の設定は無料診断で確認できます。自分で判断できない点は「制作会社に確認すること」を使って相談しましょう。
このシリーズの続き
入力欄が狙われる手口として、「SQLインジェクション」も代表的な手口です。あわせて読むと理解が深まります。ここまでの2つは、サイトの「中身」に紛れ込む手口でした。次は「ブルートフォース攻撃」で、サイトの中身ではなく、ログインそのものを狙う手口を見ていきます。
参考にした公開情報
この教材は公開情報をもとに、セキュリティ担当がいない方にも分かるよう編集部がまとめたものです。個別のサイトの安全を保証するものではありません。
