Permissions-Policyとは
Permissions-Policyは、カメラ、マイク、位置情報、決済などのブラウザ機能を、そのページと、ページに埋め込まれたiframeで使ってよいかを制限するHTTPヘッダーです。以前は Feature-Policy という名前でした。
Permissions-Policyが必要な理由
広告、チャット、地図などの外部コンテンツは、iframeでページに入り込みます。外部の事業者の側で問題が起きたり、読み込んでいる外部スクリプトが書き換えられたりすると、サイトの訪問者に、使う予定のないカメラや位置情報の許可を求める画面が出る可能性があります。
サイトで使わない機能を無効にしておけば、そのような悪用の入口を減らせます。許可の確認は訪問者の操作が必要なため、ほかのヘッダーに比べて優先度は高くありませんが、設定の手間は小さな対策です。
Permissions-Policyの仕組み
書式は「機能名=許可する範囲」で、複数はカンマで区切ります。
| 書き方 | 意味 |
|---|---|
camera=() | 自サイトも含め、すべて禁止 |
geolocation=(self) | 自サイトだけ許可 |
geolocation=(self "https://maps.example.com") | 自サイトと指定したオリジンだけ許可 |
fullscreen=* | すべてのオリジンに許可 |
iframeの allow 属性は、ヘッダーで許した範囲の中で、個別の埋め込みに機能を渡す設定です。ヘッダーで禁止した機能は、allow 属性があっても使えません。
Permissions-Policyの確認方法
開発者ツールの「ネットワーク」タブでレスポンスヘッダーを見るか、次のコマンドを実行します。
curl -s -D - -o /dev/null https://example.com/ | grep -i '^permissions-policy'
機能名の綴りを間違えると、ブラウザは無視します。開発者ツールの「コンソール」に、認識できない機能名の警告が出ていないかも見ます。
Permissions-Policyの設定例
サイトで使っていない機能を、まとめて禁止する例です。
Apache(.htaccess)の例です。
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
nginxの例です。
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;
WordPress(子テーマのfunctions.php)の例です。
add_action('send_headers', function () {
header('Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()');
});
よくある間違いと注意点
- 旧
Feature-Policyの書き方(camera 'none')は、書式が違います。新しいヘッダーに旧書式を書いても、解釈されません。 - 店舗検索で現在地を使う、動画会議を埋め込むなど、機能を使うページでは、
geolocation=()のように禁止すると、機能が動かなくなります。使う機能は(self)で残します。 - ブラウザによって、対応する機能名が異なります。対応していない機能名は、エラーにならず、単に無視されます。
- 許可を広げる方向(
*)の指定は、必要な機能だけに留めます。
Webサイト セキュリティチェッカーで確認する
Webサイト セキュリティチェッカーは、Permissions-Policyのヘッダーが返っているかを診断します。深刻度が低い項目として扱うため、ほかの指摘の対応を終えてから取りかかれます。
関連用語
関連する用語
サイトの設定を無料で確認する
サイトのURLを入力するだけで、Permissions-Policy などの設定状況を診断できます。Webサイト セキュリティチェッカー「Security Checker X」は、登録なしで使えます。









