反射型XSS

反射型XSS

説明

リクエストパラメーターをそのままHTMLレスポンスに出力すると、攻撃者のスクリプトがブラウザーで実行されるおそれがあります。

想定される影響

セッションの乗っ取り、フィッシング、ユーザー権限でのリクエスト送信、ユーザーデータの漏えいにつながる可能性があります。

対処方法

HTMLテキストと引用符で囲んだ通常の属性値には htmlspecialchars または htmlentities を使います。JavaScript、CSS、URLの値には、それぞれの出力先に適した対策が必要です。

例

変更前

php
<?php
$html .= '<pre>Hello ' . $_GET['name'] . '</pre>';

変更後

php
<?php
$name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
$html .= '<pre>Hello ' . $name . '</pre>';

解説:

  • 変更前: リクエストの入力値を出力エンコーディングせずにHTMLレスポンスへ書き込んでいます。
  • 変更後: 値をHTMLエンコードしてから、pre 要素のテキストとして埋め込みます。

参考資料