クロスサイトスクリプティングとは
この記事は約 2 分で読めます
クロスサイトスクリプティング (XSS: Cross-Site Scripting) とは、 Web ページに悪意あるスクリプトを注入する攻撃手法です。攻撃者が仕込んだ JavaScript が被害者のブラウザで実行され、 Cookie の窃取、セッションハイジャック、フィッシングページへのリダイレクトなどが行われます。 2024 年の OWASP Top 10 でもインジェクション攻撃の一種として上位に位置しており、 Web アプリケーションの脆弱性の中で最も一般的なものの一つです。
危険かどうかを決めるのは値ではなく置かれる先
受け取った値が問題を起こすかどうかは、値そのものの見た目では決まりません。同じ文字の並びでも、文章として置かれる場所、印の中の属性として置かれる場所、指示として読み取られる場所のどこに入るかで扱いが変わり、ある場所では意味を持たない文字が別の場所では区切りとして働きます。そのため、受け付ける段階で一律に整える方式は、置かれる先が複数ある構成では必ずどちらかにずれます。置かれる先を知っているのは値を書き出す直前の処理だけなので、整える位置は入口ではなく出口にしか置けません。次に、値を受け取る画面と値を見せる画面が別であることが、前提の伝わらない区間を作ります。見せる側は受け取る側の想定を知らず、別の時期に別の目的で作られていれば、受け取る側で決めた取り決めはそこには届きません。したがって受け取る側で手を入れたことは、見せる側で安全であることを意味しません。確かめる対象の数は、受け取る箇所の数と見せる箇所の数の掛け算で増えます。そして読み取りが行われるのは、値を保存した側の管理下ではなく、見ている人の手元です。その環境の構成は保存した側からは見えず、そこで何が読み取られたかの記録も保存した側には残りません。残るのは値を受け付けたという記録だけなので、気付く経路は、受け付けた内容を後から見直すか、外側で観測された結果からたどるかのいずれかに限られます。
XSS 攻撃のフロー
XSS の種類
反射型 XSS は URL パラメータに含まれたスクリプトがそのままページに反映される型です。格納型 XSS はデータベースに保存されたスクリプトが他のユーザーに表示される型で、掲示板や SNS のコメント欄が狙われやすく、より深刻な被害をもたらします。 DOM ベース XSS はクライアントサイドの JavaScript の処理に起因する型で、サーバーを経由しないため検出が困難です。
具体的な被害シナリオ
よくある誤解は「 XSS は見た目を変えるだけの軽微な攻撃」というものです。実際には、格納型 XSS を使って EC サイトの商品レビュー欄に悪意あるスクリプトを埋め込み、レビューを閲覧した全ユーザーのセッション Cookie を窃取するといった深刻な攻撃が可能です。窃取された Cookie を使えば、攻撃者は被害者のアカウントで商品を購入したり、登録情報を変更したりできます。また、フィッシングと組み合わせて、正規サイト上に偽のログインフォームを表示させる手口も確認されています。
ユーザーとしての対策
ブラウザを最新に保ち、不審なリンクをクリックしないことが基本です。サービスごとに固有のランダムパスワードを使い分けることで、 XSS 攻撃でセッションが乗っ取られても他のサービスへの被害拡大を防げます。ブラウザの拡張機能で JavaScript の実行を制限することも有効な対策です。
この記事は役に立ちましたか?