跳过内容

C8:利用浏览器安全功能

描述

浏览器是大多数用户访问网络的门户。因此,采用强大的安全措施来保护用户免受各种威胁至关重要。本节概述了可用于增强浏览器安全的技术和策略。

虽然我们目前专注于传统网络浏览器,但请注意,还有各种各样的其他客户端程序,从移动应用、API客户端到智能电视。我们建议您验证您的客户端支持哪些客户端安全功能,并使用相应的HTTP头进行配置。

机会性安全与浏览器支持

指示网络浏览器强制执行安全措施总是机会性的:Web应用程序无法验证浏览器是否遵守了给定的指导,因此这些安全措施应始终被视为额外的(和可选的)强化措施,以进一步增加攻击者的难度。

此外,网络浏览器必须实际支持Web应用程序提供的安全指导。不同浏览器及其版本之间的支持程度各不相同。可以使用https://caniuse.cn等网站来检查哪些网络浏览器(版本)支持哪些功能。支持的安全功能会随着时间而变化,例如,X-XSS-Protection头已从所有主流浏览器中移除;浏览器的默认行为会随着时间而变化,例如Referrer-Policy;甚至现有头的语义也会随着时间而变化,例如X-Content-Type-Options。

虽然不断变化的浏览器功能集可能会带来问题,但通常较新的浏览器会提供更多的安全功能。它们有时甚至默认启用这些功能。明确设置这些安全头可以统一不同浏览器的行为,从而减少维护工作。

一个完全被攻陷的浏览器可能不会遵守安全指导,但如果攻击者能够完全控制一个浏览器,他们已经拥有比仅仅忽略安全指导更具破坏性的攻击途径。

威胁

  • 攻击者可能通过利用不完善的Content Security Policy(内容安全策略)设置来执行跨站脚本(XSS)攻击,从而可能将恶意脚本注入到网页中。
  • 攻击者可能通过利用缺失的X-Frame-Options头执行点击劫持攻击,从而可能诱骗用户与伪装的网页元素进行非预期交互。
  • 当未正确设置Referrer-Policy时,攻击者可能通过Referer HTTP头收集敏感信息,从而可能暴露私人数据或用户活动。
  • 在缺少X-Content-Type-Options头的情况下,攻击者可能利用MIME类型混淆漏洞,从而可能执行伪装成良性文件类型的恶意脚本。
  • 攻击者可能通过利用不安全的Cookie设置劫持用户会话,从而可能未经授权访问用户账户。
  • 在缺少适当的DNS pinning(DNS绑定)的情况下,攻击者可能执行DNS重绑定攻击,从而可能绕过同源策略限制。
  • 攻击者可能利用跨域资源共享(CORS)配置错误来获取资源的未授权访问,从而可能损害数据的机密性和完整性。

实施

通常,Web应用程序可以通过两种(特定于安全头)方式来指导Web浏览器有关安全事项:HTTP头和HTML标签。

如果安全指令被多次给定,其行为是特定于安全头的。例如,重复的X-Frame-Options头将禁用其保护,而重复的Content-Security-Policy头将导致更严格的策略,从而加强其安全性。以下是潜在强化机制的非穷尽列表

配置浏览器以防止信息泄露

如果浏览器通过未加密通道(HTTP而非HTTPS)传输信息,或者一开始就发送了过多的信息(例如,通过Referer-Header),就会发生信息泄露。以下机制可降低信息泄露的可能性

  • HTTP严格传输安全(HSTS): 确保浏览器仅通过HTTPS连接到您的网站,防止SSL剥离攻击。
  • 内容安全策略(CSP): CSP策略可以指示浏览器自动将HTTP连接升级到HTTPS。此外,诸如'form-src'之类的指令可用于防止表单将数据传输到外部站点。
  • Referrer-Policy: 在页面之间导航时,浏览器的HTTP请求会在传出请求中包含当前URL。此URL可能包含敏感信息。使用Referrer-Policy,网站可以统一浏览器的行为,并选择应在网站之间传输哪些信息。
  • Cookie的secure标志:虽然它不是HTTP头,但此安全标志与信息泄露相关。如果设置,网络浏览器将不会通过未加密的HTTP传输发送cookie。

降低XSS的潜在影响

基于JavaScript的XSS攻击几十年来一直非常普遍。为了降低漏洞的潜在影响,浏览器提供了丰富的防御机制,这些机制应能降低XSS攻击的潜在影响

  • 内容安全策略(CSP): CSP是一个强大的工具,有助于防止包括跨站脚本(XSS)和数据注入在内的各种攻击。严格的CSP策略可以有效地禁用内联JavaScript和样式,使攻击者更难注入恶意内容。
    主机允许列表CSP: 阻止所有第三方JavaScript可以显著减少攻击面,并防止第三方库中的漏洞被利用。
    严格CSP: 在'script-src'指令中使用nonces或hashes的CSP(通常称为“严格CSP”)为XSS漏洞提供了强大的缓解措施。可选地,使用CSP的'strict-dynamic'关键字有助于简化严格CSP的实施,并在需要时确保与第三方JavaScript库的兼容性。Trusted Types:这是一个浏览器API,通过确保只有安全的数据类型才能插入到DOM中,有助于防止基于DOM的跨站脚本漏洞。
  • Cookie的httpOnly标志:虽然它不是HTTP头,但设置此标志可以防止JavaScript访问此cookie,尤其应为会话cookie设置此标志。

防止点击劫持

点击劫持,也称为UI修饰攻击,试图通过将恶意网站叠加在良性网站之上来迷惑用户。用户以为自己正在与良性网站互动,而实际上却是在与恶意网站互动。

  • X-Frame-Options (XFO): 通过确保您的内容不被嵌入其他站点,防止点击劫持攻击。此头使用起来很棘手,例如,当使用两次时它会被禁用。
  • 内容安全策略(CSP): 不同的frame-*指令允许对哪些站点可以包含当前网站以及当前网站内可以包含哪些其他站点进行细粒度控制。

控制浏览器的进阶能力

现代浏览器不仅显示HTML代码,还用于与多个系统组件(如网络摄像头、麦克风、USB设备等)进行交互。虽然许多网站不使用这些功能,但攻击者可以滥用它们。

  • 权限策略: 通过权限策略,网站可以指示浏览器该网站将不使用已定义的功能。例如,网站可以声明它永远不会捕获用户音频。即使攻击者能够注入恶意代码,他们也无法指示网络浏览器捕获音频。

防止CSRF攻击

CSRF攻击利用了Web浏览器和网站之间现有的信任关系。

  • 同源Cookie: 将Cookie标记为SameSite可以减轻跨源信息泄露的风险,并为跨站请求伪造攻击提供一些保护。
  • Fetch元数据请求头: 在服务器端检查Fetch Metadata请求头允许部署强大的纵深防御机制——资源隔离策略——以保护您的应用程序免受常见的跨源攻击,如CSRF。

防止的漏洞

实施这些浏览器防御措施有助于缓解一系列漏洞,包括但不限于

  • 跨站脚本 (XSS)
  • 跨站请求伪造 (CSRF)
  • 点击劫持
  • 通过不安全传输进行数据盗窃
  • 会话劫持
  • 滥用非预期的浏览器硬件访问(麦克风、摄像头等)

工具

参考资料