所有文章

实用指南

1 分钟阅读

HTTP 安全响应头:CSP、HSTS 与检查方法

CSP、HSTS、X-Frame-Options 和 Referrer-Policy 的简明英语指南 - 每个标头的作用以及如何通过快速扫描检查您的网站。

作者:Luca Deguin

带有连接到响应标头和防护罩的锁的浏览器窗口。

您部署了该应用程序。页面加载,表单工作,看起来没有任何问题。然后你运行一次扫描,它会返回一个关于以下内容的发现列表: 标头 --而且这些都不是显而易见的。

这是正常的第一反应。标题不会显示在屏幕上,因此很难判断它们是否重要,或者扫描仪是否只是在挑剔。本指南将介绍您最常看到的标题、每个标题以简单语言实际执行的操作,以及如何在无需猜测的情况下检查您的标题。

为什么即使您的网站看起来不错,标题也很重要

安全标头是服务器与页面一起发送到浏览器的指令。浏览器读取它们并调整其处理内容的方式:可以运行哪些脚本、页面是否可以通过普通 HTTP 加载、其他站点是否可以将其嵌入框架中。

页面上没有任何变化。这正是这些发现让人感觉抽象的原因 - 该网站可以看起来和表现得很完美,但缺少一组在出现问题时可能会产生影响的保护措施。

诚实的框架是这样的:标题降低了特定类别的风险。他们不会自行确保站点安全,并且干净的标头检查并不能证明站点完全安全。将它们视为多层中的一层,并且是最便宜的层之一。

安全标头实际上是什么

当浏览器请求页面时,您的服务器会响应该页面 和 称为响应标头的元数据块。您可以自己查看它们:打开浏览器的开发人员工具,转到“网络”选项卡,重新加载页面,然后单击顶部请求。标题就在那里。

安全标头只是告诉浏览器执行规则的标头。有些是严格的,有些是建议性的,所有这些都是在您的服务器配置、框架或托管平台中设置的 - 而不是在 HTML 中。

Content-Security-Policy (CSP)

CSP 告诉浏览器允许在您的页面上加载哪些内容源。它是这里最强大的标题,也是人们认为最令人生畏的标题。

在实践中,CSP 阐明了以下内容:脚本只能来自您自己的域和一个受信任的 CDN;图像可能来自 HTTPS 上的任何地方;该页面可能不会被其他网站框架。如果某些内容尝试从您不允许的源加载,浏览器会阻止它并在控制台中记录该尝试。

CSP 是针对脚本注入的额外防御,以及安全的输出编码和清理。如果您设置得太激进,它也是最有可能破坏某些内容的标头。对于初学者来说,实用的路径是从仅报告模式开始,观察哪些内容会被阻止,解决实际问题,然后强制执行。

Strict-Transport-Security (HSTS)

HSTS 告诉浏览器在规定的时间内仅通过 HTTPS 与您的站点进行通信。一旦浏览器看到此标头,它将拒绝与您的域建立不安全的 HTTP 连接 - 即使用户键入 http:// 或点击旧链接。

一旦浏览器知道了 HSTS 策略,它就会在发送 HTTP 请求之前升级它们。首次访问仍可以使用 HTTP,除非该域已被 HSTS 预加载条目覆盖。

这里要尊重的一件事是承诺。 HSTS 会被浏览器记住您指定的时间,因此在您确认每个子域都可以在 HTTPS 上正常工作时,先从较短的持续时间开始,然后在您有信心后将其延长。

X-Frame-Options

X-Frame-Options 控制其他站点是否可以在框架内加载您的页面 - 一个 <iframe> 在别人的页面上。

为什么要关心?因为框架是点击劫持背后的机制,攻击者用不可见或伪装的元素覆盖您的真实页面,以便用户点击他们无意的内容。如果您的应用程序有任何登录操作(删除按钮、付款、设置更改),则将其框架到其他地方是您不希望出现的风险。

常见的设置是 SAMEORIGIN,它允许您自己的页面相互构建,但阻止其他所有页面。如果你从来不想被陷害,那么这通常是正确的默认选择。

Referrer-Policy

Referrer-Policy 决定当用户单击远离您页面的链接时,您的 URL 与其他网站共享的程度。现代浏览器通常使用 strict-origin-when-cross-origin:​​可以在同源请求上发送完整的 URL,而跨源 HTTPS 请求仅接收源。明确的较弱政策可以披露更多信息。

这很重要,因为完整的 URL 有时会在查询字符串中包含敏感值 - 令牌、ID、电子邮件地址、搜索词。将它们泄露给第三方是很安静的,而且很容易被忽视。

合理的基线是在跨站点请求时仅发送源,或者根本不发送任何内容。它几乎不需要您花费任何成本,并且可以消除意外的数据泄漏。

其余实用设置

还有一些经常出现的标题,足以通过名称来了解:

  • X-Content-Type-Options: nosniff 阻止浏览器猜测文件的类型,否则可能会将上传的文件转换为可执行脚本。

  • Permissions-Policy 关闭您不使用的浏览器功能,例如摄像头、麦克风或地理位置。

  • Cross-Origin-Opener-Policy 和相关的跨域标头将您的页面与其他页面隔离,这有助于遏制某些攻击。

您不需要在第一天就需要所有这些。了解它们的作用可以帮助您阅读扫描报告而不会惊慌。

如何在几分钟内检查您的标题

您有两种查看方式。

一、手动路由:开发者工具,网络选项卡,点击页面请求,读取响应头。这对于确认单个标头是否存在并按您期望的方式设置非常有用。

其次,多页面的实用路线:运行扫描。扫描仪以浏览器的方式获取您的站点,并报告存在哪些安全标头、缺少哪些安全标头以及每个间隙暴露的内容。这为您提供了一个优先级列表,而不是一堵原始文本墙 - 并且它会检查您不会想到手动打开的页面。

像 VICE 的免费轻量级安全扫描这样的通用工具会将标头发现结果与其他问题一起标记,并提供每个问题背后的证据,以便您了解提出问题的原因。

修复它们,然后通过重新扫描进行验证

标头存在于配置中,因此大多数修复都很小:在服务器配置中添加一行,在框架中添加一个设置,或者在主机仪表板中添加一个选项。一次更改一个标题并确认该网站仍然有效。

然后重新扫描。这是人们跳过的步骤。编辑配置并不意味着现在每个页面上的标题都是正确的,并且在仪表板中将某些内容标记为已修复并不等同于确认它。只有对同一范围进行新的扫描才能告诉您更改实际上已生效。

从免费扫描开始,查看标题的实际用途,并一次修复最重要的发现。这是一个合理的第一遍--而且比希望默认值没问题要好得多。

开始检查
您网站的安全。

查找问题、准备修复并验证更改。
将您的结果放在一起以供下次部署使用。

+10,000 个已扫描网站
VICE 平台概述