name: 安全头配置 description: 配置HTTP安全头以保护免受XSS、点击劫持和MIME嗅探攻击。适用于加固Web应用程序、通过安全审计或实施内容安全策略时使用。
安全头配置
实施HTTP安全头以防御常见的基于浏览器的攻击。
基本头
| Header | 目的 | 值 |
|---|---|---|
| HSTS | 强制HTTPS | max-age=31536000; includeSubDomains |
| CSP | 限制资源 | default-src 'self' |
| X-Frame-Options | 防止点击劫持 | DENY |
| X-Content-Type-Options | 防止MIME嗅探 | nosniff |
Express实现
const helmet = require('helmet');
app.use(helmet());
// 自定义CSP
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:", "https:"],
connectSrc: ["'self'", "https://api.example.com"],
fontSrc: ["'self'", "https://fonts.gstatic.com"],
frameAncestors: ["'none'"]
}
}));
Nginx配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" 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 "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
验证工具
安全头检查清单
- [ ] HSTS启用并设置长max-age
- [ ] CSP配置并测试
- [ ] X-Frame-Options设置为DENY
- [ ] X-Content-Type-Options设置为nosniff
- [ ] Referrer-Policy已配置
- [ ] Permissions-Policy禁用未使用功能
其他实现
参见references/python-apache.md获取:
- Python Flask安全头中间件
- Flask-Talisman库配置
- Apache .htaccess配置
- 头测试脚本
常见错误
- 永久设置CSP为仅报告模式
- 使用过于宽松的策略
- 更改后忘记测试
- 在HSTS中未包括所有子域名