Column

技術コラム

2024年04月18日

XSS入門:初心者でもわかる攻撃と防御のしくみ

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

クロスサイトスクリプティング(XSS)は、悪意のあるスクリプトがWebサイトに埋め込まれ、ユーザーのブラウザ上で実行されてしまう脆弱性です。主な原因はユーザーの入力値を適切にエスケープせず、HTMLに出力してしまうことにあります。

スクリプトとは、ブラウザ上で動作する簡易的なプログラムのことです。JavaScriptなどが該当し、フォームの自動補完やボタン操作など、Webページに動きを与えるために使われます。

XSSによって起こる脅威

XSSによって引き起こされる主な脅威や被害の具体例をまとめました。
Cookieが盗難されると、不正ログインが可能になるので特に気を付けたい脅威です。

分類 内容 具体例
なりすまし セッションハイジャック、ユーザーなりすまし Cookieの盗難・セッショントークンの不正使用
情報漏洩 ユーザーの個人情報・内部情報の窃取 フォーム内の入力値、アカウント情報などの抜き取り
フィッシング誘導 偽フォーム・偽ページへの誘導 ログインフォームを偽装しID/PWを盗む
ページ改ざん 表示内容の書き換え 管理画面や掲示板を偽の内容にすり替え
マルウェア感染 外部スクリプト経由での攻撃コード配布 Drive-by download や Cryptojacking など
不正リクエスト送信 利用者の権限でAPIや管理操作を実行 勝手にメッセージ投稿、購入処理、設定変更など
信用・ブランド失墜 ユーザーへの悪影響 → サービス離れ ユーザーからの信頼喪失、SNS炎上など

XSSの種類

1. 反射型XSS(Reflected XSS)

ユーザーがアクセスしたURLに含まれる悪意のあるスクリプトが、即座にレスポンスとして返されて実行されるタイプです。

特徴
発生しやすい例

2. 格納型XSS(Stored XSS)

悪意のあるスクリプトがサーバーに保存され、後から他のユーザーに表示されるタイプです。被害が広範囲に及ぶ可能性があります。

特徴
発生しやすい例

3. DOM型XSS(DOM-based XSS)

サーバー側ではなく、ブラウザ上のJavaScriptがDOMを介して直接スクリプトを実行してしまうタイプです。
DOM(Document Object Model)とは、HTMLやXMLを構成する要素をプログラム上で参照・操作するための仕組みです。

特徴
発生しやすい例

XSSの対策

XSSの主な対策をまとめました。
特に出力時の「エスケープ処理」は最も重要で有効な対策です。

1. 出力時のエスケープ処理

すべてのユーザー入力をHTML出力する前に、適切なエスケープを施すことで悪意のあるスクリプトの実行を防ぐことができます。

文字 エスケープ後
& &
< &lt;
> &gt;
" &quot;
' &#039;

2. XSS対策に有効なセキュリティHTTPレスポンスヘッダを使用する

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';
X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff

3. CookieにHttpOnly属性を付与する

CookieをJavaScriptからアクセスできないように制限することができます。これにより、Cookieの盗難を防止できます。

4. Content-Typeと文字コードの明示

HTTPレスポンスヘッダのContent-Typeに文字コード(例:charset=UTF-8)を明記します。指定がない場合、ブラウザが誤った文字コード(例:UTF-7)で解釈し、意図しないスクリプト実行が発生する可能性があります。

まとめ

XSSは、ユーザーとWebアプリケーションの信頼関係を悪用する非常に危険な攻撃です。特に、入力値を画面に出力する処理がある場合は状況に応じて適切にエスケープ処理を行うことが重要です。フロントエンド・バックエンドの両面からしっかりと対策を行い、安全なWebアプリケーションを構築していきましょう。

Get in Touch

お問い合わせ

サイバー攻撃対策・脆弱性診断・インシデント対応など、
お客様のニーズに合わせた最適な
ソリューションをご提案します。
まずはお気軽にご相談ください!

Pagetop