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
属性には引き継がれないことに注意してください。
*
の値 (すべてのオリジンで有効) または()
(すべてのオリジンで無効) は単独でのみ使用できますが、self
とsrc
は一つ以上のオリジンと一緒に使用することができます。機能はそれぞれ、既定の許可リストを持つよう定義されています。
メモ: ディレクティブにはデフォルトの allowlist があり、
Permissions-Policy
HTTP ヘッダーでは常に*
,self
またはnone
になります。これらは個々のディレクティブのリファレンスページで指定されています。<iframe>
のallow
属性では、デフォルトの動作は常にsrc
です。 -
ブラウザーがサポートしている場合、許可リストで複数の異なるサブドメインを明示的に指定する代わりに許可ポリシーのオリジンにワイルドカードを含めることができます。
そのため以下のような指定は
("https://example.com" "https://a.example.com" "https://b.example.com" "https://c.example.com")
このように書き換えることができます。
("https://example.com" "https://*.example.com")
メモ: "https://*.example.com"
は "https://example.com"
とは別のオリジンになります。
ディレクティブ
accelerometer
-
現在の文書が、端末の加速度に関する情報を、
Accelerometer
インターフェイスを通じて収集することを許可するかどうかを制御します。 ambient-light-sensor
-
現在の文書が、端末の周囲の環境における光量についての情報を、
AmbientLightSensor
インターフェイスを通じて収集することを許可するかどうかを制御します。 autoplay
-
現在の文書で
HTMLMediaElement
インターフェイスがメディアの自動再生をリクエストすることを無効にするかどうかを制御します。このポリシーが有効であり、ユーザーによる操作がなかった場合、HTMLMediaElement.play()
が返すPromise
がDOMException
で拒否されます。<audio>
および<video>
要素のautoplay
属性は無視されます。 battery
-
Battery Status API の使用を許可するかどうかを制御します。このポリシーが無効になっている場合、
Navigator.getBattery()
が返すPromise
はNotAllowedError
のDOMException
で拒否されます。 camera
-
現在の文書が動画入力機器を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
getUserMedia()
が返すPromise
はNotAllowedError
のDOMException
で拒否されます。 display-capture
-
現在の文書が
getDisplayMedia()
メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、getDisplayMedia()
から返却されるプロミスがNotAllowedError
で拒否されます。 document-domain
-
現在の文書が
document.domain
を設定することを許可するかどうかを制御します。このポリシーが無効な場合、document.domain
を設定しようとすると失敗し、SecurityError
のDOMException
が発生します。 encrypted-media
-
現在の文書が Encrypted Media Extensions API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMediaKeySystemAccess()
から返却されたPromise
がDOMException
で拒否されます。 execution-while-not-rendered
-
表示されないフレーム内 (例えば iframe が
hidden
またはdisplay: none
の場合) でタスクを実行するかどうかを制御します。 execution-while-out-of-viewport
-
ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。
fullscreen
-
現在の文書が
Element.requestFullscreen()
を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却されたPromise
がTypeError
で拒否されます。 gamepad
-
現在の文書が Gamepad API を使用することを許可するかどうかを制御します。 このポリシーが無効であれば、
Navigator.getGamepads()
の呼び出しでSecurityError
のDOMException
が発生するようになり、gamepadconnected
およびgamepaddisconnected
イベントは発生しなくなります。 geolocation
-
現在の文書が
Geolocation
インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、getCurrentPosition()
およびwatchPosition()
を呼び出すと、関数のコールバックが呼び出され、PositionError
コードがPERMISSION_DENIED
になります。 gyroscope
-
現在の文書が
Gyroscope
インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 layout-animations
-
現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。
legacy-image-formats
-
現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。
magnetometer
-
現在の文書が
Magnetometer
インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 microphone
-
現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
MediaDevices.getUserMedia()
で返却されたプロミス (Promise
) がNotAllowedError
のDOMException
で拒否されます。 midi
-
現在の文書が Web MIDI API を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMIDIAccess()
から返却されたPromise
がDOMException
で拒否されます。 -
ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。
oversized-images
-
現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。
payment
-
現在の文書が Payment Request API を使用することを許可するかどうかを制御します。このポリシーが有効であれば、
PaymentRequest()
コンストラクターでSecurityError
のDOMException
が発生します。 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 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