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
現在の文書が、端末の加速度に関する情報を、 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 で拒否されます。
geolocation
現在の文書が Geolocation インターフェイスを使用することを許可するかどうかを制御します。このポリシーが無効であれば、 getCurrentPosition() および watchPosition() を呼び出すと、関数のコールバックが呼び出され、 PositionError コードが PERMISSION_DENIED になります。
gyroscope
現在の文書が Gyroscope インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。
layout-animations
現在の文書がレイアウトアニメーションを表示することを許可するかどうかを制御します。
legacy-image-formats
現在の文書が古い形式の画像を表示することを許可するかどうかを制御します。
magnetometer
現在の文書が Magnetometer インターフェイスを通じて、端末の方向に関する情報を収集することを許可するかどうかを制御します。
microphone
現在の文書がオーディオ入力端末を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 MediaDevices.getUserMedia() で返却された PromiseNotAllowedError で拒否されます。
midi
現在の文書が Web MIDI API を使用することを許可するかどうかを制御します。このポリシーが無効であれば、 Navigator.requestMIDIAccess() から返却された PromiseDOMException で拒否されます。
navigation-override
ページ作成者が 空間ナビゲーションの動作を制御したり、完全にキャンセルしたりすることができる仕組みの利用可能性を制御します。
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: ..., ...}))。
sync-xhr
現在の文書が同期 XMLHttpRequest リクエストを行うことを許可するかどうかを制御します。
usb
現在の文書が WebUSB API を使用することを許可するかどうかを制御します。
vr
現在の文書が WebVR API の使用を許可されているかどうかを制御します。このポリシーが無効になっている場合、 Navigator.getVRDisplays() が返す PromiseDOMException で拒否されます。 WebVR 標準は WebXR に置き換えられつつあることに留意してください。
wake-lock
現在の文書が Wake Lock 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 レスポンスヘッダーを配信することで実現できます。

Feature-Policy: microphone 'none'; geolocation 'none'

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

仕様書

仕様書
Permissions Policy

ブラウザーの互換性

BCD tables only load in the browser

関連情報