跳转到内容

IIS/Nginx 安全响应头:HSTS、CSP 与真正重要的几个

核验于 1 分钟阅读

用 IIS/Nginx 加 HSTS、CSP、nosniff、frame 保护和 Referrer-Policy,测试它们,并避免复制 CSP 打挂应用。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
任务

先上很少打挂应用的:

Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: frame-ancestors 'self'

完整 CSP 要先盘点 script/style/frame。抄来的 CSP 会打挂应用,然后被删。

web.config:

<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="Referrer-Policy" value="strict-origin-when-cross-origin" />
<add name="Content-Security-Policy" value="frame-ancestors 'self'" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>

IIS 可能自动加 X-Powered-By;删掉。不要给 HTTP 响应加 HSTS;浏览器忽略,但说明配置错了。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "frame-ancestors 'self'" always;
server_tokens off;

always 让错误响应也带。

  • 主机所有名字都 HTTPS 正常后再加。
  • includeSubDomains 影响所有子域,确认。
  • 先用短 max-age 试点;加容易,回滚慢(浏览器缓存)。
  • 不懂移除流程不要加 preload。

先 report-only:

Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; report-uri /csp-report

再用 nonce/hash 处理内联脚本后强制。frame-ancestors 是现代替代 X-Frame-Options;旧客户端需要再留 XFO。

终端窗口
curl.exe -I https://lab.example/
curl.exe -I https://lab.example/assets/app.js

HTML、静态资源、错误页都查。只在 200 上加头是不完整的。

E1。实验室没有应用这些头或跑 CSP 报告收集器;片段是 Server 2025 上待验证起点。

来源