HTTP の Content-Security-Policy
(CSP) の connect-src
ディレクティブは、スクリプトインターフェイスを使用して読み込むことができる URL を制限します。以下の API が制限の対象となります。
注: connect-src 'self'
はすべてのブラウザーで websocket スキーマを解決するわけではありません、詳細はこちら: https://github.com/w3c/webappsec-csp/issues/7
CSP バージョン | 1 |
---|---|
ディレクティブ種別 | フェッチディレクティブ |
default-src による代替 |
あり。このディレクティブがない場合、ユーザーエージェントは default-src ディレクティブを探します。 |
構文
connect-src ポリシーには、1 つ以上のソースが許可されています。
Content-Security-Policy: connect-src <source>; Content-Security-Policy: connect-src <source> <source>;
ソース
<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 をコンテンツのソースとして使用することができるようにします。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
で外部スクリプトが指定された場合にも利用できます。
例
違反の場合
以下の CSP ヘッダーを指定した場合、
Content-Security-Policy: connect-src https://example.com/
以下のコネクションはブロックされ、読み込まれません。
<a ping="https://not-example.com">
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://not-example.com/');
xhr.send();
var ws = new WebSocket("https://not-example.com/");
var es = new EventSource("https://not-example.com/");
navigator.sendBeacon("https://not-example.com/", { ... });
</script>
仕様書
仕様書 | 状態 | 備考 |
---|---|---|
Content Security Policy Level 3 connect-src の定義 |
草案 | 変更なし |
Content Security Policy Level 2 connect-src の定義 |
勧告 | 初回定義 |
ブラウザーの互換性
BCD tables only load in the browser
互換性のメモ
- Firefox 23 以前では、
xhr-src
がconnect-src
ディレクティブの代わりに、XMLHttpRequest
を制限するだけのために使用されていました。