跳过内容

C8:利用浏览器安全功能

描述

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

虽然我们目前关注传统网络浏览器,但请注意,存在着多样化的其他客户端程序,从移动应用、API 客户端到智能电视。我们鼓励您验证您的客户端支持哪些客户端安全功能,并使用相应的 HTTP 头来配置它们。

机会性安全和浏览器支持

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

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

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

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

威胁

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

实施

通常,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' 指令中利用 nonce 或哈希(通常称为“严格 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-* 指令允许细粒度地控制哪些站点可以包含当前网站,以及当前网站内可以包含哪些其他站点。

控制浏览器的S高级功能

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

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

防止 CSRF 攻击

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

  • 同源 Cookie:将 Cookie 标记为 SameSite 可以降低跨源信息泄露的风险,并为跨站请求伪造攻击提供一些保护。
  • Fetch Metadata 请求头部:在服务器端检查 Fetch Metadata 请求头部可以部署强大的深度防御机制——资源隔离策略(Resource Isolation Policy)——以保护您的应用程序免受 CSRF 等常见跨源攻击。

防止的漏洞

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

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

工具

参考资料