当前位置: 首页 > news >正文

Web 安全之 Permissions Policy(权限策略)详解

什么是 Permissions Policy(权限策略)?

Permissions Policy 为 web 开发人员提供了明确声明哪些功能可以在网站上使用,哪些功能不能在网站上使用的机制。可以设置一组策略,用于限制站点代码可以访问的 API 或者修改浏览器对某些特性的默认行为。设置 Permissions-Policy 可以在代码库不断演进的同时强制执行最佳实践,同时更安全地组合第三方内容。

Permissions Policy 类似于 Content Security Policy(CSP 内容安全策略),但控制的是功能特性,而不是安全行为。

Permissions Policy 以前被称为 Feature Policy,名称已更改了,HTTP header 的语法也随着更改了,所以如果以前使用了 Feature Policy,需要检查下浏览器的支持情况,<iframe allow="…"> 语法保持不变。

Permissions Policy 用途

首先看几个可以使用 Permissions Policy 的场景:

  • 开发者可以限制或禁止对某些敏感 API 的使用,如摄像头、麦克风、地理位置等,有助于保护用户的隐私,防止恶意网站滥用这些 API 收集用户的个人信息。
  • 可以限制对某些功能强大但存在潜在风险的 API 的访问权限,如iframe、Service Worker、Notification等,可以减少恶意攻击和跨站点脚本等网络安全威胁。
  • 可以用于改善用户体验,例如通过禁用一些音视频自动播放或弹出式广告等,减少对用户的干扰。
  • 可以提高程序的性能,例如项目在窗口中不可见后,停止相关的脚本执行。

如何设置 Permissions Policy

有两种方式来指定 Permissions Policy:

  • 通过在 HTTP 响应头中添加 Permissions-Policy 字段来实现,可以指定一系列权限,每一个权限指定一个名称和相关策略。例如,要禁用Web API 的摄像头访问权限,添加如下 header 内容:
Permissions-Policy:camera=()
  • 通过 <iframe> 的 allow 属性,控制指定的 <iframe> 中的特性。例如允许 iframe 全屏:
<iframe src="https://example.com..." allow="fullscreen"></iframe>

常见的 Permissions Policy 权限

以下是常见的 Permissions Policy 示例:

  • accelerometer:控制加速计访问的权限。
  • autoplay:控制自动播放媒体资源的权限。
  • camera:控制摄像头访问的权限。
  • geolocation:控制地理位置访问的权限。
  • microphone:控制麦克风访问的权限。
  • notifications:控制通知访问的权限。
  • payment:控制支付访问的权限。
  • sync-xhr:控制同步XHR请求的权限。

Permissions Policy 最佳实践

以下是几点使用 Permissions-Policy 的最佳实践:

  • 只授权应用程序所需的最低权限,以避免潜在的风险。
  • 使用 Permissions-Policy 前,务必进行全面的功能性和兼容性测试,确保不会影响应用程序的正常功能。
  • 可以逐步引入和设置 Permissions-Policy,确保安全性的同时减少对现有应用程序的影响。

小结

Permissions Policy 是一种强大而灵活的 Web API 权限控制机制,提供了更精确控制浏览器权限的能力。通过合理设置 Permissions Policy,可以保护用户隐私、提高应用程序的安全性和提供出色的用户体验。关于 Permissions Policy 使用相关的更详细的信息可以参考如下资料:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Permissions_Policy

http://www.lryc.cn/news/163544.html

相关文章:

  • 【黄啊码】nginx如何设置php运行的
  • 无涯教程-JavaScript - ISPMT函数
  • LeetCode 面试题 03.05. 栈排序
  • 构建微服务项目时启动网关服务失败的解决方案
  • 零基础教程:使用yolov8训练无人机VisDrone数据集
  • 【Mysql专题】使用Mysql做排行榜,线上实例
  • matlab数据处理: cell table array+datetime
  • 如何应用运营商大数据精准营销?
  • AJAX学习笔记5同步与异步理解
  • 911面试
  • 【Java基础篇 | 面向对象】—— 继承
  • DELL precision上安装nvidia A4000驱动 cuda cudnn
  • 数据结构算法刷题(29)动态规划
  • W11下CMake MinGW配置OpenCV和Qt
  • 反转字符串 反转字符串 || 反转字符串 |||
  • XML解析 不允许有匹配 _[xX][mM][lL]_ 的处理指令目标
  • 【C++进阶(五)】STL大法--list模拟实现以及list和vector的对比
  • Docker安装RabbitMQ集群_亲测成功
  • 50道基础数据结构面试题
  • 【Linux基础】权限管理
  • C++初阶--类和对象(中)
  • 【MySQL系列】视图特性
  • 管理类联考——数学——汇总篇——知识点突破——应用题——最值问题
  • 学习SpringMvc第二战之【SpringMVC之综合案例】
  • 【算法日志】单调栈: 单调栈简介及其应用
  • VSCode自动分析代码的插件
  • 设计模式之外观模式
  • Web端测试和 App端测试有何不同?
  • 12.(Python数模)(相关性分析一)相关系数矩阵
  • 系统架构设计师(第二版)学习笔记----嵌入式系统及软件