什么是 HTTP 安全头?
HTTP 安全头是 Web 服务器发送给浏览器的特殊 HTTP 响应头。它们指示浏览器如何保护用户免受跨站脚本 (XSS)、点击劫持和中间人攻击等常见 Web 攻击。
正确配置安全头是一种成本效益高的措施,可以用相对较少的工作量显著提高网站的安全性。IP 确认的安全评分功能可以让你检查所连接网站的安全头配置。
1. Content-Security-Policy (CSP)
CSP 是现代 Web 安全中最重要的头之一。它严格限制网页可以从哪些来源加载脚本、样式表和图片等资源。
CSP 防御的攻击
- 跨站脚本 (XSS):阻止恶意脚本的执行
- 数据注入攻击:阻止加载未授权的资源
- 点击劫持:通过 frame 和 iframe 控制提供防御
CSP 的运用
CSP 允许你按资源类型指定允许的来源。例如,你可以只允许来自自己网站的脚本,同时允许来自自己网站和 Google Fonts 的样式表。
使用 nonce (一次性令牌) 或 hash,你还可以安全地允许内联脚本。IP 确认在每个页面上都应用了带有 nonce 属性的 CSP。
2. Strict-Transport-Security (HSTS)
HSTS 防御的攻击
- SSL 剥离攻击:利用 HTTP 到 HTTPS 重定向的中间人攻击
- 协议降级攻击:试图强制使用未加密的 HTTP 连接
HSTS 的工作原理
浏览器收到 HSTS 头后,会在指定的持续时间 (max-age) 内自动将对该域名的所有访问转换为 HTTPS。添加 includeSubDomains 指令可将此扩展到子域名,通过 preload 指令注册到 HSTS 预加载列表可以从首次访问就强制使用 HTTPS。
3. X-Frame-Options
此头控制网页是否可以嵌入到 <iframe> 或 <frame> 中。其主要目的是防御点击劫持,一种覆盖透明 iframe 来诱骗用户执行非预期操作的攻击。
DENY:禁止所有嵌入SAMEORIGIN:仅允许同源嵌入
虽然 CSP 的 frame-ancestors 指令现在被推荐为更灵活的替代方案,但为了兼容旧版浏览器,建议同时设置 X-Frame-Options。
4. X-Content-Type-Options
此头阻止浏览器执行 MIME 类型嗅探,即忽略 Content-Type 头并猜测内容类型的行为。
- MIME 类型混淆攻击:防止诱骗浏览器将文本文件作为脚本执行的攻击
- 路过式下载:防止将恶意文件伪装成安全文件的攻击
唯一有效的值是 nosniff。这强制浏览器严格遵守 Content-Type 头中声明的 MIME 类型。
5. Referrer-Policy
此头控制页面导航时 Referer 头中包含多少信息。它防止嵌入在 URL 中的会话 ID 和搜索查询等敏感数据泄漏到外部网站。
no-referrer:完全不发送 Referer 头strict-origin-when-cross-origin:同源请求发送完整 URL,跨域请求仅发送源 (推荐)same-origin:仅对同源请求发送 Referer
如何检查安全头
- 使用 IP 确认的安全评分一目了然地查看关键安全头的状态
- 在浏览器开发者工具 (F12) 的 Network 标签中直接检查响应头
- 从命令行运行
curl -I https://example.com
总结
HTTP 安全头是从底层抬升网站安全水平的基础而强大的措施。其中 CSP 与 HSTS 在现代 Web 安全中堪称不可或缺。建议网站运营者妥善配置这些头,而作为用户,则可以用 IP 确认定期检查所访问网站的安全性。
在安全头之外,若能理解HTTPS/TLS 的机制,就能更深入地把握 Web 通信的安全性。Cookie 追踪的对策与浏览器指纹的防范,也是浏览器安全的重要一环。
相关术语
常见问题
不设置安全响应头会怎样?
网站会容易受到 XSS (跨站脚本)、点击劫持、MIME 类型嗅探等攻击。设置恰当的安全响应头,可以让浏览器在自身层面防御这些攻击。
至少应该设置哪些安全响应头?
至少应设置 Content-Security-Policy (CSP)、X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security (HSTS) 这 4 项。仅凭它们就能防御大部分主要的 Web 攻击。