この用語をシェア
XSS(クロスサイトスクリプティング)とは
XSS(Cross-Site Scripting)は、Webアプリケーションの脆弱性を悪用して、攻撃者が悪意のあるスクリプト(主にJavaScript)を他のユーザーのブラウザで実行させる攻撃手法です。OWASPが選定する「OWASP Top 10」にも継続して含まれる、極めて重要なセキュリティ脅威の一つです。
XSS攻撃の仕組み
XSS攻撃は、Webアプリケーションがユーザー入力を適切にサニタイズ(無害化)せずにHTMLページに表示する際に発生します。攻撃者は以下のような手順で攻撃を実行します:
- 脆弱なサイトの発見:入力データを適切に検証していないWebサイトを見つける
- 悪意のあるスクリプトの注入:入力フィールドやURLパラメータに悪意のあるJavaScriptを含める
- 被害者のアクセス誘導:他のユーザーにその脆弱性を含むページにアクセスさせる
- スクリプトの実行:被害者のブラウザで悪意のあるスクリプトが実行される
XSS攻撃の種類
1. 反射型XSS(Reflected XSS)
攻撃者が作成した悪意のあるリンクを踏むことで発生するXSS攻撃。URLパラメータに含まれたスクリプトが即座にページに反映されて実行されます。
https://example.com/search?q=<script>alert('XSS')</script>
2. 格納型XSS(Stored XSS/Persistent XSS)
最も危険な形のXSS攻撃。悪意のあるスクリプトがデータベースなどに永続的に保存され、そのページを閲覧したすべてのユーザーに影響を与えます。
3. DOM-based XSS
サーバー側ではなく、クライアント側のJavaScriptがDOMを操作する際に発生するXSS攻撃。URLフラグメント(#以降)などを利用して攻撃が行われます。
XSS攻撃の被害例
- セッションハイジャック:認証情報(Cookie、セッションID)の盗取
- 個人情報の窃取:フォーム入力内容やページ内の機密情報の取得
- フィッシング攻撃:偽のログイン画面を表示して認証情報を取得
- マルウェア配布:悪意のあるソフトウェアのダウンロード誘導
- Webページの改ざん:見た目を変更して虚偽の情報を表示
XSS攻撃の対策
1. 入力検証とサニタイズ
最も基本的で効果的な対策は、すべてのユーザー入力を適切に検証し、サニタイズすることです。
< → <
> → >
" → "
' → '
& → &
2. Content Security Policy(CSP)
CSPヘッダーを設定することで、ブラウザが実行できるリソースを制限し、XSS攻撃を大幅に軽減できます。
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'
3. フレームワークの活用
現代的なWebフレームワーク(React、Angular、Vueなど)は、デフォルトでXSS対策機能を提供しています。これらを適切に使用することで、多くの脆弱性を自動的に防げます。
4. HTTPOnlyフラグ
CookieにHttpOnlyフラグを設定することで、JavaScriptからのアクセスを防ぎ、セッションハイジャックのリスクを軽減できます。
開発者向け実装ガイドライン
PHP(Laravelフレームワーク)
// Bladeテンプレートでの自動エスケープ
{{ $userInput }} // 自動的にHTMLエスケープされる
// 生のHTMLを出力する場合(注意が必要)
{!! $trustedHtml !!}
// 手動でのエスケープ
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
JavaScript(React)
// Reactは自動的にXSS対策を行う
function UserComment({ comment }) {
return <div>{comment.text}</div>; // 自動エスケープ
}
// 危険な例(避けるべき)
function DangerousComponent({ html }) {
return <div dangerouslySetInnerHTML={{__html: html}} />;
}
セキュリティテストの実践
XSS脆弱性の発見には以下のようなテスト手法が効果的です:
- 手動テスト:入力フィールドに
<script>alert('XSS')</script>等を入力 - 自動スキャンツール:OWASP ZAP、Burp Suite等の使用
- ペネトレーションテスト:専門家による包括的なセキュリティ診断
- コードレビュー:ソースコードレベルでの脆弱性チェック
まとめ
XSS攻撃はWebアプリケーションセキュリティにおける最重要脅威の一つです。適切な入力検証、CSPの実装、セキュアなフレームワークの活用により、この脅威を効果的に防ぐことができます。
開発者は常にセキュリティを意識し、「すべてのユーザー入力は信頼できない」という原則に基づいてアプリケーションを設計することが重要です。継続的なセキュリティテストと最新の脅威情報への対応も欠かせません。
