Feature-Policy
HTTP の Feature-Policy
ヘッダーは、自身のフレームおよび文書内の <iframe>
要素で、ブラウザーの機能を使用することを許可または拒否する仕組みを提供します。
このヘッダーはまだ実験的な状態であり、随時変更される可能性があります。ウェブサイトに実装する際には注意してください。現在、このヘッダーは仕様では Permissions-Policy
に改名されており、この記事は最終的にはその変更を反映して更新される予定です。
詳しくは、機能ポリシーの記事を参照してください。
ヘッダー種別 | レスポンスヘッダー |
---|---|
禁止ヘッダー名 | はい |
構文
Feature-Policy: <directive> <allowlist>
<directive>
allowlist
に適用される機能ポリシーディレクティブです。許可されているディレクティブ名の一覧は、以下のディレクティブを参照してください。<allowlist>
許可リストは、以下のうち一つ以上を取るオリジンの空白区切りのリストです。
*
: この機能はこの文書と、含まれるすべての閲覧コンテキスト (iframe) でオリジンに関係なく許可されます。'self'
: この機能はこの文書と、含まれるすべての閲覧コンテキスト (iframe) のうち、同じオリジンのものに許可されます。'src'
: (iframe の allow 属性のみ) この iframe に読み込まれた文書が iframe の src 属性の URL と同じオリジンから来ている限り、この機能はこの iframe で許可されます。'none'
: この機能は最上位および含まれる閲覧コンテキストで無効になります。- <origin(s)>: この機能は特定のオリジン (例えば、 https://example.com) で許可されます。オリジンは空白で区切ってください。
*
の値 (すべてのオリジンで有効) または'none'
(すべてのオリジンで無効) は単独でのみ使用できますが、'self'
と'src'
は一つ以上のオリジンと一緒に使用することができます。機能はそれぞれ、既定の許可リストを持つよう定義されています。
*
: この機能は既定で、最上位の閲覧コンテキストとそれに含まれるすべての閲覧コンテキスト (iframe) で許可されます。'self'
: この機能は既定で、最上位の閲覧コンテキストとそれに含まれるすべての閲覧コンテキスト (iframe) のうち、同じオリジンにあるもので許可されます。この機能は、含まれる閲覧コンテキストにある別なオリジンの文書では許可されません。'none'
: この機能は最上位および含まれる閲覧コンテキストで無効になります。
ディレクティブ
- accelerometer (en-US)
- 現在の文書が、端末の加速度に関する情報を、
Accelerometer
(en-US) インターフェイスを通じて収集することを許可するかどうかを制御します。 - ambient-light-sensor (en-US)
- 現在の文書が、端末の周囲の環境における光量についての情報を、
AmbientLightSensor
(en-US) インターフェイスを通じて収集することを許可するかどうかを制御します。 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 (en-US)
- 現在の文書が
getDisplayMedia()
(en-US) メソッドを使用して画面の内容をキャプチャすることを許可するかどうかを制御します。このポリシーが無効であれば、表示内容をキャプチャする許可がない場合、getDisplayMedia()
から返却されるプロミスがNotAllowedError
で拒否されます。 - document-domain (en-US)
- 現在の文書が
document.domain
を設定することを許可するかどうかを制御します。このポリシーが無効な場合、document.domain
を設定しようとすると失敗し、SecurityError
のDOMException
が発生します。 encrypted-media
- 現在の文書が Encrypted Media Extensions (en-US) API (EME) を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMediaKeySystemAccess()
(en-US) から返却されたPromise
がDOMException
で拒否されます。 execution-while-not-rendered
- 表示されないフレーム内 (例えば iframe が
hidden
またはdisplay: none
の場合) でタスクを実行するかどうかを制御します。 execution-while-out-of-viewport
- ビューポートの見える範囲外にあるフレーム内のタスクを実行するかどうかを制御します。
fullscreen
- 現在の文書が
Element.requestFullScreen()
を使用することを許可するかどうかを制御します。このポリシーが無効であれば、返却されたPromise
がTypeError
で拒否されます。 geolocation
- 現在の文書が
Geolocation
インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、getCurrentPosition()
およびwatchPosition()
を呼び出すと、関数のコールバックが呼び出され、PositionError
コードがPERMISSION_DENIED
になります。 - gyroscope (en-US)
- 現在の文書が
Gyroscope
(en-US) インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 - layout-animations (en-US)
- 現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。
- legacy-image-formats (en-US)
- 現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。
- magnetometer (en-US)
- 現在の文書が
Magnetometer
(en-US) インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。 microphone
- 現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
MediaDevices.getUserMedia()
で返却されたPromise
がNotAllowedError
で拒否されます。 midi
- 現在の文書が Web MIDI API を使用することを許可するかどうかを制御します。このポリシーが無効であれば、
Navigator.requestMIDIAccess()
から返却されたPromise
がDOMException
で拒否されます。 navigation-override
- ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。
- oversized-images (en-US)
- 現在の文書が大きな画像をダウンロードして表示することを許可するかどうかを制御します。
payment
- 現在の文書が Payment Request API (en-US) を使用することを許可するかどうかを制御します。このポリシーが有効であれば、
PaymentRequest()
(en-US) コンストラクターでSecurityError
のDOMException
が発生します。 - picture-in-picture (en-US)
- 現在の文書が、該当する API を使用して Picture-in-Picture モードで動画を再生することを許可するかどうかを制御します。
- publickey-credentials-get (en-US)
- 現在の文書が Web Authentication API を使用して、すでに保存されている公開鍵認証情報を再取得することを許可するかどうかを制御します (例:
navigator.credentials.get({publicKey: ..., ...})
(en-US))。 - sync-xhr (en-US)
- 現在の文書が同期
XMLHttpRequest
リクエストを行うことを許可するかどうかを制御します。 - usb (en-US)
- 現在の文書が WebUSB API を使用することを許可するかどうかを制御します。
vr
- 現在の文書が WebVR API の使用を許可されているかどうかを制御します。このポリシーが無効になっている場合、
Navigator.getVRDisplays()
が返すPromise
はDOMException
で拒否されます。 WebVR 標準は WebXR に置き換えられつつあることに留意してください。 - wake-lock (en-US)
- 現在の文書が Wake Lock API を使用して、端末が省電力モードに入らないことを示すことを許可するかどうかを制御します。
- screen-wake-lock (en-US)
- 現在の文書が Screen Wake Lock API (en-US) を使用して、端末が画面をオフにしたり暗くしたりしてはいけないことを示すことを許可するかどうかを制御します。
- web-share (en-US)
- 現在の文書が Web Share API の
Navigator.share()
を使用して、テキスト、リンク、画像、その他のコンテンツをモバイルアプリなどのユーザーが任意に選択した任意の場所に共有することを許可するかどうかを制御します。 - xr-spatial-tracking (en-US)
- 現在の文書が WebXR Device API を使用して WebXR セッションと対話することを許可するかどうかを制御します。
例
SecureCorp Inc. が、アプリケーションでマイクと Geolocation API を無効にしたがっているとします。以下の機能ポリシーを設定する HTTP レスポンスヘッダーを配信することで実現できます。
Feature-Policy: microphone 'none'; geolocation 'none'
オリジンのリストに 'none'
キーワードを指定すると、指定された機能がオリジンに関係なく、すべての閲覧コンテキスト (iframe を含む) で無効になります。
仕様書
ブラウザーの互換性
BCD tables only load in the browser