跳到正文
>_ITDITDWeb 安全平台

安全指南

如何选择安全响应头:哪些仍然需要、哪些已过时、哪些反而有害

网上的安全响应头清单大多已经停止更新,仍在推荐已经被淘汰的响应头。MDN 把 X-XSS-Protection 标为已废弃、非标准,并警告它可能在原本安全的网站上制造 XSS 漏洞。本文说明今天该设置哪些响应头、该删掉哪些。

发布于 2026-09-05 更新于 2026-10-04 最后核实 2026-09-05 3 分钟阅读

响应头的配置示例随处可见。问题在于大多数已经停止更新了。照抄几年前正确的清单,就会带进一些已经失去作用的响应头——还有一个可能反而有害的。

① 今天值得设置的6个

我们的安全响应头检测工具按这6个评估。已废弃的响应头被有意排除在外。

这6个响应头,各自负责什么
Content-Security-Policy
声明脚本和资源可以从哪里加载。是缩小 XSS 能做的事的核心控制。它的 frame-ancestors 也管理嵌入
Strict-Transport-Security
告诉浏览器以后一律用 HTTPS 访问,堵住第一次的明文请求(max-age 加 includeSubDomains)
X-Frame-Options
拒绝被其他网站嵌入框架——防御点击劫持。实际中与 CSP 的 frame-ancestors 一起设置
X-Content-Type-Options
nosniff。阻止浏览器根据内容猜测类型,减少上传的文件被当作不该是的东西来解析的事故
Referrer-Policy
限制向外传递的来源页信息,减少URL 中所含内容的泄露(前提是你本来就不把机密放进 URL)
Permissions-Policy
默认禁用浏览器功能——摄像头、麦克风、地理位置。不用的就关掉

顺序很重要:先加不会弄坏东西的

X-Content-Type-Options、X-Frame-Options、Referrer-Policy 和 Permissions-Policy 可靠且不容易影响页面显示,可以先加。Strict-Transport-Security 要等所有路径都能正常使用 HTTPS 后再加——浏览器会记住它,要撤回很麻烦。

CSP 最后加,并且要逐步引入。它影响的功能最多,一步到位地收紧会弄坏正常功能。请用 CSP 生成器逐步搭建。

② 已经失去作用的

Expect-CT:自2021年6月起基本已过时

MDN 把这个响应头标为 Deprecated,并说明只有 Google Chrome 和其他基于 Chromium 的浏览器实现过它,而 Chromium 从107版起废弃了这个响应头,因为 Chromium 现在默认强制执行 CT。同一页面的注释还写道:“Expect-CT 自2021年6月起基本已过时”。

也就是说,浏览器已经默认这样做了,网站不再需要发出指示。没有理由在新项目中加上它。

③ 现在反而可能有害的

X-XSS-Protection:已废弃、非标准,还可能制造 XSS

MDN 在这个响应头上同时标有 Deprecated 和 Non-standard,并附有警告:“虽然这个功能能保护不支持 CSP 的旧浏览器用户,但在某些情况下,X-XSS-Protection 可能在原本安全的网站上制造 XSS 漏洞。”

它的建议毫不含糊:“建议使用 Content-Security-Policy 代替 XSS 过滤。”

这是反驳“响应头越多越好”的决定性例子。出于好意加上的设置,在特定条件下可能变成攻击面。没在发送就不要加;已经在发送就计划删掉。底层缺陷见什么是 XSS。

过时清单的样子

CSP、HSTS、X-Frame-Options、nosniff——再加上
X-XSS-Protection: 1; mode=block
Expect-CT: max-age=…
Public-Key-Pins: …

清单更长,有些检测工具甚至可能给出更高的分数。但对当前的浏览器来说,多出来的这些项要么不起作用,要么可能有害。

现在的做法

以 CSP 为中心,其他5个作为辅助。

已废弃的响应头不加,已有的就删掉。把精力花在 CSP 的质量上——具体说就是去掉了多少 'unsafe-inline'——比把清单加长带来的实际防御要多得多。

前提:响应头修不好漏洞本身

应用的缺陷(XSS、缺少授权检查、上传)

加多少响应头都消除不了这些

↓ 一旦发生

响应头管的是

数据能发往哪里 · 页面能否被嵌入 · 是否允许明文 = 限制扩散

响应头不会改变漏洞是否存在。它们改变的是一旦有漏洞,损害能扩散到多远。

给有 XSS 缺陷的网站加上 CSP,并不会消除 XSS;只是缩小了能利用它做的事。所以顺序是:先修好应用的缺陷,再把响应头作为又一道防线叠加上去。反过来也成立——响应头拿满分,并不能证明网站是安全的。

检查自己的网站

1

测量实际返回的内容

看响应,而不是配置文件。反向代理、CDN、框架和应用本身都会添加或覆盖响应头,所以配置的和实际发出的并不总是一样。我们的响应头检测工具可以直接测量一个 URL。

2

在结果中查找已废弃的响应头

如果返回了 X-XSS-Protection 或 Expect-CT,计划把它们删掉。尤其是前者——如上所述,文档写明它可能制造漏洞。

3

加上不会弄坏东西的4个

X-Content-Type-Options: nosniff、X-Frame-Options: DENY、Referrer-Policy: strict-origin-when-cross-origin,以及关闭不用功能的 Permissions-Policy。可靠,且不容易影响页面显示。

4

等 HTTPS 完全正常后再加 HSTS

Strict-Transport-Security 会被浏览器记住,在 HTTPS 还不稳定时启用,恢复起来会很麻烦。先确认所有路径都能提供 HTTPS。证书的基础知识见什么是 Let's Encrypt。

5

逐步引入 CSP 并收紧

先宽松再收紧,以去掉 'unsafe-inline' 为目标——能做到什么程度,很大程度上决定了 CSP 的保护效果。用 CSP 生成器来搭建,顺便对照安全基线检查清单检查其他项目。

本站的看法:照抄的配置,来源有多旧就决定了有多安全

安全响应头是最典型的复制粘贴式配置,正因如此,来源有多旧决定了结果有多安全。本文提到的两个响应头都曾经是正确的。X-XSS-Protection 更进一步:当年的推荐,成了今天的警告。

我们的立场是把响应头配置当作需要不时回头检查的设置,而不是做一次就完成的任务——也不要以检测工具的分数为目标,因为加上已废弃的响应头也可能让分数上升。把时间花在 CSP 的质量上,而不是清单的长度上。

出处(一手资料)

  • MDN Web Docs「X-XSS-Protection」— developer.mozilla.org(Deprecated 和 Non-standard 标记、可能在原本安全的网站上制造 XSS 漏洞的警告、以及改用 CSP 的建议)
  • MDN Web Docs「Expect-CT」— developer.mozilla.org(Deprecated 标记、Chromium 107 废弃它及其理由、自2021年6月起基本已过时的注释)

两者均于2026年9月5日确认。

接下来阅读

FAQ

Q应该设置 X-XSS-Protection 吗?
A

不应该。MDN 把这个响应头同时标为 Deprecated(已废弃)和 Non-standard(非标准),并警告:虽然它能保护不支持 CSP 的旧浏览器用户,但在某些情况下,X-XSS-Protection 可能在原本安全的网站上制造 XSS 漏洞。它的建议很明确:用 Content-Security-Policy 代替 XSS 过滤。没在发送就不要加;已经在发送就计划删掉。

QExpect-CT 还需要吗?
A

不需要。MDN 把它标为 Deprecated,并说明只有 Google Chrome 和其他基于 Chromium 的浏览器实现过它,而 Chromium 从107版起废弃了这个响应头,因为 Chromium 现在默认强制执行证书透明度(Certificate Transparency)。同一页面的注释写明,这个响应头自2021年6月起基本已过时。没有理由在新项目中加上它。

Q那应该设置哪些?
A

我们的响应头检测工具所评估的6个是实用的起点:Content-Security-Policy、Strict-Transport-Security、X-Frame-Options、X-Content-Type-Options、Referrer-Policy 和 Permissions-Policy。已废弃的响应头被有意排除在外。顺序上,先加可靠、不容易弄坏东西的(nosniff、X-Frame-Options),CSP 影响的功能最多,要逐步引入。

Q所有响应头都设置了,网站就安全了吗?
A

不是。响应头修不好应用里的漏洞,它们限制的是损害扩散的范围。给有 XSS 缺陷的网站加上 CSP,并不会消除 XSS——只是缩小了能利用它做的事。先修好应用的缺陷,再把响应头作为又一道防线叠加上去。反过来也一样:响应头检测拿满分,并不能证明网站是安全的。