クロスサイトスクリプティング(XSS)とは?仕組みと対策をやさしく解説

クロスサイトスクリプティング(XSS)とは?仕組みと対策をやさしく解説

クロスサイトスクリプティングに不安を抱くセキュリティ初心者のイメージ
「XSSって、結局何が起きる攻撃なの?」
「反射型・格納型…種類が多くて混乱する」
「試験では対策のどこが問われるの?」

あなたが毎日開くコメント欄や掲示板を思い浮かべてください。誰かの投稿が、ページを見た人のブラウザの中で勝手に動き出す——XSS(クロスサイトスクリプティング)は、その隙を突く攻撃です。

正体は「サイトが利用者の入力をそのまま画面に出してしまう」弱さ。そして守りの主役は、攻撃を止める難しい技術ではなく、表示するときのエスケープ処理です

 

ここからは、被害が生まれる流れを図で開き、混同しやすい反射型・格納型・DOM型を表で仕分け、試験で最頻出の「入力検証と出力エスケープ、どちらが主役か」まで整理します。SG・応用情報の対策に効きます。なお悪用防止のため、攻撃の具体的な文字列やコードは載せません。

 

1. 被害が生まれる流れ — 狙われるのは第三者

XSSで被害が第三者に及ぶ流れのイメージ

XSSの本質は「利用者の入力を、ただの文字ではなく“動く仕掛け”として画面に出してしまう」問題です。掲示板やコメント欄のように、入力をそのまま表示するサイトで起こります。被害の流れは3ステップです。次の図を見てください。

 

①攻撃者 投稿欄に仕掛け ②サイト そのまま表示 ③第三者 ブラウザで実行 被害を受けるのは、書き込んだ人ではなく「ページを見ただけ」の利用者

 

ここでの怖さは、被害を受けるのが「書き込んだ人」ではなく「そのページを開いただけの第三者」だという点です。利用者に落ち度はなく、サイトの作りの弱さが、そのまま他人の被害に変わります。

 

たとえるなら、誰でも貼れる掲示板です。普通のメモのつもりの貼り紙に、見た人を勝手に動かす仕掛けが紛れている。XSSも、表示するはずの文字が仕掛けとして動いてしまう問題です。

 

2. XSSの3タイプ — 反射型・格納型・DOM型

XSSの3タイプを仕分けるイメージ

XSSは1種類ではありません。あなたが混同しやすい3タイプを、仕掛けが「どこを経由するか」で仕分けた表がこれです。

 

タイプ 仕掛けの通り道 特徴
反射型 リンクなどの入力が、その場の応答に跳ね返る だましのリンクを踏ませて発動。1回きり
格納型 サーバに保存され、見た人全員に配られる 掲示板などに居座り、被害が広がりやすい
DOM型 ブラウザ側の処理だけで発動(サーバを経由しない) 画面を組み立てるスクリプトの隙を突く

 

この3つのうち、あなたがとくに警戒したいのが格納型です。仕掛けがサーバに居座り、そのページを開いた人へ次々に配られるため、被害が一度に大きく広がります。反射型が「1人を狙う釣り」なら、格納型は「みんなを巻き込む罠」だと捉えてください。

 

XSSとSQLインジェクションは、どちらも「利用者の入力を安全に扱えていない」ことが原因という共通点があります。あわせて押さえたいなら、SQLインジェクションとは で、動く場所(ブラウザかデータベースか)の違いを確認できます。

 

3. 何が奪われるのか — 被害の3方向

XSSで起こる被害を示すイメージ

あなたが対策の重さを実感するには、何が起こりうるかを知るのが近道です。被害は大きく3方向に整理できます。

 

  • 盗まれる: ログイン状態を示すクッキーなど、大切な情報が奪われる
  • なりすまされる: 利用者本人になりすまして操作される
  • だまされる: 本物そっくりの偽入力画面に誘導される

 

やっかいなのは、利用者が信頼して使っているサイトの上で被害が起こる点です。怪しいサイトを避けていても、よく使うサイトの投稿欄に仕掛けが紛れていれば巻き込まれます。だからこそ、サイトを作る側が表示の段階で防ぐ責任を負います。

 

被害は「盗まれる・なりすまされる・だまされる」の3語で覚えると、試験でも思い出しやすくなります。いずれも利用者の信頼を直接損なう結果につながります。

 

4. 防御の核心 — 主役は「出力エスケープ」

出力エスケープを中心とした防御のイメージ

ここが試験でも実務でも肝心なところです。対策は複数ありますが、主役は「表示(出力)するときのエスケープ処理」だと押さえてください。入力を受け取る段の検証は、あくまで補完です。両者の役割を表で分けます。

 

対策 タイミング 役割
出力エスケープ 画面に表示するとき 主役。記号をただの文字に変え、仕掛けを動かさない
入力値の検証 データを受け取るとき 補完。想定した形式・文字だけを受け付ける
CSP(コンテンツセキュリティポリシー) ブラウザでの実行時 多層防御。許可しないスクリプトの実行を抑える

 

なぜ出力側が主役なのか。理由は、同じデータでも表示する場所によって危険な記号が変わるからです。受け取った瞬間に「安全」と判断すると、別の画面で表示したときに穴が空きます。だから「出す直前に、その場所に合わせて無害化する」のが確実な守り方になります。

 

個人の注意だけに頼らないことも大切です。安全な表示処理を部品として標準化し、レビューで公開前に危ない実装を見つけ、WAFで入口の不審な通信を減らす。こうした仕組み化は、情報セキュリティ全体の管理の一部です。全体像は 情報セキュリティマネジメントとは で確認できます。

 

5. 現場の防御優先順位と、試験での問われ方

実務と試験の両面から守りを固めるイメージ

守りは、あれもこれもと手を広げると穴が残ります。当社の在籍エンジニア(SE歴15年以上)が現場で付ける、防御の優先順位はこうです。

 

  1. 出力エスケープ(最優先):表示する場所ごとに、記号をただの文字へ変える。ここが抜けなければ、被害の大半は防げます。
  2. 入力値の検証(補完):想定した形式・文字だけを受け付け、危ない入力を入口で減らす。
  3. CSPなどの多層防御:仕組みで許可しないスクリプトの実行を抑え、万一を受け止める。

 

あなたが漏らしやすいのは、データを受け取った瞬間に「安全」と思い込むこと。同じデータを別の画面(メール本文・管理画面など)で出すと穴が空きます。「入口で1回きれいにすれば安心」ではなく「出す場所ごとに無害化する」が現場の鉄則です。

 

試験では、対策の選択肢から適切なものを選ばせる形が定番です。あなたが押さえておく3点はこれです。「入力値の検証だけで防げる」は誤りで主役は出力エスケープ、SQLインジェクションとは「動く場所(ブラウザかデータベースか)」が違うだけで発想は同じ、被害を受けるのは書き込んだ本人ではなく第三者——この3点が繰り返し問われます。

 

次のステップ

セキュリティ分野が試験全体でどう問われるかを俯瞰したいなら、情報セキュリティマネジメント試験の試験範囲と勉強法ガイド で学習の優先順位を立てるのがおすすめです。

得点力に変えるなら、SG 脆弱性管理の問題集 で、実際の出題角度に手を動かして慣れておくのが近道です。