Files
NextEdu/SECURITY.md

91 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 安全策略
## 报告安全漏洞
**请不要通过 GitHub Issue 公开报告安全漏洞。**
发现安全漏洞请通过以下渠道私密报告:
- 邮件security@eazygame.cn
- 内部工单系统Security 项目 → New Issue
报告时请包含:
1. 漏洞描述和影响范围
2. 复现步骤(最小化示例)
3. 影响的版本号
4. 建议的修复方案(可选)
**响应时间:** 24 小时内确认收到5 个工作日内给出评估结果。
## 安全架构
### 权限三道防线
```
proxy.ts (路由级 bitmap) → requirePermission (Server Action 级) → usePermission (客户端级)
```
- **路由级**`src/proxy.ts` 使用 bitmap 快速拦截未授权路由
- **Server Action 级**:每个 Action 必须调用 `requirePermission()`,或用 `@public` JSDoc 标记豁免
- **客户端级**:组件使用 `usePermission().hasPermission()` 控制元素显隐
### 认证与会话
- JWT/session ID 存储在 httpOnly + Secure + SameSite=Strict 的 Cookie 中
- 服务端环境变量不加 `NEXT_PUBLIC_` 前缀
- 环境变量使用 `@t3-oss/env-nextjs` + Zod 校验(`src/env.mjs`
### 数据访问
- 前端禁止直接访问数据库,所有数据访问必须通过 `data-access.ts` 模块
- Server Action 必须使用 `requirePermission()` 进行权限校验
- 家长路由必须包含 `parentId``studentId` 双重权限校验,防止信息泄露
### 输入安全
- **禁止 `dangerouslySetInnerHTML`**(如必须使用,先用 DOMPurify 清洗)
- Server Action 输入使用 Zod 验证,验证失败返回结构化错误
- 注册/登录流程实施速率限制,防止暴力破解和邮箱枚举攻击
## 安全审计
### arch:scan 自动检测
`npm run arch:query -- violations` 会自动检测:
- **长文件**>800 行):提示拆分,降低维护风险
- **Server Action 权限缺失**:识别未调用 `requirePermission` 的 Server Action支持递归调用链识别
### @public 豁免标记
登录前/公开/内部工具 Server Action 可用 `@public` JSDoc 标记豁免权限校验:
```ts
/**
* 注册 Action登录前公开调用。
*
* @public 登录前公开 Action豁免 requirePermission 校验。
*/
export async function registerAction(formData: FormData) {
// ...
}
```
**豁免场景:**
- 登录前 Action注册、邮箱可用性检查、2FA 预检)
- 内部日志工具audit-logger、change-logger、login-logger
- 权限查询工具isAdminRole、canConfigurePublicAiProvider
- 登录后必经流程onboarding 状态查询/完成)
## 依赖安全
- 定期运行 `npm audit` 检查已知漏洞
- CI 流水线包含 Trivy 安全扫描(`.trivyignore` 配置豁免项)
- 依赖升级通过 PR 审核,不允许直接推送 main 分支
## 数据保护
- 数据库备份:每日自动备份,每周 DR 演练
- 敏感数据密码、2FA 密钥)使用 bcrypt/Argon2 哈希存储
- 日志不记录敏感信息密码、token、个人身份信息