コンテンツセキュリティポリシー
Silktide は、すべてのページでコンテンツセキュリティポリシーが宣言されているかをチェックします。コンテンツセキュリティポリシーは、ページで使用が許可されているスクリプト、画像、その他のコンテンツの出典をブラウザーに伝える、標準的なセキュリティ対策です。
コンテンツセキュリティポリシー(CSP)は、またはメタタグとして配信されます。例:
Content-Security-Policy: default-src 'self'; script-src 'self' scripts.example.com
この例では、ブラウザーに対して、自分のドメインと、信頼された 1 つのホストからのスクリプトのみを読み込むよう指示しています。
重要な理由
CSP がない場合、ページは与えられたものをそのまま実行します。攻撃者が、侵害されたサードパーティ製タグ、脆弱なコメント欄、乗っ取られた広告ネットワークなどを通じてスクリプトを挿入できると、ブラウザーはページへの完全なアクセス権を持つそのスクリプトを実行します。これには訪問者が入力したあらゆる内容も含まれます。この種の攻撃であるクロスサイトスクリプティングは、今もウェブサイトが侵害される最も一般的な方法の 1 つです。
CSP はブラウザー側の安全網です。承認されていない出典から挿入されたコンテンツは、単純に読み込まれません。また、ページが通信するサードパーティを文書化するため、 などのプライバシー規制への準拠を示す際にも役立ちます。
修正方法
- ページがコンテンツを読み込む正当な出典を一覧にします。自社ドメイン、、アナリティクス、フォント、埋め込みメディアなどです。
- それらの出典のみを許可するポリシーを作成します。まずは
default-src 'self'のように厳格に設定し、必要に応じてコンテンツの種類ごと(script-src、img-src、style-srcなど)に特定の出典を追加します。 - ウェブサーバー、ホスティングプラットフォーム、または CDN を設定し、すべてのページで
Content-Security-Policyヘッダーとしてポリシーを送信します。ヘッダーを変更できない場合は、ページの head 内に<meta http-equiv="Content-Security-Policy">タグを配置する方法もありますが、ヘッダーが推奨されます。 - 適用前にテストします。まずポリシーを
Content-Security-Policy-Report-Onlyとして送信し、ブロックされるはずだったコンテンツをブラウザーのコンソールで確認します。このチェックは適用用のヘッダーを確認するため、Report-Only ポリシーでは合格しないことに注意してください。
Silktide によるテスト方法
- 各ページを読み込み、HTTP ヘッダーと、ページ内の
http-equivメタタグを収集します。ブラウザーはこれらを同じ方法で扱います。 - いずれかの場所に
Content-Security-Policyの値があるかを確認します。 - どちらにも存在しない場合、または値が空の場合、そのページを報告します。
- Silktide はポリシーの品質を判定せず、存在することだけを確認します。
トラブルシューティング
ポリシーを設定したのにチェックが失敗する
スキャン対象となっている正確なページにヘッダーが表示されることを確認してください。ポリシーがホームページまたは 1 つの仮想ホストにのみ設定されていることがあります。ページが返すヘッダーは、ブラウザーの開発者ツールの Network タブで確認できます。
CSP によってウェブサイトが壊れることはありますか?
厳しすぎるポリシーは、自分のスクリプトやスタイルをブロックする可能性があります。そのため、まず Content-Security-Policy-Report-Only でテストすることを強く推奨します。これにより、何もブロックせずに違反を報告できます。