アットウィキロゴ

クロスサイトスクリプティング


利用者が入力した値などを Web ページに出力するときに無害化しないために、ほかの利用者のブラウザで意図しないスクリプトが動いてしまう脆弱性です(英語では cross-site scripting。XSS と略す。IPA の資料では「クロスサイト・スクリプティング」)。CISSP ではCISSPドメイン8 ソフトウェア開発のセキュリティで扱う、Web アプリケーションの代表的な脆弱性です。型には反射型XSS・永続型XSS・DOMベースXSSがあります。

定義

MITRE の CWE(ソフトウェアの弱点の分類)は、XSS を CWE-79 として、「利用者が制御できる入力を、ほかの利用者に提供する Web ページとして出力する前に、無害化しない、または誤って無害化する」弱点と定義しています。MITRE の CWE Top 25(最も危険なソフトウェアの弱点の一覧、2025年版)では1位です。

このページでいう「無害化」は、CWE の neutralization(特別な意味を持つ記号や要素が、その意味を持たないようにすること)の訳です。手段には、記号を置き換えるエスケープ(符号化)と、許すタグや属性に絞るサニタイズがあります。

型

CWE-79 は、XSS の主な型を次のように説明しています。
型 別名 どこで起きるか
反射型XSS 非永続型、Type 1 サーバのアプリケーションが、HTTP の要求(リクエスト)からデータを読み、そのまま応答(レスポンス)に返すとき
永続型XSS 格納型、Type 2 サーバのアプリケーションが、危険なデータをデータベースや掲示板などに保存し、後でそれを読み出してページに含めるとき
DOMベースXSS Type 0 ブラウザの側のスクリプトが、ページの構造(DOM)を操作するときに、自分で注入してしまうとき
どの型も、根本は同じ「出力の前の無害化の不足」です。

何が起きうるか

CWE-79 は、起きうることとして、利用者のセッションの情報(Cookie など)の窃取や、利用者の権限での操作などを挙げています。ページの中で動くスクリプトは、そのページを見ている利用者の権限で動くからです。

違い・誤解しやすい点

  • 「入力を検査すれば防げる」:IPA は、入力値の内容の検査を保険的な対策としつつ、幅広い文字を許す仕様では対策にならないので、頼ることは勧めないとしています。根本は、出力するときの無害化です
  • 「CSP(ブラウザに、読み込みや実行を許す範囲を指示する仕組み)を入れれば十分」:OWASP は、CSP だけに頼ることを、避けるべき進め方の一つに挙げ、CSP は追加の防御の層として使うよう勧めています
  • ''「HTML のエスケープをすれば、リンクの URL も安全」'':IPA は、リンク先などの URL を出力するときは、「http」か「https」の方式で始まる URL だけを許すことを、別の根本的解決として挙げています。「javascript:」で始まる URL は、HTML のエスケープでは無害になりません
  • [[クロスサイトリクエストフォージェリ]](CSRF)との違い:XSS はページの中でスクリプトが動く弱点、CSRF は利用者が意図しない要求を送らされる弱点です

守る手段

IPA は、脆弱性ごとの対策を「根本的解決」と「保険的対策」に分けています。下の並べ方は、それに沿った筆者の整理です。
区分 手段 内容
根本的解決 出力するときのエスケープ IPA は根本的解決として、Web ページに出力する全ての要素にエスケープ処理(「<」「>」「&」などを HTML の文字参照に置き換えるなど)を施すことを挙げている。HTML のタグを出力するときは、属性の値を「"」で囲み、その中の「"」も「"」に置き換えるとしている。OWASP は、出力する場所(HTML の本文、属性、JavaScript、CSS、URL)ごとに、合った符号化をすることを勧めている。誤った符号化は弱点になりうるとしている
根本的解決 URL を出力するときの制限 リンク先や画像の URL を出力するときは、「http」か「https」の方式で始まるものだけを許す(IPA)
根本的解決に準じる(筆者の整理) フレームワークの機能を使う OWASP(Web アプリケーションのセキュリティの団体)は、テンプレートや自動のエスケープを備えた現代のフレームワークを使うと XSS が減るとし、その機能を迂回する書き方に注意するよう挙げている。米国の CISA(サイバーセキュリティ・インフラストラクチャセキュリティ庁)と FBI(連邦捜査局)も、現代の Web のフレームワークを使うことを挙げている
根本的解決に準じる(筆者の整理) HTML を受け付けるなら、サニタイズする 利用者に HTML の入力を許す場合は、危険な HTML を取り除くサニタイズの処理を通す(OWASP)
保険的対策 Cookie の HttpOnly 属性 Cookie をスクリプトから読めないようにする(IPA)
保険的対策に近い(筆者の整理) CSP 多層防御として設定する(OWASP)
CISA と FBI は、XSS は防げる脆弱性で、製品にあってはならないとし、経営層に、開発の担当がこの欠陥をどう無くしているかを確かめるよう求めています(Secure by Design Alert、2024年9月)。

関連するページ


出典

確認日:2026年10月18日
最終更新:2026年10月18日 18:18