1754439228
2025-08-04 13:52:00
CSP 3では、分割する能力 スクリプト-SRC の中へ スクリプト-SRC-ELEM そして スクリプト-SRC-ATTR 追加されました。 これは、で使用できるものをより多く制御することを目的としていました 要素vs要素上のJavaScript属性で使用できるもの。 使用したい場合は期間がありました スクリプト-SRC-ELEM そして スクリプト-SRC-ATTR あなたはまだ生産しなければなりませんでした スクリプト-SRC まだCSP 3に準拠していないデバイスとブラウザをサポートするため。 CSP 3のサポートは非常に広くなっているため、スクリプト-SRCを省略できます。 まだ多くのソースがあり、ソースの重複がある場合 スクリプト-SRC-ELEM そして スクリプト-SRC-ATTR その後、使用に切り替えることができます スクリプト-SRC その代わり。
大きくて非常に具体的:
script-src-elem 'self' 'nonce-r4nd0m' https://www.example.com https://www.elem-only.com;
script-src-attr 'self' https://www.example.com https://www.attr-only.com;
より小さく、具体的ではありません:
script-src 'self' 'nonce-r4nd0m' https://www.example.com https://www.elem-only.com https://www.attr-only.com;
💡ティップ: 同じ手法は、Style-SRC、Style-SRC-ELEM、Style-SRC-ATTRに使用できます。
2.デフォルトSRCを簡単に保ちます
デフォルトSRC ディレクティブは、他のほとんどのコンテンツセキュリティポリシー指令のフォールバックとして機能します。 Script-SRCやIMG-SRCのようなディレクティブが明示的に定義されていない場合、ブラウザはデフォルトSRCで設定したものに戻ります。複雑さを軽減し、過度に寛容なデフォルトを防ぐために、保持することが最善です デフォルトSRC できるだけタイト。理想的には、独自のドメインに制限されているか、完全に無効になります。
ここに3つの実用的なオプションがあります。
- デフォルト-SRC ‘NONE’; 別の指令で明示的に許可されない限り、すべてのリソースをブロックします。これは、最も制限的で安全なデフォルトです。
- デフォルトSRC「自己」; 現在のドメインからのリソースのみが許可されます。これは、多くのサイトにとって一般的で安全な選択です。
- default-src ‘self’ https://*.mydomain.com; より寛容に、これにより、ドメインとすべてのサブドメインからのリソースが可能になります。注意してください:これには、意図的に範囲を除外しない限り、開発、テスト、またはレガシーサブドメインが含まれます。
💡ティップ: スクリプト-SRC、スタイル-SRC、IMG-SRCなどの個々のディレクティブを既に指定している場合、寛容なデフォルトSRCはまったく必要ない場合があります。その場合、「なし」を使用して、意図していなかったフォールバックの動作を誤って許可することを避けることを検討してください。
3.ベースURIをシンプルに保ちます
この制限がなければ、悪意のある俳優は変更できます
この指令は非常に具体的な目的に役立つため、通常は次のいずれかに狭く監視されたままにすることが最善です。
base-uri 'self';
or
base-uri 'self' https://*.mydomain.com;
4.フレームアンセストをシンプルに保ちます
の目的 フレームアンペスト どのWebサイトがCMSサイトをiframeでホストできるかを制限することです。 ほとんどの最適化ウェブサイトでは、これはウェブサイトのみがそれ自体をフレーム化できるようにするために制限する必要があります。
frame-ancestors 'self';
or
frame-ancestors 'self'; https://*.mydomain.com;
Optimizely Web実験を使用している場合は、編集バリアントインターフェイスの動作を許可するために、Optimizely.comを許可することもできます。
frame-ancestors 'self'; https://*.mydomain.com https://*.optimizely.com;
5.重複したエントリを避けてください
私がレビューしたコンテンツセキュリティポリシーでは、同じドメインが2回追加される複数のインスタンスがあることに注目しました。 そのような後続のスラッシュの有無にかかわらず:
script-src 'self' https://www.example.com https://www.example.com/
コンテンツセキュリティポリシーでは、これらの2つのフォームは機能的に同一です。トレーリングスラッシュにはあります 効果はありません ソースが単なるホストである場合(つまり、パスはありません)。ブラウザは両方とも、Origin https://www.example.comのすべてのコンテンツを許可するものとして扱います。
ポリシーを簡素化します 複製を削除し、1つのクリーンバージョンのみを維持することにより:
script-src 'self' https://www.example.com;
💡ティップ: **パス**を含むCSPソースを使用している場合、後続のスラッシュ*が重要であり、パスのすぐ下のリソースにリソースを制限します。
-
- https://example.com/js/ matches /js/app.js
- https://example.com/jsは/jsのみに一致します
6.ワイルドカードサブドメインがすでにより具体的なドメインをカバーしているかどうかを確認します
報告された例では、密接に関連するドメインの冗長なワイルドカードエントリの複数のインスタンスを見つけました。これらの例には以下が含まれます。
script-src https://*.consentmanager.net https://*.delivery.consentmanager.net https://*.fls.doubleclick.net https://*.g.doubleclick.net https://*.doubleclick.net
https://*.example.comのようなワイルドカードソースを使用する場合、ワイルドカードの振る舞いを理解することが重要です。
- https://*.example.comは、cdn.sub.example.comなどのサブドメインレベルの任意の数と一致します
- それは** apexドメイン自体と一致しません(すなわちhttps://example.com)
これを知っていると、コンテンツセキュリティポリシーを単純化できます。
script-src https://*.consentmanager.net https://*.doubleclick.net;
💡 ヒント: より広いワイルドカードが必要なすべてのソースをカバーし、不要なアクセスを導入しないことを常に確認してください。ルートドメイン(https://doubleclick.netなど)が必要な場合でも、個別にリストする必要があります。 *.doubleclick.netのようなワイルドカードには含まれていません。
7. HTTPSに注意してください:およびWSS:ソースディレクティブのワイルドカードプロトコル
大規模な多国籍CMSプラットフォーム(特に、編集者が寄付フォーム、インタラクティブウィジェット、360°ビューなどのサードパーティのコンテンツを頻繁に組み込む)では、セキュリティポリシーが維持が難しくなる可能性があります。これらの場合、次のような広範な指令を使用することは魅力的です。
frame-src 'self' https:;
これにより、httpsを介して提供されている限り、コンテンツをiframedにすることができます。 実用的な短期ソリューション コンテンツソースが常に変化しており、管理が困難な場合。ただし、この利便性には深刻なトレードオフがあります。
使用 https: ブラウザに許可するように効果的に指示します どれでも 信頼できるパートナーだけでなく、安全なドメイン。つまり、https://example.comのようなドメインを明示的にリストすることは冗長であり、さらに悪いことに、暗黙的にhttps://malicious.siteまたはその他のhttpsベースのドメインがサイトにスクリプトまたはフレームをロードすることを可能にします。 WSSについても同じ動作が存在します。HTTP:プロトコルも同様です。したがって、それらを使用するときは注意してください。または、完全に避けてください。
script-src 'self' https: https://example.com; // Redundant and risky
💡おすすめ: その間 https: または WSS: 役に立つショートカットのように思えるかもしれませんが、一般的に特定を定義する方が良いです AllowList 信頼できるドメインの。避ける https: そして WSS: スタンドアロンプロトコルはソースのみであり、代わりにhttps://trustedpartner.comのような完全に資格のあるエントリを使用して、制御を維持し、サードパーティの脅威への露出を最小限に抑えます。
8。コンテンツセキュリティポリシーを監査します
Optimizelyは以前、ほとんどのWebサイトが再建またはブランドの間に平均5年間稼いでいることに注目しています。その間、多くの場合、Google Tag Manager(GTM)などのプラットフォームを介して、サードパーティツールを追加および削除することが一般的です。ツールが導入されるたびに、通常、コンテンツセキュリティポリシーの更新が必要なため、スクリプト、IFRAME、または新しいドメインからの接続を許可します。
しかし、それらのツールのいずれかの使用を停止するとどうなりますか?コンテンツセキュリティポリシーからこれらのアクセス許可を削除するのを忘れがちです。時間が経つにつれて、これにより、肥大化した、時代遅れ、潜在的に安全性の低いポリシーが生じます。
Stott Security モジュールには、監査を容易にする機能が含まれています。
- に移動します Stott Security Interface
- に ツール ページ、現在のセキュリティ構成をエクスポートします
- に CSP設定 ページ:
- 有効にする 「レポートのみモードを使用」
- 有効にする 「内部レポートのエンドポイントを使用」
- あなたがもう使用されていないと思われるCSPソースの削除を開始します
- 監視します CSP違反 正当なコンテンツが壊れるかどうかを確認するページ
問題が発生した場合は、[ツール]ページから保存した構成を再インポートすることができます。更新されたポリシーが安全であると確信したら、オフにしてください 「レポートのみモードを使用」 そして 「内部レポートのエンドポイントを使用」 合理化されたポリシーを実施し、CSPレポートによって引き起こされるWebサーバーへのトラフィックを減らすため。
9.ソースリストのページ固有の拡張機能を使用します
Stott Security 特定のページのコンテンツセキュリティポリシーのソースを拡張する機能を長い間サポートしてきました。 たくさんの組み込みコンテンツを備えたWebサイトを持っているとしましょう。これのほとんどはかなりユニークです。 埋め込みの数に追いつこうとするだけで、CSPを膨らませることができます。 これは、ドメインが行動することを許可するため、望ましくない場合があります 全て あなたのウェブサイトは、単一のページでのみ必要な場合。
これを実装するために、開発チームまたは代理店のパートナーは icontentsecurypollypage インターフェイスCMS編集可能なプロパティとして、またはコードを使用して、次のように自分自身を実装することにより、次のように実装してください。
public class MyPage : PageData, IContentSecurityPolicyPage
{
[Display(
Name = "Content Security Policy Sources",
Description = "The following Content Security Policy Sources will be merged into the global Content Security Policy when visiting this page",
GroupName = "Security",
Order = 10)]
[EditorDescriptor(EditorDescriptorType = typeof(CspSourceMappingEditorDescriptor))]
public virtual IList
このページが提供されると、ここで指定されているソースと指令は、このページにサービスを提供する目的で、グローバルコンテンツセキュリティポリシーに統合されます。
Optimizely CMS 12のStott Securityの変更
の他のカスマーを防ぐため Stott Security ヘッダーサイズの制限で同じ問題に遭遇したことから、CloudFlareのハード16kb制限を尊重する生成されたコンテンツセキュリティポリシーにいくつかのセーフティネットを追加することにしました。一般的にヘッダーサイズの制限を調査するとき、私は最も一般的な推奨事項は、ヘッダーがヘッダーごとに8kb未満に保つために、幅広い互換性を確保することであることを観察しました。
バージョン3.0.2から始まります Stott Security、CSPはインテリジェントに分割されます 複数のCSPヘッダー サイズが8kbの制限に近づいた場合。ブラウザは複数のCSPヘッダー間で最も制限的なポリシーを強制するため、これらのヘッダーは指令階層とフォールバックの動作に基づいて慎重に分割されます。
ヘッダーが12kbを超えて成長した場合、次のようにディレクティブを統合するために追加のロジックが適用されます。
- スクリプト-SRC-ELEM そして スクリプト-SRC-ATTR にマージされます スクリプト-SRC。
- スタイル-SRC-ELEM そして Style-src-attr にマージされます スタイル-SRC。
- フレーム-SRC、 労働者SRC にマージされます 子-SRC。
- 省略されたソーススタイルのディレクティブは、に該当します デフォルトSRC デフォルトで明示的に追加されます ‘自己’ 必要に応じて。
最終的なセーフガードとして、すべてのCSPヘッダーの合計サイズが16KBのクラウドフラア制限に近づくと、予期しない障害を回避するためにCSPは生成されません。
まとめ
コンテンツセキュリティポリシーを簡素化し、推奨8kbまたはCloudflareのハード16kbの制限を下回るために、以下を検討してください。
- ディレクティブの使用を簡素化します
- ただ使用してください スクリプト-SRC の代わりに スクリプト-SRC、 スクリプト-SRC-ELEM そして スクリプト-SRC-ATTR
- ただ使用してください スタイル-SRC の代わりに スタイル-SRC、 スタイル-SRC-ELEM そして Style-src-attr
- 保つ デフォルトSRC、 ベース そして フレームアンペスト それらを制限することによってシンプル ‘自己’
- https://www.example.comやhttps://www.example.com/などの重複したエントリを避けてください。
- 既により寛容なワイルドカード(https://*.example.com)がある場合は、あまり特定のワイルドカード(https://*.one.example.com)を使用しないでください。
- の使用を検討してください https: そして WSS: WildCardsが許可するように非常に慎重にプロトコルします 全て あなたが指定したドメインだけでなく、ドメイン。
- コンテンツセキュリティポリシーを監査し、使用していないスクリプトのアクセス許可を削除します。
- の一部であるコンテンツセキュリティポリシー機能のページ固有の拡張機能を使用することを検討してください Stott Security
- の最新バージョンへの更新を検討してください Stott Security 今日、自動CSPの簡素化から利益を得て、肥大化したコンテンツセキュリティポリシーからサーバーを保護するため。
私のすべてのコンテンツが照合されているのを見つけることができます https://www.stott.pro/
#コンテンツセキュリティポリシーを最適化するHTTPヘッダー内にとどまる