--- title: "Content Security Policy(CSP)の設定方法と書き方" description: "CSP(Content Security Policy)の基本的な設定方法と主要ディレクティブを解説します。XSS攻撃を防ぐためのヘッダー設定、GTM・Google広告との互換性の取り方もまとめました。" date: 2026-05-07 tags: [CSP, セキュリティ, HTTP, Web制作] related_tools: [csp, security-headers] draft: false --- Content Security Policy(CSP)はXSS(クロスサイトスクリプティング)などの攻撃を緩和するためのHTTPレスポンスヘッダーです。許可するリソースの読み込み元をホワイトリスト形式で宣言し、それ以外のリソースをブラウザ側でブロックします。 ## CSPの仕組み サーバーが以下のようなレスポンスヘッダーを返すと、ブラウザはそのポリシーに従ってリソースの読み込みを制御します。 ``` Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' ``` この例では「JavaScriptは自ドメインとインラインのみ許可、それ以外の外部JSはブロック」という設定です。 ## 主要なディレクティブ | ディレクティブ | 制御するもの | |---|---| | `default-src` | 未指定ディレクティブのフォールバック | | `script-src` | JavaScriptの読み込み元 | | `style-src` | CSSの読み込み元 | | `img-src` | 画像の読み込み元 | | `font-src` | フォントの読み込み元 | | `connect-src` | fetch / XHR / WebSocketの接続先 | | `frame-src` | iframeで読み込めるURL | | `frame-ancestors` | このページをiframeに埋め込めるURL | | `object-src` | Flash等のプラグインリソース | | `base-uri` | `` タグで設定できるURL | ## 基本的な設定例(Apache .htaccess) ``` Header always set Content-Security-Policy "\ default-src 'self'; \ script-src 'self' 'unsafe-inline'; \ style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; \ img-src 'self' data: blob:; \ font-src 'self' https://fonts.gstatic.com; \ connect-src 'self'; \ frame-ancestors 'none'; \ object-src 'none'; \ base-uri 'self' \ " ``` ## Google Tag Manager・広告との互換性 GTMやGoogle広告・Meta Pixelを使っている場合は、それらのドメインを `script-src` に追加する必要があります。 ``` script-src 'self' 'unsafe-inline' \ https://www.googletagmanager.com \ https://pagead2.googlesyndication.com \ https://connect.facebook.net; connect-src 'self' \ https://www.google-analytics.com \ https://stats.g.doubleclick.net \ https://www.facebook.com; ``` 外部サービスの追加は都度発生するため、`Content-Security-Policy-Report-Only` ヘッダーを使ってレポートモードで動作確認してから本番適用するのが安全です。 ## レポートモードでのテスト ``` Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'unsafe-inline' ``` `Report-Only` ではブロックはせずにコンソールに警告のみ表示されるため、既存サイトへの影響を確認しながら設定を調整できます。問題がなければ `Content-Security-Policy` ヘッダーに切り替えます。 ## よくあるエラーと原因 - **インラインスクリプトがブロックされる**: `'unsafe-inline'` を許可するか、ハッシュ(`'sha256-...'`)やnonce方式に切り替える - **Google Fontsが読み込まれない**: `style-src` に `https://fonts.googleapis.com`、`font-src` に `https://fonts.gstatic.com` を追加する - **fetch()が失敗する**: `connect-src` に対象ドメインを追加する [CSP確認ツール](/csp/)では、URLを入力するだけでCSPの設定状況をチェックし、GTM・GA4・Meta Pixelとの互換性とセキュリティスコアを確認できます。