HTTP 协议中的安全 Header 有哪些?
HTTP 协议中的安全响应头(Security Headers)是服务器向浏览器发送的指令,用于告知浏览器如何表现以增强安全性。配置这些 Header 是防御 XSS(跨站脚本攻击)、点击劫持、MIME 嗅探等常见攻击的低成本且高效的手段。
以下是目前主流且推荐配置的 HTTP 安全 Header:
1. Strict-Transport-Security (HSTS)
- 作用:强制浏览器仅通过 HTTPS 连接与服务器通信,防止中间人攻击(MITM)和 SSL 剥离攻击。
- 原理:一旦浏览器接收到该 Header,在指定的
max-age时间内,即使用户输入http://,浏览器也会自动在本地转换为https://发起请求。 - 推荐配置:plaintext
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadmax-age: 有效期(秒),通常设为一年(31536000)。includeSubDomains: 应用于所有子域名。preload: 申请加入浏览器内置的 HSTS 预加载列表(需去 hstspreload.org 注册)。
2. Content-Security-Policy (CSP)
- 作用:防御 XSS 和数据注入攻击的“核武器”。它允许站点管理员定义哪些动态资源(JavaScript, CSS, Images 等)允许加载。
- 原理:通过白名单机制,禁止加载不受信任的外部脚本,禁止内联脚本(inline script)执行。
- 推荐配置(示例,需根据实际业务调整):plaintext
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none'default-src 'self': 默认只允许同源资源。object-src 'none': 禁止 Flash 等插件。
3. X-Content-Type-Options
- 作用:禁止浏览器进行 MIME 类型嗅探(MIME Sniffing)。
- 原理:如果服务器返回的
Content-Type与实际内容不符,浏览器有时会尝试“猜测”文件类型并执行(例如把一个伪装成图片的文本文件当作 HTML/JS 执行)。该 Header 强制浏览器严格遵守服务器声明的Content-Type。 - 推荐配置:plaintext
X-Content-Type-Options: nosniff
4. X-Frame-Options (XFO)
- 作用:防御点击劫持(Clickjacking)攻击。
- 原理:控制当前页面是否允许被嵌入到
<frame>,<iframe>,<embed>或<object>中。 - 推荐配置:plaintext
X-Frame-Options: DENY # 或者 X-Frame-Options: SAMEORIGINDENY: 禁止任何页面嵌入该页面。SAMEORIGIN: 仅允许同源页面嵌入。- 注:现代浏览器更推荐使用 CSP 的
frame-ancestors指令,但 XFO 兼容性更好。
5. Referrer-Policy
- 作用:控制 HTTP 请求头中
Referer字段的发送策略,保护用户隐私和防止敏感信息(如 URL 中的 Token)泄露。 - 推荐配置:plaintext
Referrer-Policy: strict-origin-when-cross-originstrict-origin-when-cross-origin: 同源请求发送完整 URL;跨域请求仅发送域名(Origin);如果是 HTTPS 页面请求 HTTP 页面,则不发送 Referer。这是现代浏览器的默认行为,但显式设置更安全。no-referrer: 从不发送 Referer。
6. Permissions-Policy (原 Feature-Policy)
- 作用:控制浏览器可以使用哪些 API 和功能(如摄像头、麦克风、地理位置、USB 等)。
- 原理:减少攻击面,防止恶意脚本滥用浏览器的高级功能。
- 推荐配置(禁用敏感功能):plaintext
Permissions-Policy: geolocation=(), camera=(), microphone=()
7. Set-Cookie 相关的安全属性
虽然这不是一个独立的 Header,但在 Set-Cookie Header 中设置正确的属性对 Session 安全至关重要:
- HttpOnly: 禁止 JavaScript (
document.cookie) 访问 Cookie,有效防御 XSS 窃取 Cookie。 - Secure: 仅允许通过 HTTPS 传输 Cookie。
- SameSite: 防御 CSRF(跨站请求伪造)攻击。
SameSite=Strict: 完全禁止第三方 Cookie。SameSite=Lax: 允许部分第三方请求(如链接跳转)携带 Cookie(推荐默认)。
- 示例:plaintext
Set-Cookie: session_id=xyz; Secure; HttpOnly; SameSite=Lax
进阶/较新的 Header
- Cross-Origin-Opener-Policy (COOP):
same-origin: 将页面隔离在单独的进程中,防止跨域窗口攻击(如 Spectre 漏洞利用)。
- Cross-Origin-Embedder-Policy (COEP):
require-corp: 只有当被加载的资源明确允许被加载时(通过 CORS 或 CORP),才允许加载。通常与 COOP 配合使用以启用SharedArrayBuffer。
已弃用或不推荐的 Header
- X-XSS-Protection:
- 曾用于启用浏览器的 XSS 过滤器。但现代浏览器发现该过滤器本身可能引入新的安全漏洞,目前主流浏览器(Chrome, Edge, Firefox)已移除或不再支持该功能。
- 建议:不设置,或设置为
0(X-XSS-Protection: 0),改用 CSP。
- Public-Key-Pins (HPKP):
- 极其容易造成配置错误导致网站无法访问(“自杀”),已被废弃。
总结与检测
要检查你的网站是否配置了这些 Header,可以使用在线工具:
- Security Headers: https://securityheaders.com/
- Mozilla Observatory: https://observatory.mozilla.org/