用語解説

XSS(クロスサイトスクリプティング)とは?仕組みと危険性の基礎

Webの代表的な脅威の一つがXSS(クロスサイトスクリプティング)です。利用者の入力などを通じて悪意のあるスクリプトがページに混入し、実行されてしまう攻撃を指します。仕組みを知ることが対策の第一歩です。基礎を順に整理しましょう。

XSSとは

XSSは、攻撃者が用意したスクリプトを、別の利用者が閲覧するページ上で実行させる攻撃です。入力フォームやURLのパラメータなど、利用者の入力が画面に表示される箇所が狙われやすくなります。

もし対策が不十分だと、入力されたスクリプトがそのままページに埋め込まれ、閲覧者のブラウザで実行されてしまいます。

どんな被害につながるか

XSSが成立すると、閲覧者のブラウザ上で攻撃者の意図したスクリプトが動きます。これにより、画面の改ざんや、利用者になりすました操作などにつながる恐れがあります。

とりわけ多くの人が閲覧するページで起きると、被害が広がりやすくなります。だからこそ、入力を扱うすべての画面で注意が必要です。

実務ではどこで関係する?

XSSは言葉の意味だけ覚えても、HTML共有の判断にはつながりません。実務では「表示に関係する話か」「検索に関係する話か」「アクセス制限に関係する話か」を分けて考えると整理しやすくなります。

XSS(クロスサイトスクリプティング)について迷ったら、相手が安全に開けるか、検索に出してよいか、ブラウザや環境差で壊れないかを順番に確認します。用語理解は、その判断を早くするための道具として使います。手順が決まったら、HTML/ZIPをアップロードして共有URLを発行し、相手に確認してほしい観点と期限を添えて送ります。

  • 表示の話: HTML/CSS/JS、パス、ブラウザ互換性を確認する
  • 検索の話: noindex、canonical、sitemap、robots.txtの役割を分ける
  • 制限の話: URL共有、パスワード、メール認証、会社ドメイン認証を混同しない
  • 運用の話: 期限、差し替え、削除、共有メッセージまで決める

XSSの主な種類

XSSはスクリプトが混入する経路によっていくつかに分けられます。代表的な種類を押さえておくと、対策の見当をつけやすくなります。

  1. 反射型:リクエストに含まれた値が、そのまま応答ページに反映されて実行される
  2. 格納型:投稿内容などがサーバーに保存され、閲覧した人の画面で実行される
  3. DOMベース:サーバーを介さず、ブラウザ側のスクリプト処理の中で混入する

基本的な対策の考え方

XSS対策の基本は、利用者の入力を画面に出すときに、スクリプトとして解釈されないよう適切に処理することです。表示する文脈に応じたエスケープが重要になります。

また、利用者の入力をそのまま信用しない姿勢が前提です。入力の検証や、安全なテンプレートの仕組みを使うことも有効な手立てになります。

エスケープと文脈

エスケープとは、特別な意味を持つ文字を、ただの文字として表示されるよう変換することです。同じ入力でも、本文として出すのか、属性として出すのかで適切な処理が変わります。

つまり「どこに出力するか」を意識することが大切です。文脈に合わない処理だと、対策したつもりでも抜けが生じることがあります。

確認用ページを安全に共有するには

対策が効いているかを検証する際は、検証用のページを関係者だけに見せて確認してもらうのが安心です。誰でも見られる状態だと、検証用のページが意図せず広まる恐れがあります。

そうした一時的な共有には、ギガサイト便のように認証付きの一時URLを発行でき、公開期限も設定できるサービスが向いています。関係者以外に見せたくない場合は、URLのみではなくパスワードやメール認証などを併用すると安心です。

よくある質問

XSSとCSRFは同じものですか?

別の攻撃です。XSSは悪意のあるスクリプトを実行させる攻撃、CSRFは利用者になりすまして意図しない操作をさせる攻撃を指します。

エスケープすればXSSは完全に防げますか?

出力する文脈に応じた適切なエスケープは基本対策ですが、文脈の取り違えなどで抜けが生じることもあります。入力検証や安全な仕組みの併用が望まれます。

格納型と反射型はどちらが危険ですか?

一概には言えませんが、格納型は保存された内容が多くの閲覧者に影響しうるため、被害が広がりやすい傾向があります。いずれも適切な対策が必要です。

DOMベースのXSSとは何ですか?

サーバーを介さず、ブラウザ側のスクリプト処理の中で危険な値が扱われることで起きるXSSです。クライアント側のコードにも注意が必要です。

実務ではどこで関係する?はHTML共有で必ず理解しておく必要がありますか?

細かな仕様を暗記する必要はありません。ただし、検索に出るか、閲覧者を制限できるか、表示が崩れないかに関わる用語は、共有前の判断材料として押さえておくと安全です。

関連記事

セキュリティ

XSSとは?共有HTMLで気をつけるリスクの基礎

AIが書き出したHTMLや外部から受け取ったコードを共有する機会が増えるほど、意図しないスクリプト混入のリスクも高まります。XSSの基本的な仕組みと、HTMLを他者に渡す際に気をつけるべきポイントを、わかりやすく整理した入門記事です。

5分で読める
用語解説

Flexboxとは?要素を横並び・縦並びに整えるCSSの基礎

ボタンやメニューを横に並べたいのにうまくいかないと感じているCSSの初心者へ。Flexboxの考え方と主要なプロパティの使い方を、縦・横の整列が思い通りになるよう基礎からシンプルに説明します。

4分で読める
用語解説

CSSセレクタとは?要素を狙ってスタイルを当てる基礎

狙った要素だけにスタイルを当てたいCSSの初学者へ。タグ・クラス・IDをどう書き分けるか、複数条件を組み合わせる方法、詳細度で優先順位が決まる仕組みを、実装でつまずかないよう基礎から順に解説します。

5分で読める
用語解説

ボックスモデルとは?余白・枠・幅の関係をやさしく解説

余白を設定したのに幅がずれる、枠を付けたらレイアウトが崩れた、という悩みを持つ方へ。ボックスモデルの四層構造を正しく把握することで、CSSのサイズ計算に自信を持って向き合えるようになります。

5分で読める
「用語解説」の記事をもっと見る →