コンテンツセキュリティポリシー生成ツール
XSS攻撃やコードインジェクションから保護するCSPヘッダーを生成します。セキュリティプリセットとNginx、Apache、HTML metaの設定を含みます。
セキュリティプリセット
ディレクティブの設定
fetch Directives
default-srcFallback for other fetch directives
Examples: 'self', 'self' https:, 'none'
script-srcSources for JavaScript execution
Examples: 'self', 'self' 'unsafe-inline', 'self' https://cdn.example.com
style-srcSources for stylesheets
Examples: 'self', 'self' 'unsafe-inline', 'self' https://fonts.googleapis.com
img-srcSources for images
Examples: 'self', 'self' data:, 'self' https: data:
font-srcSources for fonts
Examples: 'self', 'self' https://fonts.gstatic.com, 'self' data:
connect-srcSources for XHR, WebSocket, and EventSource
Examples: 'self', 'self' https://api.example.com, 'self' wss:
media-srcSources for audio and video
Examples: 'self', 'self' https://media.example.com, 'none'
object-srcSources for plugins (object, embed, applet)
Examples: 'none', 'self', 'self' https://plugins.example.com
frame-srcSources for nested browsing contexts (iframe)
Examples: 'self', 'none', 'self' https://www.youtube.com
worker-srcSources for Worker, SharedWorker, or ServiceWorker
Examples: 'self', 'none', 'self' blob:
manifest-srcSources for web app manifests
Examples: 'self', 'none', 'self' https://cdn.example.com
document Directives
base-uriRestrict URLs for <base> elements
Examples: 'self', 'none', 'self' https://example.com
navigation Directives
form-actionRestrict form submission URLs
Examples: 'self', 'none', 'self' https://api.example.com
frame-ancestorsRestrict embedding this page in frames
Examples: 'none', 'self', 'self' https://trusted.example.com
reporting Directives
report-uriURL to send CSP violation reports
Examples: https://example.com/csp-report, /csp-violation-endpoint
生成されたコンテンツセキュリティポリシー
CSPポリシー
default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
HTTPヘッダー
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
HTML Metaタグ
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'">
Nginx設定
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'";
Apache設定
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"
設定をダウンロード
セキュリティのヒント
- • 問題のある変更を特定するためにレポートオンリーモードから始めてください
- • 可能な限り'unsafe-inline'と'unsafe-eval'を避けてください
- • インラインスクリプト/スタイルにはnonceまたはハッシュを使用してください
- • サイトの発展に合わせてCSPを定期的に見直し更新してください
- • 攻撃や設定ミスを検出するためにCSP違反レポートを監視してください
- • 最新のCSP実装にはnonceとともに'strict-dynamic'を使用してください
関連ツール
このツールについて
使い方
- CSPディレクティブを設定してリソース読み込みを制御する
- セキュリティプリセットを使って一般的なセキュリティレベルを設定
- 各種Webサーバー用のヘッダーを生成
- 適用前にレポートオンリーモードでテスト
主な用途
- XSS攻撃とコードインジェクションの防止
- サードパーティのリソース読み込みの制御
- 多層防御セキュリティの実装
- セキュリティのベストプラクティスへの準拠
よくある質問
コンテンツセキュリティポリシー(CSP)とは何ですか?なぜ必要ですか?
CSPはWebサイトに読み込める可能リソースを制御することで、クロスサイトスクリプティング(XSS)攻撃やデータインジェクションを防ぐセキュリティ機能です。悪意のあるコードの実行から保護するための追加セキュリティ層として機能します。
適用モードとレポートオンリーモードの違いは何ですか?
適用モードはCSPポリシー違反を積極的にブロックし、レポートオンリーモードはブロックせずに違反を記録します。本番サイトで適用する前に、まずレポートオンリーモードでポリシーをテストし、潜在的な問題を特定することをお勧めします。
どのセキュリティプリセットを選べばよいですか?
最大の保護には「厳格なセキュリティ」、外部リソースを使用するほとんどのWebサイトには「中程度のセキュリティ」、開発環境やレガシーサイトには「許容的」から始めてください。プリセット選択後にディレクティブをカスタマイズできます。
HTTPヘッダーの代わりにmetaタグでCSPを使用できますか?
はい、CSPにはHTMLのmetaタグを使用できますが、HTTPヘッダーの方が多くの機能とセキュリティを提供するため推奨です。レポートオンリーモードはHTTPヘッダーでのみ実装でき、metaタグでは使用できません。
'unsafe-inline'とは何ですか?避けるべきですか?
'unsafe-inline'はインラインスクリプトとスタイルの実行を許可しますが、セキュリティリスクになる可能性があります。外部ファイルを使用するか、インラインコンテンツにはnonce/ハッシュを実装するほうが良いです。
Google AnalyticsやCDNなどのサードパーティサービスをどう処理しますか?
適切なディレクティブに特定のドメインを追加します(例:アナリティクスにはscript-src、Webフォントにはfont-src)。Google Analyticsには'https://www.google-analytics.com'をscript-srcに追加します。ワイルドカードより具体的なドメインを指定してください。
CSPがWebサイトを壊してしまった場合はどうすればよいですか?
まず、機能を壊さずに違反を特定するためにレポートオンリーモードを使用します。ブラウザのコンソールでCSP違反エラーを確認し、必要なリソースを許可するようにポリシーを更新します。段階的にセキュリティを強化してください。
CSP違反レポートはどのように実装しますか?
CSP違反データを含むPOSTリクエストを受信できるエンドポイントを指すreport-uriディレクティブを設定します。多くのサービスがCSP違反モニタリングを提供しています。
同じページで複数のCSPポリシーを使用できますか?
複数のCSPポリシーが定義されている場合(ヘッダーとmetaタグ経由)、最も制限的なポリシーが適用されます。デバッグが難しい複数の競合するポリシーより、適切に設定された単一のポリシーを使用することをお勧めします。
frame-srcとframe-ancestorsの違いは何ですか?
frame-srcはページがiframeに埋め込めるURLを制御し、frame-ancestorsはどのURLがページを埋め込めるかを制御します。frame-ancestors: 'none'を使用すると、ページがどこにも埋め込まれないようにできます。
CSPポリシーをどのくらいの頻度で更新すべきですか?
新しいサードパーティサービスを追加したり、サイトのアーキテクチャを変更したり、CSP違反レポートを受け取ったりしたときにCSPポリシーを見直してください。定期的なセキュリティ監査にはCSPポリシーのレビューを含めてください。
CSPはすべてのブラウザで動作しますか?
CSPはすべての最新ブラウザでサポートされていますが、古いバージョンでは新しいCSP機能のサポートが限られている場合があります。CSPは適切にデグレードします——サポートされていないディレクティブは無視されます。