クロスサイトスクリプティングの対策は、脆弱性そのものを排除する根本的な対策と、対策漏れによるリスクを軽減する保険的な対策の両方を実施する必要があります。
【根本的な対策】
- 特別な記号にエスケープ処理を施す
HTML上で特別な意味を持つ記号(< > & ” 等)を無害な文字列に変換し、スクリプトの実行を防ぎます。 - 属性値をダブルクォーテーションで囲む
HTMLタグの属性値を ” で囲み、属性の追加によるJavaScript実行を防止します。 - 「http」「https」スキームだけを許可する
URL属性値に「javascript:」スキームが使用されることを防ぎ、URLからの不正なスクリプト実行を遮断します。 - 適切なDOM操作を実装する
「innerHTML」や「document.write() 」の使用を避け、「textContent」を利用することで、DOMベースのXSS攻撃を防ぎます。
【保険的な対策】
Content-Security-Policyヘッダーの指定、CookieへのHttpOnly属性の付与、入力値の検証の3つがあります。いずれも根本的な対策の補完として、攻撃が試みられた際の被害範囲を限定する役割を果たします。
XSSは対策箇所の多さから漏れが発生しやすいため、根本的な対策と保険的な対策を実施したうえで、定期的な脆弱性診断で対策漏れを検出することが不可欠です。
根本的な対策と保険的な対策について、詳しくは「クロスサイトスクリプティングの対策」をご覧ください。
