HTTP 安全头部是浏览器与服务器之间的“安全协议”——它们告诉浏览器应该如何处理页面内容,能有效防御 XSS、点击劫持、MIME 嵅探等常见攻击。

一、为什么安全头部重要
- 阻止恶意脚本 →
Content-Security-Policy - 强制 HTTPS →
Strict-Transport-Security - 防止 iframe 嵌入 →
X-Frame-Options
二、关键安全头部详解
1. Content-Security-Policy (CSP)
CSP 是最强大也最复杂的安全头部。它白名单化页面允许加载的资源来源。
# 基础 CSP:仅允许同源资源 + Google Analytics + Google AdSense
Content-Security-Policy:
default-src 'self';
script-src 'self' https://www.googletagmanager.com https://pagead2.googlesyndication.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self' https://fonts.gstatic.com;
connect-src 'self' https://www.google-analytics.com;
frame-src https://googleads.g.doubleclick.net;⚠️ 注意:CSP 配置错误会直接导致页面功能异常(JS 不加载、图片不显示、字体丢失)。建议先用
Content-Security-Policy-Report-Only 模式测试,确认无误后再切换为强制模式。2. Strict-Transport-Security (HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
# max-age=31536000 → 缓存 1 年
# includeSubDomains → 所有子域也强制 HTTPS
# preload → 可申请加入浏览器预加载列表3. X-Frame-Options
X-Frame-Options: DENY # 完全禁止被嵌入
X-Frame-Options: SAMEORIGIN # 只允许同源嵌入4. 其他重要头部
| 头部 | 作用 | 推荐值 |
|---|---|---|
X-Content-Type-Options | 禁止 MIME 嵅探 | nosniff |
Referrer-Policy | 控制 Referer 泄露 | strict-origin-when-cross-origin |
Permissions-Policy | 控制浏览器 API | camera=(), microphone=() |
三、有无安全头部对比
| 攻击 | 无安全头 | 有安全头 |
|---|---|---|
| XSS | 脚本直接执行 | CSP 阻止 |
| 点击劫持 | 可被任意 iframe 嵌入 | X-Frame-Options 阻止 |
| 协议降级 | 中间人可劫持 | HSTS 强制 HTTPS |
| MIME 混淆 | 文本可能被当脚本 | nosniff 禁止 |
四、Nginx 完整配置
server {
listen 443 ssl http2;
server_name example.com;
# 安全头部
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;" always;
# 隐藏服务器版本
server_tokens off;
}五、如何检测
# curl 查看响应头
curl -I https://example.com
# 浏览器 DevTools
# → Network → 点击任意请求 → Response Headers
# 在线工具
# ipinfo.im HTTP Headers 检测工具 — 一键查看所有响应头六、常见误区
误区 1:“用了 HTTPS 就不需要安全头部” — HTTPS 只加密传输,不防浏览器层攻击。
误区 2:“安全头部影响性能” — 只是几行文本,影响为零。
误区 3:“配置一次就不用管” — CSP 需随业务变化更新。