安全响应头检测工具

只需输入网站URL,即可检测HSTS、CSP、X-Frame-Options等主要安全响应头的配置情况,列出缺失或设置不当的项目,并提供改进建议。

诊断线上站点的安全标头

输入网址,服务器便会去取那个站点的响应标头,并判定 HSTS、CSP、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 与 Permissions-Policy 的配置状况。它把「缺失的」与「已设但偏弱的」分开列出,并逐项说明问题何在。

**这里值得记在心上的是:标头「有」与标头「有效」,本是两回事。** 譬如 HSTS 纵然设了,`max-age` 若太短,浏览器强制 HTTPS 的窗口便不够长,实际的保护也就薄了。本工具之所以把合格与警告分开,缘故正在于此。**另一点是:返回来的标头未必出自源站。** CDN 或反向代理可能在半途加上它们,若是如此,该去修改配置的地方也随之不同。诊断所呈现的是「由外看去的样子」,至于是哪一层加的,它无从告知。

使用方法

  1. 输入待查的网址 请给出以 `https://` 开头、外部可达的网址。
  2. 执行检查 **出于安全,私有 IP 地址之类外部无法抵达的目标会被拒绝。**
  3. 阅读判定 分合格、警告、不合格三档,警告意味着「有,但偏弱」。
  4. 照着说明去修正 每一项都附有问题所在的说明,可据以排定先后。

用好本工具的小技巧

  • 本工具在服务器端获取目标网站的URL,因此不受浏览器CORS限制,可以检测任意网站的响应头。
  • HSTS的max-age基本上设置得越长越安全,但如果计划调整证书运维方式,建议先用较短的值测试后再应用到生产环境。
  • 搭配姊妹工具CSP验证器使用,可对Content-Security-Policy的语法进行更详细的检测。
  • 本工具采用与robots.txt检测工具相同的「输入URL后由服务器端获取」机制,只要是无需认证的公开页面,任意网站都可作为检测对象。
  • 建议定期检测自己的网站,确认CDN或反向代理的配置变更是否在不知不觉中导致某些安全响应头丢失。

这些场景会用到

上线前做最后确认

就在发布之前,可从外部确认所期望的标头是否真的返回了。

借鉴他人站点的配置

**看看同类站点做到了哪一步,便有了衡量自家水准的尺子。**

比对改动前后

加上标头之后再查一次,确认它已然生效。

检视接手过来的站点

**它适合交接之后的盘点**,可列出所缺的项目。

安全标头的术语

HSTS
迫使访问走 HTTPS 而非 HTTP 的标头。**除非 `max-age` 有一年以上,保护的时长便不够。**
X-Content-Type-Options
设为 `nosniff` 可让浏览器不再由内容去猜 MIME 类型,从而避免文件被当作别的东西执行。
X-Frame-Options
拒绝让您的站点被嵌入框架的标头。**在较新的策略里,CSP 的 `frame-ancestors` 担起了同样的角色。**
Content-Security-Policy
限制可加载资源从何而来的机制,是防御 XSS 的中枢。
Referrer-Policy
决定访客转往别的站点时,交出多少来源网址的标头。
Permissions-Policy
控制哪些来源可使用摄像头、麦克风与位置等功能的标头。

常见问题

功能上提供相近的诊断,但Toolbase的检测工具可以用中文确认诊断结果与改进原因。详细的CSP语法检测则由姊妹工具CSP验证器负责。

可以使用,但由于HSTS仅对HTTPS连接有意义,仅使用HTTP的网站的HSTS项目将始终被诊断为不合格。请优先将整个网站迁移至HTTPS。

目前推荐使用Content-Security-Policy的frame-ancestors指令,但由于部分旧版浏览器不支持该指令,实务上通常建议同时设置两者以形成双重防护。

不会。对您输入的URL发起的请求仅在当次检测中进行,获取到的响应头信息不会被保存在服务器端。

不一定。尤其是Permissions-Policy属于非必需的附加防护层,根据网站性质的不同,其优先级也可能较低。建议优先改进HSTS、CSP、X-Frame-Options等影响较大的项目。
工具君

闲话 ― securityheaders.com与点击劫持防护的历史

通过HTTP响应头诊断安全设置的服务中,Scott Helme开发的securityheaders.com长期以来被视为事实标准。由于许多海外服务仅提供英文的诊断结果和改进说明,Toolbase作为该领域的替代方案,自行开发了这款可用中文一并确认诊断结果与改进原因的检测工具。

HSTS(HTTP Strict Transport Security)是IETF于2012年作为RFC 6797标准化的响应头。其诞生背景是2009年被实际演示的一种名为"SSL剥离(SSL Stripping)"的攻击手法:当用户省略输入https://时,浏览器会先以HTTP方式连接一瞬间,攻击者正是利用这一瞬间篡改通信内容。HSTS让浏览器记住"该域名必须始终以HTTPS方式访问",从而在首次访问之后防止降级攻击。

X-Frame-Options最初是微软于2009年为Internet Explorer 8引入的专有扩展响应头,后来被其他浏览器采纳并成为事实标准。当时受到关注的问题是"点击劫持"攻击,即将透明的iframe叠加在看似真实的按钮之上,使用户在不知情的情况下完成点击。如今业界正逐步转向更灵活的Content-Security-Policy中的frame-ancestors指令,但为了兼容不支持该指令的旧版浏览器,同时设置两者仍是目前推荐的做法。