无需登录 数据私有 本地保存

Feature Policy查询器 - 功能权限检测

14
0
0
0

Feature Policy 查询器

检测当前页面 Feature Policy / Permissions Policy 状态,查看浏览器功能权限配置

正在检测API可用性...

0

已允许

0

已拒绝

0

需授权

0

未知/不可用
全部 安全隐私 传感器 显示媒体 设备API 其他
按住Ctrl多选
测试iframe将显示在此处...
检测中...

正在检测功能权限...

没有匹配的功能

尝试调整搜索条件或分类过滤

常见问题与知识点

Feature Policy(现已演变为 Permissions Policy)是一个Web平台安全机制,允许开发者控制浏览器功能的可用性。通过它,网站可以限制或禁止特定API的使用,例如摄像头、麦克风、地理定位等。

它通过两种方式配置:

  • HTTP响应头Permissions-Policy: camera=(), geolocation=(self)
  • iframe allow属性<iframe allow="camera 'none'; geolocation 'self'">

这有助于增强安全性,防止第三方脚本或嵌入内容滥用敏感功能。

Feature Policy 是旧名称,Permissions Policy 是新规范名称。主要变化:

  • HTTP头从 Feature-Policy 改为 Permissions-Policy
  • 语法更加灵活,支持结构化配置
  • JavaScript API从 document.featurePolicy 演进为 document.permissionsPolicy

现代浏览器同时支持两者,但建议使用新的Permissions Policy规范。

在服务器响应中添加HTTP头:

# 禁止所有源使用摄像头和麦克风
Permissions-Policy: camera=(), microphone=()

# 仅允许同源使用地理定位
Permissions-Policy: geolocation=(self)

# 允许同源和特定域名使用全屏
Permissions-Policy: fullscreen=(self "https://trusted.example.com")

# 禁止所有功能(严格模式)
Permissions-Policy: accelerometer=(), camera=(), geolocation=(), microphone=(), payment=()

在Nginx中:add_header Permissions-Policy "camera=(), microphone=()";

"需授权"(prompt)状态表示该功能在策略层面被允许,但尚未获得用户的明确授权。这是正常的安全行为:

  • Feature Policy控制功能是否可用(门禁)
  • Permissions API控制用户是否已授权(钥匙)

即使Feature Policy允许使用摄像头,浏览器仍需要用户点击"允许"后才能实际访问。这种双层保护确保了用户隐私。

使用iframe的 allow 属性来精确控制嵌入内容的权限:

<!-- 禁止iframe使用摄像头和麦克风 -->
<iframe src="..." allow="camera 'none'; microphone 'none'"></iframe>

<!-- 允许iframe使用全屏和剪贴板 -->
<iframe src="..." allow="fullscreen 'self'; clipboard-read; clipboard-write"></iframe>

<!-- 使用通配符允许所有功能 -->
<iframe src="..." allow="*"></iframe>

注意:iframe的权限不能超过父页面的权限。如果父页面禁止了摄像头,iframe也无法使用。

绝大多数敏感功能必须在安全上下文(HTTPS或localhost)下才能使用:

  • 摄像头/麦克风:需要安全上下文
  • 地理定位:需要安全上下文(Chrome)
  • 剪贴板读写:需要安全上下文
  • 全屏API:需要用户手势 + 安全上下文推荐
  • Service Workers:需要安全上下文
  • 推送通知:需要安全上下文

在localhost开发环境中,浏览器通常将其视为安全上下文,方便本地调试。

两者都是Web安全机制,但关注点不同:

特性Feature PolicyCSP
控制对象浏览器功能API资源加载行为
示例摄像头、麦克风、全屏脚本、样式、图片来源
HTTP头Permissions-PolicyContent-Security-Policy
防护目标防止功能滥用防止XSS、数据注入

两者互补,建议同时配置以达到最佳安全效果。

在Chrome DevTools中可以通过以下方式调试:

  1. 打开Application面板 > 左侧选择Permissions Policy(较新版本)
  2. Network面板中查看响应头的Permissions-Policy
  3. Console中运行:document.featurePolicy.features() 查看可用功能列表
  4. 使用 document.featurePolicy.allowsFeature('camera') 检测特定功能

也可以在Console中查看被阻止的API调用警告信息。