什么是安全标头?
安全标头是HTTP响应标头,告知浏览器在处理网站内容时如何行为,通过防止跨站脚本 (XSS)、点击劫持、内容注入和协议降级攻击等常见网络漏洞来增强保护。正确配置的安全标头对深层防御安全策略至关重要。基本安全标头
Strict-Transport-Security (HSTS)
强制HTTPS连接:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- 防止协议降级攻击
- 阻止混合内容
- 保护免受SSL剥离
Content-Security-Policy (CSP)
控制资源加载:
Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com; style-src 'self' 'unsafe-inline'
- 防止XSS攻击
- 控制脚本来源
- 阻止未授权资源
X-Frame-Options
防止点击劫持:
X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN
- 阻止网站被框架化
- 防止UI重定向
X-Content-Type-Options
防止MIME嗅探:
X-Content-Type-Options: nosniff
- 强制浏览器遵守声明的Content-Type
- 防止通过误解释文件进行脚本注入
其他安全标头
| 标头 | 用途 | 示例值 |
|---|---|---|
| X-XSS-Protection | XSS过滤器 (传统) | 1; mode=block |
| Referrer-Policy | 控制引用者信息 | strict-origin-when-cross-origin |
| Permissions-Policy | 功能限制 | geolocation=(), camera=() |
| Cross-Origin-Opener-Policy | 进程隔离 | same-origin |
| Cross-Origin-Embedder-Policy | 资源隔离 | require-corp |
实现示例
Nginx配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
Apache配置
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
安全标头和域名健康
标头为什么重要
- 保护访问您的域名的用户
- 防止域名声誉损害
- 满足合规要求
- 防止常见攻击
测试安全标头
验证实现的工具:
- securityheaders.com
- Mozilla Observatory
- SSL Labs
- Chrome DevTools Network标签
最佳实践
1. 从HSTS开始:HTTPS执行必不可少
2. 逐步实现CSP:从仅报告模式开始
3. 彻底测试:标头可能会破坏功能
4. 使用预加载列表:提交到浏览器预加载列表
5. 监控违规:使用CSP报告端点
6. 定期审计:安全要求不断发展
常见评分标准
| 级别 | 典型要求 |
|---|---|
| A+ | 所有关键标头、HSTS预加载 |
| A | HSTS, CSP, X-Frame-Options, X-Content-Type |
| B | 缺少一些标头 |
| C/D | 最少的安全标头 |
| F | 没有安全标头 |
安全标头代表网络应用安全的关键层,提供由浏览器强制执行的保护,补充服务器端安全措施。