加密与安全通信
安全头
约 5 分钟阅读
最后更新: 2026-02-25
什么是安全头
安全头 (Security Headers) 是 Web 服务器在 HTTP 响应中附加的头部,用于指示浏览器执行安全相关的行为。正确配置可以显著缓解 XSS、点击劫持和 MIME 嗅探等攻击。
安全头是一种"低成本、高回报"的措施 - - 无需修改应用代码,仅通过服务器或 CDN 配置即可启用。但错误的设置 (尤其是 CSP) 可能破坏网站功能,因此仔细测试至关重要。
主要安全头
- Content-Security-Policy (CSP):限制页面可加载资源 (脚本、样式、图片、字体等) 的来源。阻止内联脚本执行可大幅减少 XSS 攻击。最强大的头部,但配置复杂,现有网站引入需谨慎测试。
- Strict-Transport-Security (HSTS):强制浏览器始终对该域名使用 HTTPS。防止试图降级到 HTTP 的中间人攻击。
includeSubDomains指令将策略应用于所有子域名,preload可加入浏览器内置 HSTS 列表。 - X-Content-Type-Options:设置
nosniff防止浏览器猜测 (嗅探) MIME 类型。阻止将文本文件当作 JavaScript 执行的攻击。 - X-Frame-Options:控制页面是否可以嵌入 iframe。设置
DENY或SAMEORIGIN防止点击劫持攻击。正在被 CSP 的frame-ancestors指令取代。 - Referrer-Policy:控制导航到其他网站时发送多少引用来源信息。
strict-origin-when-cross-origin是平衡的设置,跨域请求仅发送来源。 - Permissions-Policy:控制浏览器功能 (摄像头、麦克风、地理位置等) 的访问。禁用未使用的功能可减少攻击面。
安全头的配置方法
安全头通过 Web 服务器或反向代理配置添加。
Nginx 配置示例
add_header X-Content-Type-Options "nosniff" always;add_header X-Frame-Options "DENY" always;add_header Referrer-Policy "strict-origin-when-cross-origin" always;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
CloudFront (AWS) 配置
使用响应头策略添加安全头。可从 CloudFront 控制台或 CloudFormation 配置,无需修改源服务器。
验证工具
securityheaders.com:输入 URL 即可获得安全头配置的评级 (A+ 到 F)。还提供缺失头部的具体建议。
实施注意事项与优先顺序
不需要一次性实施所有头部。建议按以下优先顺序分阶段引入。
- 立即实施 (副作用最小):X-Content-Type-Options、X-Frame-Options、Referrer-Policy
- 尽早实施 (需要 HTTPS):HSTS。从较短的 max-age 开始,逐步延长。preload 指令需谨慎 - - 一旦注册,移除很困难。
- 谨慎实施 (需要测试):CSP。先使用 Content-Security-Policy-Report-Only 收集违规报告而不阻止。根据报告逐步收紧策略。
添加头部后,务必使用 securityheaders.com 和浏览器开发者工具验证。特别注意 CSP,过于严格的策略可能破坏第三方脚本、广告投放和分析工具。
常见误解
- 有了 HTTPS 就不需要安全头
- HTTPS 提供通信通道加密,但无法防止 XSS 和点击劫持等应用层攻击。安全头与 HTTPS 在不同层面进行防御,两者需要配合使用。
- 设置安全头会导致页面显示异常
- X-Content-Type-Options 和 X-Frame-Options 几乎没有副作用。最可能影响显示的是 CSP,但使用 Report-Only 模式进行预测试可以安全引入。
分享