首页/网络/协议速查/Permissions-Policy 功能开关
HTTP 头与缓存70 条

Permissions-Policy 功能开关

限制页面可使用哪些浏览器能力(摄像头、麦克风、地理位置等),并控制 iframe 的委派。

协议速查网络更新于 2026-10-13

Permissions-Policy 是什么

Permissions-Policy 是响应头,用于按源收紧浏览器能力:摄像头、麦克风、地理位置、全屏、支付等。它是旧 Feature-Policy 的规范替代,语法由「能力名=(允许列表)」组成,空括号表示连本站也禁止;对嵌入的 iframe 还能通过 allow 属性逐项委派。浏览器默认策略本身已较严格,显式声明主要是为了挡住被注入的第三方脚本滥用设备能力。

基本信息

字段名Permissions-Policy
类型响应头(能力也可经 iframe 的 allow 属性委派)
规范W3C Permissions Policy,替代 Feature-Policy
语法feature=(allowlist),如 geolocation=() 全禁、geolocation=(self) 仅本站
生效范围当前文档及其派生的 iframe,受 allow 委派限制

典型使用场景

  • 上线前统一关闭站点用不到的高敏能力(摄像头、麦克风、定位),降低被注入脚本滥用的面
  • 给嵌入的第三方 iframe 划边界:只委派必须的能力,其余一律禁止
  • 排查「定位或摄像头 API 报错」:先分清是策略头禁止、iframe 未委派,还是用户拒绝授权
  • 多团队共用主域时,限制子路径页面可调用的浏览器 API,避免一处漏洞波及全站
  • 安全基线检查:把常用能力的白名单固化进发布模板,随应用一起上线

Nginx 统一收口

Nginx 统一收口
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;   # 默认全禁高敏能力
add_header Permissions-Policy "fullscreen=(self)" always;                          # 仅本站可用全屏
# iframe 侧委派:只把定位放行给内嵌地图服务
# <iframe src="https://map.example.com/" allow="geolocation"></iframe>

取值写法对照

写法含义注意点
camera=()禁止任何来源使用摄像头空括号连本站也不允许
geolocation=(self)只允许同源页面使用定位self 拼错等于全禁
payment=("https://pay.example.com")跨源委派给指定站点域名要带协议,否则不匹配
默认(不写该头)沿用浏览器默认策略并非全部放开,也并非全部禁止
浏览器对无法识别的能力名一律忽略,写错名字既不报错也不生效,看起来正常其实是空配置;上线后用开发者工具的应用面板核对当前文档最终生效的策略。
该头只能约束浏览器行为,挡不住服务端代理、爬虫和本地脚本;把它当作纵深防御的一层,不要当成访问控制手段。

易错点

  • 能力名写错会静默失效:浏览器忽略未知名称,页面表现正常,相关 API 实际仍可用
  • allowlist 写成裸域名(如 pay.example.com)导致不匹配,正确做法是带协议来源或使用 self
  • 只在部分 location 加 add_header:Nginx 中子级会覆盖父级的 add_header,未覆盖到的路径反而完全不设防
  • 误以为设了策略就不弹授权框:策略只是收紧上限,用户授权流程照常需要

数据来源与参考

  • W3C Permissions Policy
  • MDN Permissions-Policy

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌