- 问题:
app/api/forum/favorites/route.ts
和app/api/forum/reports/route.ts
中使用硬编码userId = 1
- 风险: 所有用户操作被记录到同一账户,数据混乱
- 修复: 添加
verifyHeaderCookie
身份验证,从JWT token获取真实用户ID
- 问题:
app/api/forum/actions/route.ts
从请求体获取userId,可被伪造 - 风险: 用户可以伪造其他用户的点赞、收藏操作
- 修复: 移除请求体中的userId参数,通过身份验证获取
- 问题: 多个管理API缺少权限验证
- 修复: 为所有管理API添加完整的身份验证和权限检查
- 问题: 内容安全策略阻止了必要的外部资源加载
- 影响: Microsoft Clarity分析工具、VNDB API、blob URL等无法正常工作
- 修复: 优化CSP配置,允许必要的外部资源访问
// 统一的权限验证模式
const payload = await verifyHeaderCookie(request)
if (!payload) {
return NextResponse.json({ code: 401, message: '请先登录' })
}
if (payload.role < requiredRole) {
return NextResponse.json({ code: 403, message: '权限不足' })
}
- 第一层: 中间件路由保护 (
middleware.ts
) - 第二层: 客户端权限守卫 (
AdminGuard
) - 第三层: API端点权限验证
- 第四层: 数据库级权限检查
// 在 middleware.ts 中配置
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: [详细CSP策略]
// 平衡安全性和功能性的CSP配置
script-src: 'self' 'unsafe-inline' 'unsafe-eval' https://www.clarity.ms https://*.clarity.ms
script-src-elem: 'self' 'unsafe-inline' https://www.clarity.ms https://*.clarity.ms
connect-src: 'self' https://api.vndb.org https://*.vndb.org https://www.clarity.ms https://*.clarity.ms wss:
img-src: 'self' data: https: blob:
media-src: 'self' data: blob:
worker-src: 'self' blob:
child-src: 'self' blob:
允许的外部资源:
- Microsoft Clarity: 用户行为分析工具
- VNDB API: 视觉小说数据库接口
- Blob URLs: 支持文件上传和预览功能
- WebSocket: 支持实时通信功能
Access-Control-Allow-Origin: [配置的域名]
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, Cookie
Access-Control-Allow-Credentials: true
所有敏感操作都记录详细日志:
console.log(`用户 ${payload.name}(ID:${payload.uid}) 执行了 ${action} 操作`)
等级 | 角色 | 权限范围 |
---|---|---|
1 | 普通用户 | 基础功能 |
2 | 创作者 | 发布内容、上传文件 |
3 | 管理员 | 管理面板访问 |
4 | 超级管理员 | 所有功能 |
// config/rateLimit.ts
LOGIN: { windowMs: 15min, maxAttempts: 10, blockDuration: 15min }
REGISTER: { windowMs: 1hour, maxAttempts: 3, blockDuration: 1hour }
CAPTCHA: { windowMs: 5min, maxAttempts: 10, blockDuration: 10min }
- 建议: 为所有API端点添加适当的限流保护
- 优先级: 中等
- 实施: 在关键API中集成
rateLimit
工具
- 建议: 使用更严格的Zod验证模式
- 优先级: 中等
- 实施: 增强现有验证规则,添加更多边界检查
- 建议: 实施会话超时和强制重新认证
- 优先级: 低
- 实施: 在JWT中添加更短的过期时间
- 建议: 为管理员账户强制启用2FA
- 优先级: 中等
- 实施: 修改管理员权限检查逻辑
- 永远不要硬编码用户ID
- 所有API都必须验证用户身份
- 敏感操作必须记录审计日志
- 使用参数化查询防止SQL注入
- 输入数据必须经过验证和清理
-
设置环境变量:
ALLOWED_ORIGINS=https://yourdomain.com JWT_SECRET=your-strong-secret DATABASE_URL=your-secure-db-url
-
HTTPS强制:
- 生产环境必须使用HTTPS
- 配置HSTS头
-
数据库安全:
- 使用最小权限原则
- 定期备份和加密
- 日志监控: 监控异常登录和权限提升尝试
- 错误处理: 不暴露敏感信息的错误消息
- 安全更新: 定期更新依赖包和安全补丁
- 硬编码用户ID导致数据混乱
- 权限验证缺失允许未授权访问
- 缺少安全响应头
- ✅ 完整的身份验证和授权
- ✅ 多层安全防护
- ✅ 操作审计日志
- ✅ 安全响应头配置
- ✅ CORS策略配置
- 定期安全审计: 每季度进行代码安全审查
- 依赖包扫描: 使用工具检查已知漏洞
- 渗透测试: 定期进行安全测试
- 安全培训: 开发团队安全意识培训
最后更新: 2024年12月 安全等级: 🟢 良好 下次审查: 2025年3月