CSP: base-uri

HTTP Content-Security-Policybase-uri ディレクティブは、ドキュメントの要素 <base> で、使用できる URL を制限します。この値が存在しない場合は、任意の URI が許可されます。このディレクティブが存在しない場合、ユーザーエージェントは、<base> 要素の値を使用します。

CSP version 2
Directive type Document directive
default-src fallback 設定しないと、任意の URL が許可されます。

構文

1 つまたは複数のソースを base-uri ポリシーに使用:

Content-Security-Policy: base-uri <source>;
Content-Security-Policy: base-uri <source> <source>;

ソース

このディレクティブは他の CSP ディレクティブと同じ引数を使用しますが、キーワードの 'unsafe-inline''strict-dynamic' などは意味がありません。

<source> は以下のうちの一つを取ることができます。

<host-source>
ホスト名または IP アドレスによるインターネットホストで、任意で URL スキームやポート番号を付けることができます。サイトのアドレスはワイルドカード (アスタリスク文字、'*') で始めることができ、更にポート番号にワイルドカード ('*') を使ってすべての有効なポート番号をソースとして示すことができます。
例:
  • http://*.example.com: http: のスキームを使用した、example.com のすべてのサブドメインからのすべての読み込みの試行に一致します。
  • mail.example.com:443: mail.example.com の 443番ポートへのアクセスの試行に一致します。
  • https://store.example.com: https: を使用した store.example.com へのアクセスの試行に一致します。
<scheme-source>
'http:' または 'https:' のようなスキーマです。コロンは必要です。単一引用符は使用しないでください。data スキーマも指定することができます (非推奨)。
  • data: コンテンツのソースとして data: の URI を使うことができるようにします。これは安全ではありません。攻撃者は任意の data: URI を挿入することもできます。使用は控え、スクリプトには絶対に使用しないでください。
  • mediastream: mediastream: の URI をコンテンツのソースとして使用することができるようにします。
  • blob: blob: の URI をコンテンツのソースとして使用することができるようにします。
  • filesystem: filesystem: の URI をコンテンツのソースとして使用することができるようにします。
'self'
保護された文書が提供されたオリジンを、同じ URL スキームおよびポート番号で参照します。単一引用符が必要です。ブラウザーによっては source ディレクティブから blob および filesystem を独自に除外していることがあります。これらのコンテンツ種別を許可する必要があるサイトは、Data 属性を使用して指定することができます。
'unsafe-eval'
文字列からコードを生成する eval() および同様のメソッドの利用を許可します。単一引用符が必要です。
'unsafe-hashes'
特定のインラインイベントハンドラを許可します。インラインイベントハンドラを許可したいが、インラインの <script> 要素や javascript: URL は不要な場合、これは unsafe-inline を使うよりも安全なメソッドです。
'unsafe-inline'
インラインの <script> 要素、javascript: の URL、インラインイベントハンドラー、インライン <style> 要素のような、インラインリソースの使用を許可します。単一引用符が必要です。
'none'
空のセットを参照します。つまり、一致する URL はありません。単一引用符が必要です。
'nonce-<base64-value>'
暗号化ノンス (一度だけ使われる数値) を使用する特定のインラインスクリプトのためのホワイトリストです。サーバーはポリシーを転送するたびに固有のノンスを生成する必要があります。リソースのポリシーを回避することを難しくするため、推測できないノンスを提供することが重要です。例えば安全でないインラインスクリプトを参照してください。ノンスを指定すると、最近のブラウザーは、ノンスの対応がない古いブラウザーのために設定されている可能性がある 'unsafe-inline' を無視するようになります。
'<hash-algorithm>-<base64-value>'
スクリプトまたはスタイルの sha256, sha384, sha512 の何れかのハッシュです。このソースは、ハッシュを生成するために使用する暗号化アルゴリズムと、スクリプトまたはスタイルのハッシュを base64 でエンコードしたものの二つの部分をダッシュで区切ったもので構成されます。ハッシュを生成するときは、<script> または <style> タグを含めないようにし、大文字・小文字の区別と、ホワイトスペースの扱い (先頭や末尾のホワイトスペースを含む) に注意してください。例えば安全でないインラインスクリプトを参照してください。CSP 2.0 では、これはインラインスクリプトにのみ適用されます。CSP 3.0 では script-src で外部スクリプトが指定された場合にも利用できます。
'strict-dynamic'
strict-dynamic ソース表現は、ノンスやハッシュを付加して、それらがルートスクリプトに読み込まれるすべてのスクリプトに伝搬することで、マークアップ内のスクリプトに明示的な信用を指定します。それと同時に、'self''unsafe-inline' といった、あらゆるホワイトリストやソース表現が無視されます。script-src の例を見てください。
'report-sample'
違反レポートに入れる違反コードのサンプルを要求します。

Meta タグの設定

<meta http-equiv="Content-Security-Policy" content="base-uri 'self'">

Apache の設定

<IfModule mod_headers.c> 
Header set Content-Security-Policy "base-uri 'self'";
</IfModule>

Nginx の設定

add_header Content-Security-Policy "base-uri 'self';"

違反になる場合

ドメインが example.com でないので、https://example.com に設定された <base> 要素の href が CSP 違反になります。

<meta http-equiv="Content-Security-Policy" content="base-uri 'self'">
<base href="https://example.com/">

// Error: Refused to set the document's base URI to 'https://example.com/' 
// because it violates the following Content Security Policy 
// directive: "base-uri 'self'"

仕様書

仕様書 状態 備考
Content Security Policy Level 3
base-uri の定義
草案 変更無し
Content Security Policy Level 2
base-uri の定義
勧告 初回定義

ブラウザー実装状況

No compatibility data found. Please contribute data for "http.headers.csp.base-uri" (depth: 1) to the MDN compatibility data repository.

関連情報