Some checks failed
Lint / build (20) (push) Has been cancelled
- Remove hardcoded admin password, use env var or auto-generate - Fix trustHost to be conditional (Vercel-only by default) - Add HTTP security headers (CSP, X-Frame-Options, HSTS) - Create middleware.ts to activate existing rate limiting - Implement structured logging system - Rewrite error handling in ai-cad service - Update security documentation
3.5 KiB
3.5 KiB
安全加固实施指南
当前状态
本项目已实施多层安全防护。以下为实际部署情况:
已实现的安全功能
1. 速率限制(Rate Limiting)
- 文件:
lib/security/rate-limiter.ts - 中间件入口:
middleware.ts→proxy.ts - 功能:
- 聊天接口:每分钟 60 次
- 认证接口:每分钟 5 次
- 文件上传:每分钟 60 次
- 图片代理:每分钟 3000 次
- 画布保存:每分钟 300 次
- 实时画布:每分钟 600 次
- UI 轮询:每分钟 1200 次
- 通用 API:每分钟 100 次
- 注意:当前使用内存存储,多实例部署时建议迁移至 Redis(见下方中长期建议)
2. 可疑请求检测
- 文件:
lib/security/request-monitor.ts - 功能:
- 检测可疑路径(/.env、/.git 等)
- 检测可疑 User-Agent
- 记录但不立即阻止(避免误报)
- 状态:已实现并通过中间件自动运行
3. 输入清理和验证
- 文件:
lib/security/input-sanitizer.ts - 功能:
- 移除命令注入字符
- 移除危险关键词
- 防止路径遍历
- 防止 XSS 攻击
- 状态:工具函数已就绪,需在各 API 路由中逐步接入
4. IP 黑名单
- 文件:
lib/security/ip-blocklist.ts - 功能:基于配置的 IP 黑名单拦截
- 状态:已通过中间件自动运行
5. HTTP 安全头
- 文件:
next.config.ts(headers 配置) - 已添加:
X-Content-Type-Options: nosniffX-Frame-Options: SAMEORIGINReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: camera=(), microphone=(), geolocation=()Content-Security-Policy(根据开发/生产环境自动调整)
6. 认证安全
- 文件:
app/(auth)/auth.config.ts,app/(auth)/auth.ts - 改进:
trustHost已改为条件启用(Vercel 环境自动开启,其他环境需设置AUTH_TRUST_HOST=true)- Session cookie 使用
httpOnly + sameSite: lax + secure(HTTPS 环境) - 单会话强制(regular 用户)
- bcrypt 密码哈希 + 时序攻击缓解
7. 结构化日志
- 文件:
lib/logger.ts - 功能:
- JSON 格式输出(生产环境)
- 日志级别过滤(
LOG_LEVEL环境变量) - 模块名标记(
createLogger("ModuleName")) - 错误堆栈保留
- 用法:
import { createLogger } from "@/lib/logger"; const log = createLogger("MyService"); log.error("Operation failed", error, { userId: "123" });
待改进项
短期(1-2 周)
- 在所有 API 路由中接入 Zod 输入验证
- 将现有
console.error调用迁移至结构化日志 - 为 service 层 catch 块添加错误日志记录
中期(1-2 月)
- 将内存速率限制迁移至 Redis(
@upstash/ratelimit) - 实施更细粒度的速率限制策略
- 添加结构化日志的持久化存储
- 集成错误追踪服务(Sentry 等)
长期(3-6 月)
- 部署 WAF
- 实施 SELinux 策略
- 建立安全审计流程
- CI/CD 中集成 SAST 和依赖扫描
环境变量
新增安全相关环境变量(详见 .env.example):
| 变量 | 说明 | 默认值 |
|---|---|---|
AUTH_TRUST_HOST |
是否信任代理 Host 头(非受信环境不要开启) | false |
LOG_LEVEL |
日志级别(debug/info/warn/error) | 开发: info, 生产: warn |
ADMIN_EMAIL |
初始管理员邮箱(create-admin.ts) |
admin@example.com |
ADMIN_PASSWORD |
初始管理员密码(不设置则自动生成) | 自动生成 |