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

公開日:

※当サイトはアフィリエイトプログラムを利用しています。

「掲示板やコメント欄に書き込んだだけなのに、他の利用者のアカウントが乗っ取られた」と聞くと、そんなことが起きるの?と感じるかもしれません。

Webサイトの入力欄やパラメータの脆弱性を悪用し、悪意のあるスクリプトを他の利用者のブラウザ上で実行させるクロスサイトスクリプティング(XSS)は、今も昔も変わらず被害が絶えない代表的なサイバー攻撃の一つなんですね。
攻撃に成功すると、Cookie情報の窃取によるなりすましログインだけでなく、偽の入力フォーム表示によるフィッシング被害や、マルウェアへの誘導につながる危険もあります。

クロスサイトスクリプティングの仕組みを分かりやすく解説し、WordPressなどのサイト運営者が今日から実践できる予防策まで、図解を交えながら紹介。

詐欺の心配一切なし!ワクワクメールへGO

クロスサイトスクリプティングってどんな攻撃?

クロスサイトスクリプティングの仕組みを図解

クロスサイトスクリプティング(XSS)とは、掲示板の投稿欄やコメント欄、検索窓、プロフィール入力欄などに、攻撃者が「悪意のあるスクリプト(JavaScriptなどのプログラム)」を書き込み、そのページを閲覧した他の利用者のブラウザ上で不正なスクリプトを実行させる攻撃です。

XSSはサイトを閲覧している利用者のブラウザ側を狙う点が大きな特徴。
攻撃者は正規のサイトを踏み台として利用し、そのサイトを信頼している利用者を騙すため、被害の矛先はサイト運営者だけでなく、閲覧した利用者にも直接及びます。

ここで、専門用語を簡単に整理しておきましょう。

クロスサイト(Cross-Site)とは
本来は無関係なはずの別サイト(攻撃者が用意したスクリプト)が、正規サイトをまたいで影響を及ぼすことを指す言葉。
スクリプティング(Scripting)とは
JavaScriptなど、ブラウザ上で動作するプログラム(スクリプト)を実行させること。
XSSの主な3つのタイプ
攻撃者の狙い方によって「反射型」「格納型」「DOM型」の3種類に大きく分けられます。

反射型(Reflected XSS)
悪意のあるスクリプトを含んだURLを利用者にクリックさせ、サーバーがそのスクリプトをそのまま画面に「反射」させることで実行される手口。

格納型(Stored XSS)
掲示板やレビュー欄などにスクリプトを書き込み、サーバー側に保存させることで、そのページを見た全ての利用者に被害が及ぶ、より深刻な手口です。

DOM型(DOM based XSS)
サーバーを経由せず、ブラウザ内でページを組み立てる処理(JavaScript)の不備を突いて、閲覧者側だけで攻撃が完結する手口。
例えば、URLの「#」以降の文字列(ハッシュ値)や検索パラメータの内容を、JavaScriptがチェックせずにそのままページへ書き込むような作りになっていると、そこに悪意のあるスクリプトを混ぜ込んだリンクを踏ませるだけで攻撃が成立してしまいます。
サーバー側のログには痕跡が残りにくいため、発見が難しい点も特徴です。

IPA(独立行政法人情報処理推進機構)が公開している脆弱性の届出状況を見ても、クロスサイトスクリプティングは毎回上位を占める代表的な脆弱性であり、届出全体の半数以上を占める時期もあるほど、今なお発生件数の多い攻撃です。

目次へ

もしXSSの被害に遭ったらどうなる?

この攻撃を受けると、閲覧者のブラウザが乗っ取られたのと同じ状態になるため、サイト運営者・利用者の双方に被害が及びます。

  • セッションハイジャック
    ログイン情報(Cookie)を盗まれ、本人になりすましてログインされる
  • 偽画面の表示
    本物そっくりの入力フォームを表示され、ID・パスワードを盗まれる
  • 意図しないページ遷移
    フィッシングサイトやウイルス配布サイトへ強制的に転送される
  • 個人情報の送信
    閲覧者が気づかないうちに、入力情報が攻撃者のサーバーへ送られる
  • サイトの改ざん表示
    閲覧しているページの内容だけが不正に書き換えられて表示される
  • 利用者への影響
  • ログイン情報やパスワードが漏れる(他サイトで同じパスワードを使っていると連鎖被害の恐れ)。
  • クレジットカード情報を入力するページが偽装されていた場合、不正利用につながる可能性。
  • 正規サイト内で表示されるため、フィッシングだと気づきにくい。

あわせて読みたい

フィッシング被害に遇ったら?フィッシングを防ぐ確実な方法とは

【マルウェア対策】感染の兆候や感染予防まとめ【感染したかも?!】

個人事業主やサイト運営者向けの対処法

レンタルサーバーを利用したり、WordPressを運用している個人事業主やサイト運営者の方が、万が一「掲示板に不審なスクリプトが書き込まれている」「利用者からアカウント被害の報告があった」と気づいた際、すぐに実行できる緊急対応です。

  • 被害の拡大を止める
  • ・不審な投稿を含むページを非公開にする
    コメント欄や掲示板に不正なスクリプトが書き込まれている場合、該当ページやサイト全体を一時的に非公開に。
  • ・不審な投稿・コメントを削除する
    スクリプトタグ(<script>など)を含む書き込みや、意味不明な文字列を含む投稿がないか確認し、見つけ次第削除。
  • ・管理画面のパスワードを変更する
    攻撃者が管理者用Cookieを奪って侵入している可能性があるため、念のためログインパスワードを即座に変更。
  • 証拠保全と原因特定
  • ・アクセスログをダウンロードする
    レンタルサーバーの管理機能から、直近のアクセスログをすべて手元にダウンロードして保存。
  • ・投稿フォームやコメント欄の入力履歴を確認
    いつ、どこから、どんな内容が書き込まれたのかを特定し、被害範囲を把握。
  • 安全な状態への復旧と根本対策
  • ・不審なプラグインやテーマの削除
    脆弱性が指摘されている古いプラグインや、身に覚えのないファイルがサーバー内に設置されていたら削除。
  • ・自動バックアップ機能から復元
    確実に安全だった時点のデータを選んで復元。
  • ・出力処理(エスケープ)の見直し
    投稿内容を画面に表示する箇所で、HTMLエスケープ処理が正しく行われているかを点検。
  • 外部への報告とユーザー対応
  • ・レンタルサーバー会社への連絡
    被害の状況をサポート窓口に報告、どのような対策を取るべきかのアドバイスを仰ぐ。
  • ・サイト利用者へのアナウンス
    ログイン情報の流出や不正な画面表示の可能性がある場合は、サイト上やメールで速やかに公表し注意喚起する。
  • ・公的窓口への相談
    必要に応じて、警察のサイバー犯罪相談窓口や、IPA(情報処理推進機構)へ相談・報告する。

※個人サイトであっても、閲覧者のアカウントを乗っ取る踏み台にされてしまうと、社会的信用を大きく失うリスクがあります。
自力での原因特定やスクリプトの完全駆除が難しい場合は、無理をせずサイトの制作会社やセキュリティの専門家に初期調査を依頼することをおすすめします。

目次へ

利用しているサービスが被害に遭った場合の対処法

あなたが利用しているWEBサイトやアプリがクロスサイトスクリプティング攻撃を受けた場合の対処法

あなたが利用しているWEBサイトやアプリがクロスサイトスクリプティング攻撃を受けた場合、

  • ・登録メールアドレスへの直接通知
  • ・公式サイトのトップページやお知らせ
  • ・アプリ内のポップアップ・通知機能

などに

  • ・何が起きたか
  • ・いつ起きたか
  • ・どのデータがどの位漏れたか
  • ・ユーザーへのお願い

といったアナウンスがあります。

公式発表を見るときは、ユーザーへのお願いを真っ先に確認し、自分が今すぐやるべきことを最優先で実行しましょう。
その後、どのデータが漏れたかをチェックして、クレジットカード情報が含まれていた場合は、すぐに明細を確認するなどの状況に応じた対処につなげるのが一番安全です。

パスワードをすぐに変更
利用していたサービスで情報漏えいの可能性がある場合は、できるだけ早くパスワードを変更しましょう。

もし同じパスワードを他のサービスでも使い回しているなら、併せて変更することが重要です。
攻撃者は漏えいしたID・パスワードを使って、別のサービスへのログインを試みる、パスワードリスト攻撃する場合があります。

二要素認証(2FA)を有効に
対応しているサービスでは、二要素認証(2FA)を有効化してください。
たとえパスワードやログイン用Cookieが第三者に渡ってしまっても、認証アプリやSMSなどによる追加認証があれば、不正ログインを防げる可能性が高まります。

クレジットカードや銀行口座を確認
サービス内でクレジットカードや銀行口座を登録していた場合は、利用明細や取引履歴を確認しましょう。
身に覚えのない決済や送金があれば、すぐにカード会社や金融機関へ連絡し、利用停止や再発行などの手続きをしてください。早期に対応することで被害を最小限に抑えられる場合があります。

あわせて読みたい

過去最高の被害額!クレジットカード不正利用対策、もし不正利用されたら?

運営会社の公式発表を確認
情報漏えいなどの事故が発生した場合、運営会社は公式サイトやメールなどで状況や対応方法を案内することがあります。
SNSのうわさや第三者の情報ではなく、必ず公式発表を確認し、パスワード変更や再ログインなどの案内に従ってください。

便乗した詐欺にも注意
大規模な情報漏えいが報道されると、それに便乗したフィッシングメールやSMS、SNSのDMが送られてくるかもしれません。
「アカウント確認」「セキュリティ更新」などを装って偽サイトへ誘導し、IDやパスワード、認証コードを盗もうとする手口です。

メールやSMS内のリンクからアクセスせず、公式サイトや公式アプリから手続きを行うようにしましょう。

XSSの主な被害者はサイト運営者と閲覧者の両方であり、「不正スクリプトの実行 → ログイン情報の窃取 → なりすまし・金銭被害」という流れを防ぐため、パスワード変更と2FAの有効化を最優先に行うのが有効です。

詐欺の心配一切なし!
信頼のワクワクメールへGO

目次へ

システム開発(設計)側の根本対策

独自にシステムを開発したり、既存システムをカスタマイズしたりする際は、次の5つの防衛線を組み合わせることで、クロスサイトスクリプティングのリスクを大幅に減らせます。

1️⃣出力時にHTMLエスケープ処理を徹底する

XSS対策として最も基本かつ効果的なのが、利用者の入力内容を画面に表示する際、「<」「>」「"」といった特殊文字を、意味を持たない文字列(実体参照)に変換するエスケープ処理です。

例えば、投稿欄に「<script>」という文字列が入力されても、画面表示時に正しくエスケープされていれば、ブラウザはそれを「プログラム」ではなく単なる「文字」として表示するため、スクリプトは実行されません。

入力時ではなく、画面に表示する出力時に必ずエスケープすることが重要なポイントです。

2️⃣Content Security Policy(CSP)を設定する

CSPとは、そのページ内でどこから読み込まれたスクリプトを実行してよいかを、あらかじめブラウザに指示しておく仕組みです。

正しく設定しておけば、万が一悪意のあるスクリプトの書き込みを許してしまっても、許可されていない外部スクリプトの実行をブラウザ側で自動的にブロックできる場合があります。

エスケープ処理の最後の砦として、多層防御の一つに位置づけられる対策です。

さらに厳格に運用したい場合は、許可するスクリプトごとに使い捨ての合言葉(nonce)や、スクリプト内容から算出した指紋のような値(hash)をCSPに指定する方法もあります。
こうしておけば、たとえ外部から不正なスクリプトタグが書き込まれても、正しいnonceやhashを持たないスクリプトは実行されないため、より強固な防御になります。

3️⃣Cookieの属性を安全に設定する

ログイン情報を保持するCookieには、HttpOnly属性Secure属性を設定しておきます。

HttpOnly属性を付けておけば、たとえXSSが成立してしまっても、JavaScript経由でそのCookieを盗み出せなくなるため、セッションハイジャックの被害を防ぐ効果が期待できます。

4️⃣入力値はホワイトリスト方式で検証する

入力値は「許可する文字や形式だけを受け入れる」ホワイトリスト方式で検証します。

例えば、電話番号欄なら数字とハイフンのみを許可するなど、想定外の記号やタグの混入を早い段階で防ぎます。

ただし、入力値の検証だけではXSSを完全には防げません。
あくまで補助的な対策であり、「出力時に必ずエスケープする」といった根本対策と組み合わせることが重要です。

5️⃣信頼できるフレームワークやライブラリを活用する

React、Vue.jsなど、近年主流のフレームワークの多くは、標準の機能を使う限り自動的にHTMLエスケープが行われる設計になっています。

一方で、開発者が自らエスケープを無効化する機能(dangerouslySetInnerHTMLなど)を不用意に使ってしまうと、フレームワークの防御機構が意味をなさなくなる点には注意が必要です。

どうしても独自にHTMLを組み立てる必要がある場合は、信頼性の高いサニタイズ用ライブラリを利用し、エスケープ処理・CSP・Cookie属性の設定など、複数の対策を組み合わせることが重要です。

詐欺の心配一切なし!
信頼のワクワクメールへGO

目次へ

あなたが運営するサイトを守るための基本対策

根本対策がしっかり施された安全なシステムを土台とし、その上で運営者自身もセキュリティ対策を重ねることが大切。

現在は、AIや自動巡回プログラムを使って脆弱性のあるWebサイトを探し出し、無差別に攻撃するケースが珍しくありません。
そのため、「小規模なサイトだから狙われない」という考えは危険です。

あわせて読みたい

AIが発見・武器化したゼロデイ脆弱性攻撃を世界初確認【Googleが未遂段階で阻止】

「プログラムのことはよく分からない」というサイト運営者でも、次の対策ならすぐに始められます。

CMS(WordPressなど)やプラグインを常に最新にする

WordPress本体やコメント欄、お問い合わせフォーム、プロフィール入力機能を提供するプラグインなどに脆弱性が見つかると、それを悪用してXSSの書き込みが行われることがあります。

  • ・更新通知が表示されたら、できるだけ早く適用する
  • ・使用していないプラグインやテーマは削除する
  • ・長期間更新されていないプラグインは、利用を見直す

脆弱性が公開されると、自動化された攻撃が短期間で始まることもあるため、更新の先延ばしは避けましょう。

WAF(Web Application Firewall)を有効にする

WAFは、Webサイトへの通信内容をチェックし、攻撃と判断したアクセスを自動的にブロックする仕組みです。

銀行で例えるなら、建物の入口で不審者を見張る警備員のような存在です。
XSSでよく使われる不審なスクリプトタグを含む書き込みも、投稿として保存される前に遮断できる場合があります。

エックスサーバー、ConoHa WING、ロリポップ!など多くのレンタルサーバーでは、管理画面からWAFを有効にできます。
ただし、WAFだけで全ての攻撃を防げるわけではありません。
出力時のエスケープ処理や安全な設計と組み合わせることが重要です。

自作システムはセキュリティを専門家に確認してもらう

独自開発したシステムや大きくカスタマイズしたWebサイトを運用している場合は、開発会社やエンジニアにセキュリティ対策を確認してもらいましょう。

特に、コメント欄やプロフィール欄など、利用者が自由に文字列を入力できる箇所で、出力時のエスケープ処理が漏れなく行われているかを点検してもらうことが重要です。

クロスサイトスクリプティングは、システムの設計や実装が原因で発生する脆弱性です。
専門家による定期的な診断やコードレビューを受けることで、攻撃のリスクを大幅に減らせます。

基本を守れば防げる

システム開発の専門的な話を聞くと、「なんだか難しそうで、やっぱり自分には手に負えないかも……」と不安になってしまう方もいるかもしれません。
管理画面を開くたびに「更新してください」と通知が来るのも、毎日の運営の中では少し面倒に感じてしまうかもしれません。

しかし、XSSは利用者のアカウントまで危険にさらしてしまう恐ろしい攻撃である反面、「どうすれば防げるか」という答えが完全に確立されている古い手口でもあります。

この運用の基本さえしっかり守っていれば、インターネット上を徘徊している自動ボットの無差別な攻撃から、あなたのサイトを十分に守れますよ。

せっかく育ててきた大切なサイトやブログが、ある日突然利用者を騙す「加害基地」にされてしまわないよう、ぜひ今日のうちにご自身のサイトの設定を一度チェックしてみてくださいね。

詐欺の心配一切なし!
信頼のワクワクメールへGO

目次へ

クロスサイトスクリプティングのよくある質問

クロスサイトスクリプティングについて、特に多い疑問をQ&A形式でまとめました。記事の内容とあわせて確認してみてください。

Q. WordPressはXSSの対象になりますか?

A.はい、なります。WordPress本体が原因というよりも、脆弱性のあるプラグインやテーマが悪用されるケースが多く見られます。

特に、コメント欄、お問い合わせフォーム、プロフィール入力欄、レビュー機能などを提供するプラグインは、過去にも脆弱性が発見された事例があります。
そのため、WordPressを安全に運用するには、次の基本対策が重要です。

  • ・WordPress本体を最新に保つ
  • ・プラグインやテーマを定期的に更新する
  • ・使用していないプラグインは削除する

Q. WAFだけでXSSは防げますか?

A.いいえ。WAFだけで完全に防ぐことはできません。
WAFは、不審なアクセスや攻撃パターンを検知してブロックする強力な仕組みですが、新しい攻撃手法やアプリケーション固有の脆弱性までは、完全に防げない場合があります。

そのため、

  • ・出力時のエスケープ処理を徹底する
  • ・CSPを設定する
  • ・Cookieの属性を安全にする
  • ・WAFを有効にする

といった複数の対策を組み合わせることが大切。

Q. 個人ブログでも狙われますか?

A.狙われます。現在のサイバー攻撃の多くは、人が一つひとつのサイトを選んで攻撃しているわけではありません。
攻撃者はAIや自動巡回プログラム(ボット)を使い、インターネット上のコメント欄や掲示板などに自動でスクリプトを書き込もうと試みています。

そのため、「アクセス数が少ない」「趣味のブログだから大丈夫」という保証はありません。
むしろ、更新されていないWordPressや古いプラグインを使っている小規模サイトは、自動攻撃の対象になりやすい傾向があるのです。

Q. XSSは今でも多い攻撃ですか?

A.はい。クロスサイトスクリプティングは古くから知られている攻撃ですが、現在でも脆弱性が見つかったWebアプリケーションやプラグインを狙った攻撃が継続的に確認されています。

近年は、攻撃者がAIや自動化ツールを活用して脆弱なサイトを効率よく探し出せるようになったため、攻撃のスピードは以前よりも速くなっています。

しかし、XSSは防ぎ方が確立されている攻撃でもあります。

開発者は出力時のエスケープ処理を徹底し、サイト運営者はWordPressやプラグインを最新の状態に保ち、WAFを有効にするといった、基本的な対策の継続で攻撃リスクを減らせます。

Q. 「アカウント復旧のためこのコードを貼り付けて」と言われたのですが?

A.絶対に貼り付けないでください。それは「セルフXSS」と呼ばれる詐欺の手口の可能性が高いです。

これまで解説してきたXSSは、サイト側の脆弱性を攻撃者が悪用する手口でしたが、セルフXSSは技術的な脆弱性を一切使わず、利用者自身に悪意のあるコードを実行させる、いわば心理的な誘導だけで成立する手口。

SNSのDMやコメント欄で「フォロワーを増やせます」「アカウントが凍結されそうなので復旧コードを貼ってください」などと持ちかけ、ブラウザの開発者ツール(コンソール)に不審な文字列を貼り付けてEnterキーを押すよう誘導してきます。
言われるがままに貼り付けて実行してしまうと、自分のログイン情報やCookieを自分自身の手で攻撃者に渡してしまうことになります。

  • ・「コンソールに貼り付けて」「このコードを実行して」と言われても絶対に従わない
  • ・意味の分からないコードを、何のためかも分からず操作しない
  • ・「特別な機能が使える」「アカウントが助かる」といった甘い言葉には特に警戒する

サイトの脆弱性を突く通常のXSSと違い、こちらは利用者本人の操作がなければ成立しません。
「知らない人から差し出されたものを、意味も分からず口に入れない」のと同じように、正体不明のコードは絶対にブラウザへ貼り付けない、これだけを徹底すれば防げる詐欺です。

目次へ