SECURITY RULES
文件四:04_SECURITY_RULES.md
# 文件四:04_SECURITY_RULES.md
# 安全、权限与隐私永久规则
版本:1.0
状态:长期有效
优先级:最高
作用:所有功能默认以“不能因为方便而牺牲安全”为原则。
# 1. 安全默认原则
任何数据和功能默认:
- 没有权限就不能访问。
- 而不是:
- 只要没有隐藏就能访问。
# 2. 前端不可信
前端:
- 按钮隐藏。
- 字段隐藏。
- 路由隐藏。
- 都不是安全措施。
- 真正权限必须由后端验证。
# 3. 身份认证与权限授权必须分开
Authentication:
- 你是谁。
- Authorization:
- 你能干什么。
- 两个都必须验证。
# 4. 最小权限原则
普通用户:
- 只能访问自己的必要资源。
- 管理员:
- 只获得管理需要权限。
- 数据库账户:
- 只获得应用需要权限。
- 服务:
- 只获得必要权限。
# 5. 敏感信息禁止进入前端
绝对禁止:
- 数据库密码。
- 服务器私钥。
- 第三方Secret。
- 管理员密码。
- JWT Secret。
- API Secret。
# 6. Secret必须使用环境变量或安全密钥管理
不得硬编码在:
- JS。
- HTML。
- CSS。
- Git。
- README。
- Demo。
# 7. .env不得提交真实密钥
允许:
- .env.example
- 但只提供:
- 变量名。
- 示例值。
# 8. 密码规则
密码:
- 不得明文保存。
- 不得明文日志。
- 不得API返回。
- 必须使用成熟安全Hash方案。
# 9. Token规则
必须考虑:
- 有效期。
- 签名。
- 撤销。
- 刷新。
- 存储。
- 泄露。
# 10. Cookie认证
应根据实际场景设置:
- HttpOnly。
- Secure。
- SameSite。
- 合理Domain。
- 合理Path。
# 11. 登录安全
登录必须考虑:
- 暴力破解。
- 频率限制。
- 异常尝试。
- 错误信息泄露。
# 12. 管理员安全等级高于普通用户
管理员系统必须单独检查:
- 登录。
- 认证。
- 授权。
- 限流。
- 操作日志。
- 敏感操作。
# 13. 权限测试
至少测试:
- 游客。
- 普通用户。
- 管理员。
- 超级管理员。
# 14. 防止IDOR
用户不能仅通过修改:
- userId。
- fileId。
- orderId。
- projectId。
- 就访问别人的资源。
# 15. 数据归属必须在后端验证
不能相信前端提交:
`
"userId": "123"
`
就默认是该用户。
# 16. 用户输入默认不可信
所有用户输入必须:
- 验证。
- 限制。
- 转义。
- 必要时过滤。
# 17. XSS防护
任何用户内容输出到HTML时:
- 必须安全编码。
- 不得直接将不可信HTML插入页面。
# 18. SQL注入防护
禁止用户输入拼接SQL。
- 必须使用:
- 参数化查询。
- 成熟ORM。
# 19. 命令注入防护
如果程序调用:
- Shell。
- FFmpeg。
- Python。
- 系统程序。
- 用户参数不能未经严格处理直接进入命令。
# 20. 路径穿越防护
文件系统不得允许:
- ../
- ..
- 绕过允许目录。
21. SSRF防护
服务器替用户请求URL时:
- 必须限制:
- 协议。
- 域名。
- IP范围。
- 重定向。 不得访问:
- localhost。
- 内网服务。
- 云平台内部敏感地址。
- 除非业务明确需要并安全控制。
22. CSRF
涉及敏感状态修改的系统:
- 必须根据认证方式评估CSRF风险并采取保护。
23. CORS
不得为了“先跑起来”直接全部:
- Allow-Origin: *
- 尤其带认证信息时。
24. 上传安全
必须限制:
- 大小。
- 类型。
- 真实MIME。
- 数量。
- 文件名。
- 存储位置。
- 访问权限。
25. 上传目录与程序执行目录分离
用户上传文件不能因为上传成功就可以被服务器执行。
26. 文件下载权限
私人文件:
- 必须验证资源归属和权限。
- 不能只靠URL难猜。
27. 请求大小限制
限制:
- JSON。
- Form。
- 文件。
- URL。
- 分页。
- 请求频率。
28. Rate Limit
至少评估:
- 登录。
- 注册。
- 验证码。
- AI调用。
- 上传。
- 搜索。
- 昂贵接口。
- 管理员登录。
29. 防资源耗尽
防止用户通过:
- 超长输入。
- 超大文件。
- 超大分页。
- 无限调用。
- 复杂查询。
- 耗尽服务器资源。
30. 错误信息安全
用户可看到:
- 合理错误提示。
- 用户不可看到:
- Stack Trace。
- 数据库SQL。
- 服务器绝对路径。
- Secret。
- 环境变量。
- 内部网络信息。
31. 日志安全
禁止日志记录:
- 密码。
- 完整Token。
- API Secret。
- 私钥。
- 不必要的隐私数据。
32. 管理员操作必须审计
重要操作记录:
- 谁。
- 什么时候。
- 做了什么。
- 对什么对象。
- 结果。
33. 数据隐私
只收集业务需要的数据。
- 不要因为:
- “以后可能有用”
- 就收集大量信息。
34. 第三方数据传输
用户数据发给第三方之前必须确认:
- 是否必要。
- 发送什么。
- 第三方是谁。
- 是否包含敏感内容。
35. AI安全
如包含AI功能:
- 系统Prompt不得放客户端。
- API Key不得放客户端。
- 工具调用必须权限控制。
36. Prompt Injection不应拥有系统权限
模型收到:
- “忽略之前规则”
- 不应该因此:
- 访问管理员接口。
- 数据库。
- 文件系统。
- Shell。
37. AI工具遵循最小权限
AI需要读文件:
- 不要给整个服务器写权限。
- AI需要查数据库:
- 不要默认给DROP权限。
38. AI调用成本必须有限制
控制:
- 单次输入。
- 输出Token。
- 频率。
- 每日额度。
- 并发。
39. 安全优先于兼容错误行为
如果旧功能本身存在严重安全风险:
- 必须报告。
- 不能为了保持旧Bug继续留下漏洞。
40. 安全问题等级
发现:
- 密钥泄露。
- 管理员越权。
- 数据库暴露。
- 任意命令执行。
- 严重SQL注入。
- 用户数据越权。
- 默认按高风险或致命处理。
41. 安全修复完成必须复测
修完漏洞不能只检查代码。
- 必须尝试原攻击路径。
- 确认失败。
42. 任何“暂时关闭安全措施”都必须禁止进入生产
开发方便用的:
- 关闭认证。
- 全开放CORS。
- 默认管理员。
- 万能Token。
- Debug接口。
- 上线前必须清除。
六大规则共同执行协议
以下内容同时适用于全部六份文件。
A. AI每次任务开始前
先阅读:
- 与当前任务有关的规则文件。
- 如果任务涉及多个领域:
- 全部读取。 例如:
- 修改登录:
- 必须读取:
- 01_REQUIREMENTS_RULES.md
- 03_ENGINEERING_RULES.md
- 04_SECURITY_RULES.md
- 05_TESTING_RULES.md 修改视觉:
- 读取:
- 01_REQUIREMENTS_RULES.md
- 02_DESIGN_SYSTEM_RULES.md
- 05_TESTING_RULES.md 准备上线:
- 六份全部读取。
B. 规则冲突优先级
如发生冲突:
- 安全与数据完整性 明确用户需求 产品规则 架构规则 设计规则 优化建议
C. AI不能自行修改规则
除非用户明确要求:
- “修改规则文件”。
- 否则:
- 这些文件只读。
D. 现有项目与规则冲突怎么办
不得为了符合规则立即大规模重写。
- 先输出:
- 规则:
- 当前实现:
- 差异:
- 严重程度:
- 建议迁移方式: 再决定是否修复。
E. 每次修改之前
先回答自己:
- 我正在解决什么问题?
- 哪些文件必须修改?
- 哪些文件不应该碰?
- 是否涉及数据?
- 是否涉及权限?
- 是否影响API?
- 是否影响UI?
- 如何验证?
F. 每次修改之后
必须检查:
- 代码是否能运行。
- 是否引入新错误。
- 相关功能是否正常。
- 是否影响其他模块。
- 是否需要更新文档。
G. 禁止假完成
以下情况不得说:
- “全部完成”。
- 仍有未测试。
- 仍有报错。
- Build失败。
- 接口未验证。
- 缺少环境。
- 第三方服务没测试。 应明确:
- 已完成:
- 未完成:
- 无法验证:
- 风险:
H. 修改范围原则
永远优先:
- 小范围。
- 可验证。
- 可回滚。
- 低耦合。 而不是:
- 一次改几十个无关文件。
I. 项目长期目标
本项目必须尽量保持:
- 可理解。
- 可修改。
- 可维护。
- 可测试。
- 可部署。
- 可恢复。
- 可扩展。
- 安全。 最终目标不是:
- “AI这次把它跑起来了。”
- 而是:
- “即使换一个AI、换一台电脑、换一个开发者,这个项目依然能够继续维护。”
AI任务统一结束报告模板
每一次AI开发任务结束,都使用:
本次任务
修改文件
新增文件
删除文件
修改功能
配置变化
依赖变化
数据库变化
安全影响
实际测试
Build状态
未验证内容
已知问题
后续建议
最后只能使用:
- ✅ 完成并验证
- ⚠️ 完成但仍有未验证项目
- ❌ 未完成
- 三种结论之一。