Permissions-Policy

HTTP の Permissions-Policy ヘッダーは、自身のフレームおよび文書内の <iframe> 要素で、ブラウザーの機能を使用することを許可または拒否する仕組みを提供します。

詳しくは、権限ポリシーの記事を参照してください。

ヘッダー種別 レスポンスヘッダー
禁止ヘッダー名 はい

構文

Permissions-Policy: <directive> <allowlist>
<directive>

allowlist に適用される権限ポリシーディレクティブです。許可されているディレクティブ名の一覧は、以下のディレクティブを参照してください。

<allowlist>

許可リストは、以下の値のうち 1 つ以上を取るオリジンの空白区切りのリストです。

  • *: この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) でオリジンに関係なく許可されます。

  • (): (空の許可リスト): この機能は最上位および含まれる閲覧コンテキストで無効になります。

  • self: この機能は、この文書と、含まれるすべての閲覧コンテキスト (iframe) のうち、同じオリジンのものに許可されます。

  • src: (iframe の allow 属性のみ) この iframe に読み込まれた文書が iframe の src 属性の URL と同じオリジンから来ている限り、この機能はこの iframe で許可されます。

    メモ: src のオリジンは iframe の allow 属性の中でのみ使用され、これが既定の allowlist の値です。

  • <origin>: この機能は特定のオリジン (例えば、 https://example.com) で許可されます。オリジンは空白で区切ってください。ただし、 <iframe>allow 属性には引き継がれないことに注意してください。

* の値 (すべてのオリジンで有効) または () (すべてのオリジンで無効) は単独でのみ使用できますが、 selfsrc は一つ以上のオリジンと一緒に使用することができます。

機能はそれぞれ、既定の許可リストを持つよう定義されています。

メモ: ディレクティブにはデフォルトの allowlist があり、 Permissions-Policy HTTP ヘッダーでは常に *, self または none になります。これらは個々のディレクティブのリファレンスページで指定されています。 <iframe>allow 属性では、デフォルトの動作は常に src です。

ブラウザーがサポートしている場合、許可リストで複数の異なるサブドメインを明示的に指定する代わりに許可ポリシーのオリジンにワイルドカードを含めることができます。

そのため以下のような指定は

http
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")

このように書き換えることができます。

http
("https://example.com" "https://*.example.com")

メモ: "https://*.example.com""https://example.com" とは別のオリジンになります。

ディレクティブ

accelerometer

現在の文書が、端末の加速度に関する情報を、 Accelerometer インターフェイスを通じて収集することを許可するかどうかを制御します。

ambient-light-sensor

現在の文書が、端末の周囲の環境における光量についての情報を、 AmbientLightSensor インターフェイスを通じて収集することを許可するかどうかを制御します。

autoplay

現在の文書で HTMLMediaElement インターフェイスがメディアの自動再生をリクエストすることを無効にするかどうかを制御します。このポリシーが有効であり、ユーザーによる操作がなかった場合、 HTMLMediaElement.play() が返す PromiseDOMException で拒否されます。 <audio> および <video> 要素の autoplay 属性は無視されます。

battery

Battery Status API の使用を許可するかどうかを制御します。このポリシーが無効になっている場合、 Navigator.getBattery() が返す PromiseNotAllowedErrorDOMException で拒否されます。

camera

現在の文書が動画入力機器を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 getUserMedia() が返す PromiseNotAllowedErrorDOMException で拒否されます。

display-capture

現在の文書が getDisplayMedia() メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、 getDisplayMedia() から返却されるプロミスが NotAllowedError で拒否されます。

document-domain

現在の文書が document.domain を設定することを許可するかどうかを制御します。このポリシーが無効な場合、 document.domain を設定しようとすると失敗し、 SecurityErrorDOMException が発生します。

encrypted-media

現在の文書が Encrypted Media Extensions API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 Navigator.requestMediaKeySystemAccess() から返却された PromiseDOMException で拒否されます。

execution-while-not-rendered

表示されないフレーム内 (例えば iframe が hidden または display: none の場合) でタスクを実行するかどうかを制御します。

execution-while-out-of-viewport

ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。

fullscreen

現在の文書が Element.requestFullscreen() を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却された PromiseTypeError で拒否されます。

gamepad

現在の文書が Gamepad API を使用することを許可するかどうかを制御します。 このポリシーが無効であれば、 Navigator.getGamepads() の呼び出しで SecurityErrorDOMException が発生するようになり、 gamepadconnected および gamepaddisconnected イベントは発生しなくなります。

geolocation

現在の文書が Geolocation インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、 getCurrentPosition() および watchPosition() を呼び出すと、関数のコールバックが呼び出され、 PositionError コードが PERMISSION_DENIED になります。

gyroscope

現在の文書が Gyroscope インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。

layout-animations

現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。

legacy-image-formats

現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。

magnetometer

現在の文書が Magnetometer インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。

microphone

現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 MediaDevices.getUserMedia() で返却されたプロミス (Promise) が NotAllowedErrorDOMException で拒否されます。

midi

現在の文書が Web MIDI API を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 Navigator.requestMIDIAccess() から返却された PromiseDOMException で拒否されます。

ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。

oversized-images

現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。

payment

現在の文書が Payment Request API を使用することを許可するかどうかを制御します。このポリシーが有効であれば、 PaymentRequest() コンストラクターで SecurityErrorDOMException が発生します。

picture-in-picture

現在の文書が、該当する API を使用して Picture-in-Picture モードで動画を再生することを許可するかどうかを制御します。

publickey-credentials-get

現在の文書が Web Authentication API を使用して、すでに保存されている公開鍵資格情報を再取得することを許可するかどうかを制御します (例: navigator.credentials.get({publicKey: ..., ...}))。

speaker-selection

現在の文書が Audio Output Devices API を使用して、スピーカーを列挙したり選択したりすることを許可するかどうかを制御します。

sync-xhr

現在の文書が同期 XMLHttpRequest リクエストを行うことを許可するかどうかを制御します。

unoptimized-images Experimental 非標準

現在の文書が最適化されていない画像をダウンロードしたり表示したりすることを許可するかどうかを制御します。

unsized-media Experimental 非標準

現在の文書が初期レイアウトの完了後にメディア要素の大きさを変更することを許可するかどうかを制御し案す。

usb

現在の文書が WebUSB API を使用することを許可するかどうかを制御します。

screen-wake-lock

現在の文書が Screen Wake Lock API を使用して、端末が画面をオフにしたり暗くしたりしてはいけないことを示すことを許可するかどうかを制御します。

web-share

現在の文書が Web Share API の Navigator.share() を使用して、テキスト、リンク、画像、その他のコンテンツをモバイルアプリなどのユーザーが任意に選択した任意の場所に共有することを許可するかどうかを制御します。

xr-spatial-tracking

現在の文書が WebXR Device API を使用して WebXR セッションと対話することを許可するかどうかを制御します。

SecureCorp Inc. が、アプリケーションでマイクと Geolocation API を無効にしたがっているとします。以下の権限ポリシーを設定する HTTP レスポンスヘッダーを配信することで実現できます。

Permissions-Policy: microphone=(), geolocation=()

オリジンのリストに () キーワードを指定すると、指定された機能がオリジンに関係なく、すべての閲覧コンテキスト (iframe を含む) で無効になります。

仕様書

Specification
Permissions Policy
# permissions-policy-http-header-field

ブラウザーの互換性

BCD tables only load in the browser

関連情報