name: api-security-hardening description: REST API安全加固,包括认证、速率限制、输入验证、安全头部。用于生产API、安全审计、深度防御、或遇到漏洞、注入攻击、CORS问题。
API 安全加固
通过多层安全措施保护 REST API 免受常见漏洞。
安全中间件栈 (Express)
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const mongoSanitize = require('express-mongo-sanitize');
const xss = require('xss-clean');
app.use(helmet());
app.use(mongoSanitize());
app.use(xss());
app.use('/api/', rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
}));
app.use('/api/auth/', rateLimit({
windowMs: 15 * 60 * 1000,
max: 5
}));
输入验证
const { body, validationResult } = require('express-validator');
app.post('/users',
body('email').isEmail().normalizeEmail(),
body('password').isLength({ min: 8 }).matches(/[A-Z]/).matches(/[0-9]/),
body('name').trim().escape().isLength({ max: 100 }),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// 处理请求
}
);
安全头部
app.use((req, res, next) => {
res.setHeader('Content-Security-Policy', "default-src 'self'");
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
res.setHeader('X-XSS-Protection', '1; mode=block');
next();
});
安全检查清单
- [ ] 全程使用HTTPS
- [ ] 所有受保护路由启用认证
- [ ] 输入验证和清理
- [ ] 启用速率限制
- [ ] 配置安全头部
- [ ] CORS 限制到允许的来源
- [ ] 生产错误中不返回堆栈跟踪
- [ ] 启用审计日志
- [ ] 定期更新依赖项
额外实现
参见 references/python-nginx.md 获取:
- Python FastAPI 安全中间件
- 使用密码规则的Pydantic输入验证
- Nginx SSL/TLS 和安全头部配置
- HTTP 参数污染预防
切勿做
- 未经验证信任用户输入
- 在生产环境中返回详细错误
- 在代码中存储秘密
- 使用 GET 进行状态更改操作
- 为方便而禁用安全