# 安全开发规范 ## 1. 认证与授权 - 所有 API 必须经过认证(除明确标注的公开接口) - 权限校验在 Application 层执行,不依赖前端隐藏 - 管理员操作和普通用户操作走不同 API 前缀(/admin-api vs /app-api) - AI runtime 不能自授权(包级隔离 + ArchUnit 强制) ## 2. 输入校验 - 所有外部输入必须校验(请求参数、文件上传、WebSocket 消息) - 使用框架提供的校验注解(@Valid、@NotNull 等),不手写正则 - 文件上传:校验类型、大小、内容(不只看扩展名) - SQL 参数化查询,禁止字符串拼接 ## 3. 数据保护 - 敏感字段(密码、token、密钥)不出现在日志、响应、错误信息中 - 数据库中密码使用 BCrypt 加密存储 - API 响应中脱敏:手机号中间 4 位、邮箱 @ 前部分、身份证中间段 - 用户数据隔离:查询必须带 tenant_id / user_id 条件 ## 4. 密钥管理 - 禁止在代码中硬编码密钥、token、密码 - 开发环境使用 .env.local(已 gitignore) - 生产环境使用环境变量或密钥管理服务 - API Key 定期轮换,支持多 key 并存过渡 ## 5. AI 特有安全 - Prompt Injection 防护:用户输入与系统 prompt 严格分离 - AI 生成内容标记来源(source_version),不伪装为用户原创 - AI runtime 权限信封(Permission Envelope)由 grant 包签发,runtime 只读 - 保护节点(Protection Node)不可被 AI 替换或修改 ## 6. 前端安全 - XSS 防护:使用框架自动转义,富文本使用白名单过滤 - CSRF:使用 token 机制 - 敏感操作(删除、发布、支付)需要二次确认 - 本地存储(IndexedDB/localStorage)不存储敏感信息 ## 7. 审计日志 - 所有管理员操作必须记录审计日志 - 审计日志包含:who(操作人)、what(操作内容)、when(时间)、where(IP/设备)、result(结果) - 审计日志不可修改、不可删除 - 敏感操作(权限变更、数据删除、配置发布)额外记录变更前后值 ## 8. 依赖安全 - 使用固定版本号,不使用 ^ 或 ~ 范围 - 定期检查依赖漏洞(npm audit / mvn dependency-check) - 新增依赖需评估:维护活跃度、已知漏洞、许可证兼容性 - 禁止引入来源不明或名称可疑的包 ## 9. Agent 安全行为规则 - 不在代码中硬编码任何密钥或凭据 - 不跳过权限检查或认证中间件 - 不信任前端传来的权限声明 - 不在日志中输出敏感数据 - 发现安全漏洞时立即报告,不静默修复 - 不引入已知有安全漏洞的依赖版本