Content Security Policy (CSP) Report-Only Header Found
概要
- 脆弱性の名前: Content Security Policy (CSP) Report-Only Header Found (CSPレポートオンリーヘッダー検出)
- 問題の要点:
Content-Security-Policy-Report-Only
ヘッダーのみが設定されており、実際のポリシーが適用されていないため、XSS攻撃などのリスクを軽減できない状態。 - よくある発生シーン: CSPの導入初期段階やテスト環境で、ポリシーの効果を検証するために使用されることが多い。本番環境への移行時に、ヘッダーが
Report-Only
のままになっている場合に発生しやすい。クラウド環境では、設定ファイルが複数存在し、本番環境用の設定が誤ってReport-Only
になっていることがあります。
背景
CSP (Content Security Policy) は、Webページが読み込むことができるリソースの出所を制限することで、XSS攻撃などのリスクを軽減するセキュリティ機能です。CSPは、HTTPレスポンスヘッダーで設定します。
Content-Security-Policy
ヘッダーは、ポリシーを強制的に適用し、違反があった場合にブラウザにリソースの読み込みをブロックさせます。一方、Content-Security-Policy-Report-Only
ヘッダーは、ポリシーを適用せずに、違反があった場合にレポートを送信するだけです。
Report-Only
ヘッダーは、CSPの導入初期段階で、ポリシーがWebサイトに与える影響を評価するために使用されます。しかし、本番環境で Report-Only
ヘッダーのみが設定されている場合、ポリシーは適用されず、セキュリティ上のリスクが残ります。
セキュリティ上のリスク
- XSS攻撃の防御が不完全
- 不正なリソース読み込みの許可
- インラインスクリプトの実行
- データ漏洩の可能性
- クリックジャッキング攻撃の可能性
対処方法の具体例
Apache2での対処
# .htaccess
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"
Nginxでの対処
# nginx.conf
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; frame-ancestors 'none';" always;
WordPressでの対処
// functions.php
add_action('send_headers', function() {
header("Content-Security-Policy: " .
"default-src 'self' *.wordpress.com; " .
"script-src 'self' 'unsafe-inline' *.wp.com; " .
"style-src 'self' 'unsafe-inline' *.wp.com; " .
"img-src 'self' data: *.wp.com; " .
"frame-ancestors 'none';"
);
});
PHPでの対処
// 完全なCSPヘッダーの設定
header("Content-Security-Policy: ".
"default-src 'self'; " .
"script-src 'self' 'nonce-" . base64_encode(random_bytes(16)) . "'; " .
"style-src 'self'; " .
"img-src 'self' data:; " .
"frame-ancestors 'none'; " .
"form-action 'self';"
);
// 違反レポートの処理
function handleCSPReport() {
$report = file_get_contents('php://input');
$json = json_decode($report, true);
error_log('CSP Violation: ' . json_encode($json['csp-report']));
}
検出方法
OWASP ZAP での出力例
- Alert 名: Content Security Policy (CSP) Report-Only Header Found
- リスク: Information
- URL:
Content-Security-Policy-Report-Only
ヘッダーが設定されているURL - パラメータ: なし
- 詳細:
Content-Security-Policy-Report-Only
ヘッダーのみが設定されており、Content-Security-Policy
ヘッダーが設定されていないという情報
手動再現例
- Webブラウザの開発者ツールを開き、Networkタブを選択します。
- Webサイトにアクセスし、HTTPレスポンスヘッダーに
Content-Security-Policy
ヘッダーが存在しないことを確認します。 curl
コマンドを使用して、HTTPレスポンスヘッダーを確認します。
curl -I https://example.com
まとめ
- CVSS 基本値: 4.0 (Medium)
- 運用チームや開発者が意識すべきポイント:
- 本番環境では、
Content-Security-Policy
ヘッダーを設定し、Content-Security-Policy-Report-Only
ヘッダーのみが設定されていないことを確認する。 - CSPの導入初期段階では、
Content-Security-Policy-Report-Only
ヘッダーを使用して、ポリシーの影響を評価する。 - CSPのポリシーを適切に設定し、XSS攻撃などのリスクを軽減する。
- 定期的にWebサイトのセキュリティ診断を実施する。
- 本番環境では、
- 再発防止:
- 開発プロセス全体でセキュリティを考慮する (Security by Design)。
- コードレビューを実施し、CSPヘッダーの設定が正しいことを確認する。
- 自動脆弱性診断ツールを導入し、定期的にスキャンを行う。
- CSPに関するポリシーを策定し、遵守する。
- 設定管理ツール(IaC)を導入し、設定の一貫性を保つ。
補足資料・参考 URL
以上の対策と検出方法を活用して、Content Security Policy (CSP) Report-Only Header Found のリスクを低減してください。