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操作などが、本人も気づかないまま含まれていることがあります。
「とりあえず動くか見せたい」という確認段階では中身の精査が後回しになりがちです。そのまま不特定多数に見せると、リスクがそのまま伝播します。共有はあくまで確認のためでも、配るのは実際に動くコードだという意識が大切です。
公開前のチェック手順
完璧な検査は難しくても、最低限の目視と確認で多くの危険は減らせます。以下の順番でざっとチェックしてから共有しましょう。
- HTML内のscriptタグと、読み込んでいる外部URLを一通り確認する
- 心当たりのないドメインからの読み込みがないか確かめる
- onclickなどのinlineイベントや、innerHTMLへ外部値を入れる箇所を点検する
- 怪しい記述があれば削除・修正し、不要な外部依存は外す
- 信頼できる相手にだけ届くよう、共有時の閲覧範囲を絞る
共有相手を限定してリスクを抑える
XSSの一次的な対策はコード側ですが、運用面では「誰に見せるか」を絞ることも有効です。万一問題のあるコードを公開しても、閲覧者が関係者だけなら影響範囲を抑えやすくなります。
ギガサイト便ではHTMLをドロップするとすぐ共有URLが発行でき、URLのみ・パスワード・メール認証・会社ドメイン認証から閲覧方法を選べます。確認段階のHTMLを社外へ広く晒さず、関係者だけに見せたいときは認証を併用するとよいでしょう。期限を設定すれば、古い確認用URLが残り続けることも防げます。
よくある質問
XSSとSQLインジェクションは何が違いますか?
XSSは閲覧者のブラウザ上で攻撃者のスクリプトが実行される問題で、被害は主に利用者側に及びます。SQLインジェクションはサーバのデータベースを不正に操作する問題で、被害の中心はサーバ側です。発生する場所と狙いが異なります。
AIが生成したHTMLはそのまま共有して大丈夫ですか?
そのままの公開はおすすめしません。生成物には意図しない外部スクリプトや危険な記述が含まれる場合があります。scriptタグや外部読み込み先を確認し、不要な依存を外してから共有するのが安全です。
noindexを付ければXSSは防げますか?
防げません。noindexは検索結果に出さないための指定で、ページ内のスクリプト実行を止める仕組みではありません。XSS対策はコードの見直しが基本で、加えて閲覧範囲の限定を組み合わせます。
確認用に公開したページのリスクを最小化するには?
コードを点検して不審な記述を取り除いたうえで、閲覧できる相手を絞り、必要な期間だけ公開するのが基本です。ギガサイト便なら認証方式の選択と公開期限の設定で、見せる範囲と期間をコントロールできます。
noindexを設定すれば認証は不要ですか?
不要ではありません。noindexは検索結果への表示を抑えるための指定で、URLを知っている人の閲覧を止める仕組みではありません。閲覧者を制限したい場合は認証が必要です。