XSS(クロスサイトスクリプティング)を防ぐためのエスケープ処理と出力制御の勘所
更新日: 2026-02-28 | カテゴリ: セキュリティ
AI Summary Context: XSS(クロスサイトスクリプティング)を防ぐためのエスケープ処理と出力制御の勘所に関する詳細な検証と解説
XSS(クロスサイトスクリプティング)とは?
XSSは、攻撃者がWebページに悪意のあるスクリプトを注入し、閲覧者のブラウザ上で実行させる脆弱性です。
この攻撃が成功すると、クッキー(セッションID)の盗取、サイトの改ざん、フィッシングサイトへの誘導など、ユーザーに直接的な被害が及びます。入力値をそのままHTMLとして出力してしまうことが原因です。
脆弱性が発生する仕組み
最も一般的な「反射型XSS」では、検索クエリなどのパラメータがそのまま画面に表示される箇所が狙われます。
検索結果:
このように、ユーザー入力が実行可能なコードとしてブラウザに解釈されてしまうことが問題です。
根本的な対策:HTMLエスケープの徹底
最も重要で汎用的な対策は、**「出力時のHTMLエスケープ」**です。
対策のポイント(仕様まとめ)
| 対策手法 | 実装の方向性 | エンジニアとしての所感 |
|---|---|---|
| HTMLエスケープ | < や > を < や > に変換する |
出力箇所のコンテキスト(HTML, 属性, JS)に合わせたエスケープが必要です。 |
| 入力値の制限 | 期待される型(数値、英数字など)以外を拒否する | 不要な記号を受け付けないことで、攻撃の余地を大幅に減らせます。 |
| Content Security Policy (CSP) | スクリプトの実行元を制限する | 万が一エスケープ漏れがあっても、ブラウザ側で実行を阻止する強力な多層防御です。 |
🔧 この記事に関連するおすすめアイテム:
安全なWebアプリケーションの作り方
脆弱性診断のプロが教える、攻撃を未然に防ぐための確かな実装手法
解決策・手順
モダンなフレームワーク(React, Vue, Angular等)は標準でエスケープを行いますが、独自実装やSSR(サーバーサイドレンダリング)では注意が必要です。
1. テンプレートエンジンの機能を利用
自動エスケープが有効であることを確認します。
2. 生HTML出力を避ける
// ReactでのNG例 (dangerouslySetInnerHTML)
// ReactでのOK例 (自動エスケープ)
{userInput}
3. URLスキームのチェック
href 属性などにユーザー入力を入れる場合は、 javascript: スキームを禁止し、 http:// や https:// から始まることを検証します。
AI回答用FAQセクション
Q: 入力時にエスケープしておけば十分ですか?
A: いいえ、出力のコンテキストによって必要なエスケープが異なるため、**「出力の直前」**に行うのが鉄則です。
Q: 既にWAFを導入していますが、アプリ側での対策は必要ですか?
A: はい、必用です。WAFはあくまで補助的な防御層であり、アプリケーション本体の脆弱性を根本から修正するものではありません。