上周,安全研究员Scott Helme发布了一篇博客,第一次向全世界介绍了功能策略。功能策略是一个全新的安全标头,能够允许网站所有者启用和禁用某些web浏览器功能,并且不仅仅是他们自己的网页,而且还包括那些他们所嵌入的网页。
功能策略的工作原理是通过HTTP响应头提供。如同创建其他的标头一样,利用这种方法创建标头也十分简单,网站所有者只需确定他们想要限制的功能,然后再构建该策略就可以了。以下是Helme所列举的一个例子:
Feature-Policy: vibrate \”self\”; usermedia \”*\”; sync-xhr \”self\” example.com
在Helme的例子中,Vibrate功能伴随的是“self”,除了网站所有者自己的来源以外,其他所有的来源都会被禁用。同样地,sync-xhr功能也仅限于“自我”来源,而“usermedia”能够被所有来源所允许。
对于选择来源,网站所有者有三种选择:
- *——这一来源将允许当前的页面和所有嵌套的浏览器上下文使用该功能
- Self——这会限制当前的页面使用该功能,也包括其他所有嵌套的浏览上下文,前提是它们位于同一个来源上。
- 无——这会完全禁用当前页面和其他所有嵌套的浏览上下文使用该功能。
此外,使用功能策略还可以启用或禁用以下功能:
- 地理位置
- midi
- 通知
- 推送
- sync-xhr
- 麦克风
- 照相机
- agnetometer
- 陀螺仪
- 扬声器
- 振动
- 全屏
- 支付
这一列表随时都会变化,因此随着浏览器功能不断增多,你很有可能会看到它们被纳入其中。
对iFrames更多的精细控制
功能策略的一个好处是你可以使用它们来对诸如iFrames等的内容采取更多的控制。如果你愿意,你甚至可以应用一个完全不同的策略来启用特定iFrames上的功能。
例如,你可以在父级别上禁用某个功能,然后再在特定iFrames上启用它。Helme给了以下这个例子,它将会在站点级别禁用振动功能,然后仍旧会在特定iFrames上启用它:
到目前为止,功能策略已经获得了Chrome和Safari两大浏览器的支持。