説明
リクエストパラメーターをそのまま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要素のテキストとして埋め込みます。