ヘッダーが欠落・脆弱なままになる理由
- デフォルトのホスティング構成には、そもそも1つも含まれていない。 ほとんどのWebサーバーやプラットフォームは、明示的に設定しない限りセキュリティヘッダーを追加しません。
- CSPが一度追加されたきり、二度と見直されない。 アプリが新しいサードパーティのスクリプト、埋め込み、フォントを追加していくにつれ、1年前に書かれた静的なCSPがそれらを気づかぬうちにブロックしてしまいます。あるいはさらに悪いことに、誰かがエラーを止めるためにワイルドカードでCSPを緩め、ポリシー自体を無効化してしまうこともあります。
- HSTSが、実効性を持たせるためのディレクティブなしに追加されてしまう。
max-ageが短く、includeSubDomainsやpreloadを伴わない素のStrict-Transport-Securityヘッダーは、見た目よりもはるかに弱い保護しか提供しません。 - 古いチュートリアルからコピーされた非推奨のヘッダーが残り続ける。 最新のブラウザでは無視される、あるいはそれ自体がリスクを持ち込みうる
X-XSS-Protectionなどがその例です。
問題の特定方法
これはScanverraの最も高度なセキュリティ機能です。セキュリティスキャナーは、base-uri、form-action、object-src、frame-ancestorsを具体的にチェックし、過度に広範なワイルドカードのソースも検出する、本物のCSPディレクティブ解析を実行します。さらに、max-age、includeSubDomains、preloadをカバーする完全なHSTSの深度チェックも行います。特にpreloadディレクティブについては、hstspreload.orgのAPIに実際にライブで問い合わせを行い、あなたのドメインが単に主張しているだけでなく、実際にChromeのプリロードリストに登録されているかを確認します。また、X-XSS-Protectionのような非推奨のヘッダーにもフラグを立て、すべての検出結果をCWEおよびOWASP Top 10の参照にマッピングします。たとえば、HSTSヘッダーの欠落はCWE-319とOWASP A05:2021にマッピングされるため、検出結果はそのままコンプライアンス文書に転用できます。
修正方法
1. HSTSを完全なディレクティブセットとともに追加する
1Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadpreloadを追加したら、hstspreload.orgでドメインを登録してください。このディレクティブを付けるだけでは登録は完了せず、実際に登録が承認されるまでScanverraのライブチェックはこのギャップを検出し続けます。
2. サイトが実際に読み込むものに合わせたContent-Security-Policyを書く
1Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; object-src 'none'; frame-ancestors 'self'script-src/style-srcには、必要な範囲でのみ信頼できる特定のオリジンを追加してください。コンソールのエラーを黙らせるためだけにワイルドカード(*)やスキームのみのソース(https:)に頼るのは、ポリシーの目的そのものを完全に無効化してしまうため避けてください。
3. 残りの標準的なヘッダーを追加する
1X-Content-Type-Options: nosniff
2X-Frame-Options: DENY
3Referrer-Policy: strict-origin-when-cross-originCSP内のframe-ancestorsは、X-Frame-Optionsの最新の代替であり、より柔軟です。ただし、古いブラウザはレガシーなヘッダーしか尊重しないため、両方を配信してください。
4. 非推奨のヘッダーはそのままにせず削除する
X-XSS-Protectionは非推奨であり、OWASPは何らかの値を設定するのではなく完全に削除することを明確に推奨しています。本物のCSPがその最新の代替であり、それに併用するものではありません。
Scanverraがこれをどう検出するか
Scanverraのセキュリティスキャナーは、稼働中のレスポンスヘッダーを読み取り、単純な有無のチェックではなく、本物のディレクティブレベルの解析を行います。CSPディレクティブのカバレッジとワイルドカード検出、hstspreload.orgへのライブ照会を含むHSTS値の深度チェック、そして非推奨ヘッダーの検出です。それぞれの検出結果は、該当する場合CWE、OWASP、PCIの参照にマッピングされます。