CSP: base-uri
HTTP Content-Security-Policy
の base-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 へのアクセスの試行に一致します。*.example.com
: 現在のプロトコルを使用した example.com のすべてのサブドメインからの読み込みのすべての試行に一致します。
- <scheme-source>
http:
またはhttps:
のようなスキームです。コロンは必要です。以下の他の値とは異なり、単一引用符は使用しないでください。data スキームも指定することができます (非推奨)。data:
コンテンツのソースとしてdata:
の URI を使うことができるようにします。これは安全ではありません。攻撃者は任意の data: URI を挿入することもできます。使用は控え、スクリプトには絶対に使用しないでください。mediastream:
mediastream: の URI (en-US) をコンテンツのソースとして使用することができるようにします。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 for http.headers.csp.base-uri
.
Check for problems with this page or contribute missing data to mdn/browser-compat-data.
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.