セキュリティ

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

AIが書き出したHTMLや、外部から受け取ったコードをそのまま共有する場面が増えました。便利な反面、意図しないスクリプトが紛れ込むとXSSの温床になります。この記事ではXSSの基礎と、確認用にHTMLを共有するときの注意点を整理します。

XSS(クロスサイトスクリプティング)とは

XSSは、Webページに攻撃者の用意したスクリプトが紛れ込み、そのページを開いた閲覧者のブラウザ上で実行されてしまう脆弱性です。クロスサイトスクリプティングの頭文字をとってXSSと呼ばれます。

実行されるスクリプトは閲覧者の権限で動くため、入力内容の盗み見、Cookieの送信、画面の書き換え、別サイトへの誘導などにつながる可能性があります。表示は普通のページに見えても、裏で不正な処理が走っている、という点が厄介です。

主な種類:反射型・格納型・DOMベース

XSSはおおまかに三つのパターンに分けられます。それぞれ、スクリプトがどこから入り込み、いつ実行されるかが違います。

確認用のHTMLを共有する文脈では、特にHTML自体にすでにスクリプトが含まれているケース(格納型に近い形)に注意が必要です。受け取ったコードの中身を理解しないまま公開すると、知らないうちに不正なコードを配ってしまう恐れがあります。

  • 反射型:URLパラメータなどに含めた値がそのまま画面に出力され、その場で実行される
  • 格納型:投稿内容やファイルに保存されたスクリプトが、表示のたびに実行される
  • DOMベース:サーバではなくブラウザ側のJavaScript処理の過程で実行される

よくあるNG例と安全な直し方

XSSでは、「検索に出さない」と「見られないようにする」を混同しないことが重要です。noindexやrobots.txtは検索エンジンへの指示であり、アクセス制限そのものではありません。

安全に共有するには、誰に見られると困るかを先に決め、URL共有だけで足りるのか、認証や期限が必要なのかを選びます。共有相手と機密度が決まったら、URLのみ・パスワード・メール認証・会社ドメイン認証のどれで渡すかを選びます。

  • NG: 機密情報入りHTMLを認証なしURLで共有し、noindexだけで安心する
  • OK: パスワード・メール認証・会社ドメイン認証で閲覧者を絞る
  • NG: テスト用APIキーや社内URLをHTML内に残したまま渡す
  • OK: 公開前に外部送信先、秘密情報、フォーム送信先を確認する

なぜ共有HTMLで起きやすいのか

AI生成のHTMLや、デザイナー・外注先から受け取ったコードは、自分が一行ずつ書いたものではありません。外部スクリプトの読み込みや、inlineのonclick、危険なinnerHTML操作などが、本人も気づかないまま含まれていることがあります。

「とりあえず動くか見せたい」という確認段階では中身の精査が後回しになりがちです。そのまま不特定多数に見せると、リスクがそのまま伝播します。共有はあくまで確認のためでも、配るのは実際に動くコードだという意識が大切です。

公開前のチェック手順

完璧な検査は難しくても、最低限の目視と確認で多くの危険は減らせます。以下の順番でざっとチェックしてから共有しましょう。

  1. HTML内のscriptタグと、読み込んでいる外部URLを一通り確認する
  2. 心当たりのないドメインからの読み込みがないか確かめる
  3. onclickなどのinlineイベントや、innerHTMLへ外部値を入れる箇所を点検する
  4. 怪しい記述があれば削除・修正し、不要な外部依存は外す
  5. 信頼できる相手にだけ届くよう、共有時の閲覧範囲を絞る

共有相手を限定してリスクを抑える

XSSの一次的な対策はコード側ですが、運用面では「誰に見せるか」を絞ることも有効です。万一問題のあるコードを公開しても、閲覧者が関係者だけなら影響範囲を抑えやすくなります。

ギガサイト便ではHTMLをドロップするとすぐ共有URLが発行でき、URLのみ・パスワード・メール認証・会社ドメイン認証から閲覧方法を選べます。確認段階のHTMLを社外へ広く晒さず、関係者だけに見せたいときは認証を併用するとよいでしょう。期限を設定すれば、古い確認用URLが残り続けることも防げます。

よくある質問

XSSとSQLインジェクションは何が違いますか?

XSSは閲覧者のブラウザ上で攻撃者のスクリプトが実行される問題で、被害は主に利用者側に及びます。SQLインジェクションはサーバのデータベースを不正に操作する問題で、被害の中心はサーバ側です。発生する場所と狙いが異なります。

AIが生成したHTMLはそのまま共有して大丈夫ですか?

そのままの公開はおすすめしません。生成物には意図しない外部スクリプトや危険な記述が含まれる場合があります。scriptタグや外部読み込み先を確認し、不要な依存を外してから共有するのが安全です。

noindexを付ければXSSは防げますか?

防げません。noindexは検索結果に出さないための指定で、ページ内のスクリプト実行を止める仕組みではありません。XSS対策はコードの見直しが基本で、加えて閲覧範囲の限定を組み合わせます。

確認用に公開したページのリスクを最小化するには?

コードを点検して不審な記述を取り除いたうえで、閲覧できる相手を絞り、必要な期間だけ公開するのが基本です。ギガサイト便なら認証方式の選択と公開期限の設定で、見せる範囲と期間をコントロールできます。

noindexを設定すれば認証は不要ですか?

不要ではありません。noindexは検索結果への表示を抑えるための指定で、URLを知っている人の閲覧を止める仕組みではありません。閲覧者を制限したい場合は認証が必要です。

関連記事

セキュリティ

共有HTMLのフォーム送信先・データの扱いを確認する

共有するHTMLにフォームが含まれているとき、その入力がどこへ送られるか把握していますか。テンプレート流用やAI生成では送信先が意図しない場所のままのことがあります。共有前にフォームの送信先とデータの扱いを確認する方法を解説します。

5分で読める
セキュリティ

共有HTMLに載せる情報を最小化する考え方

確認用HTMLに本番の顧客データや内部情報をそのまま貼っていませんか。共有する情報が多いほど漏えい時のダメージは大きくなります。必要なものだけを残す「データ最小化」の考え方で、共有HTMLから何を削り何を残すかを解説します。

4分で読める
セキュリティ

XSSを含むHTMLを共有するときのリスクと対策

XSSが含まれる可能性のあるHTMLを共有するリスクを把握し、適切な対策を講じたい担当者向け。被害シナリオ、コードレベルの修正方法、CSPによる軽減策、再発防止の仕組みづくりを段階的に解説します。

5分で読める
セキュリティ

クリックジャッキングとは?iframe悪用への注意

透明なiframeを重ねるだけで成立するクリックジャッキングは、利用者が気づきにくい攻撃手法です。仕組みを知っておきたいWeb制作者やHTMLを共有する機会のある方に向けて、リスクと共有時の注意点をわかりやすく説明します。

5分で読める
「セキュリティ」の記事をもっと見る →