# 09-安全规范 > **最重要分册之一**,涵盖安全原则、开发规范、扫描要求 --- ## 一、软件安全基本原则 ### 安全设计原则 - **默认拒绝** —— 无授权即不允许访问 - **开放设计** —— 安全不依赖机制保密,依赖密钥/口令 - **特权分离** —— 细分特权分给多个主体;禁止 root 远程访问 - **最小特权** —— 每个程序/用户仅拥有完成任务所需最小权限 - **最少公共机制** —— 共享机制降到最少 - **完全仲裁** —— 授权检查覆盖每个访问操作 - **零信任** —— 假设用户/外部部件都不安全 - **访问控制** —— 严禁用用户输入参数作为访问控制依据;使用 RBAC;基于角色展示前端页面 ### 会话管理原则 - Session ID 必须足够随机且无法预测 - 含敏感信息的会话必须 SSL 加密 - **权限变动时必须重新生成 Session ID** - 同一用户尽量只允许一个会话存在 - 建议尽可能缩短会话寿命 ### 缓存管理原则 - 所有缓存数据必须设置过期时间 - 要求强一致性的系统不能使用缓存 - 预防缓存雪崩/缓存穿透 ### 安全开发原则 - **输入验证** —— 所有输入都需安全验证;**所有输入必须在服务端验证** - **客户端不可信任** —— 敏感数据从服务端获取,不直接使用客户端身份信息 - **错误消息** —— 仅显示一般错误信息,不暴露系统/网络/应用敏感信息 - **URL 加密传输** —— URL 中敏感信息应加密 - **注释代码** —— 不能包含敏感信息 - **最小化** —— 输入信息最小化、返回信息最小化,错误信息对用户屏蔽 - **失败终止** —— 不符合验证的数据直接终止,不修正继续 ### 安全部署原则 - **【强制】** 禁用 root 权限运行业务应用;不要在容器内以 root 运行 - **【强制】** 创建服务专属账号启动服务 - **【强制】** Linux 下避免文件权限设为 777 - **【强制】** 防火墙默认禁止所有域间流量 - **【强制】** 为临时安全策略设置生效时间段 - 记录日志、定期审计 ### 禁止弱口令 - 长度 ≥ 8 位 - 包含数字、小写字母、大写字母、特殊符号 4 类中至少 3 类 - 口令与用户名无相关性 - 更换默认出厂口令 - 避免键盘排序密码 --- ## 二、通用安全开发规范 | 编号 | 规则 | 级别 | |------|------|:----:| | 1 | 禁止在日志中保存口令、密钥和其他敏感数据 | **强制** | | 2 | 禁止使用私有或弱加密算法 | **强制** | | 3 | 口令哈希存储必须加入盐值 | **强制** | | 4 | 禁止将敏感信息硬编码在程序中 | **强制** | | 5 | 使用强随机数(禁止 `java.util.Random`) | **强制** | | 6 | 禁止在生产环境保留任何后门程序 | **强制** | ### 推荐加密算法 | 类型 | 推荐算法 | 最低密钥长度 | |------|----------|:----------:| | 对称加密 | SM4 | 128 位 | | 非对称加密 | SM2 | 256 位 | | 数字签名 | SM2 | — | | 摘要算法 | SM3 | — | ### 盐值(Salt)要求 - 至少 8 字节,由安全随机数产生 - 每个存储入口盐值不同 - 推荐进行 50000 次哈希迭代(有性能限制时至少 5000 次) --- ## 三、Java 安全开发规范(关键项) | 规则 | 说明 | |------|------| | **SQL 注入防护** | 使用参数化查询(`PreparedStatement`),禁止拼接用户输入 | | **XML 注入防护** | 白名单校验 + 使用安全的 XML 库 | | **命令注入防护** | 系统命令做白名单限制 | | **XSS 防护** | 前端输出必须安全过滤/正确转义 | | **文件上传** | 校验文件扩展名 + 大小限制 | | **URL 跳转** | 白名单验证 URL 参数 | | **异常处理** | 禁止抛出敏感数据信息;不允许忽略异常;不允许抛出 RuntimeException/Exception/Throwable | | **序列化** | 不要序列化未加密敏感数据(用 `transient`);避免内存泄漏;反序列化避免恶意代码 | | **I/O 操作** | 临时文件及时删除;避免在共享目录操作文件;避免外部进程阻塞在 I/O 流 | | **密码存储** | 建议用字符数组存储密码(非 String) | ### 输入验证核心规则 1. **【强制】** 禁止对用户输入未过滤的参数进行 SQL 拼接 2. **【强制】** 禁止对用户输入未过滤的参数进行 XML 拼接 3. **【强制】** 禁止用户输入未经校验的系统命令作为入参 4. **【强制】** 禁止向前端输出未经安全过滤的数据 5. **【强制】** 禁止上传未经安全校验的文件 6. **【强制】** 页面跳转 URL 参数做白名单验证 7. **【强制】** 禁止向 `Runtime.exec()` 传递不可信数据 --- ## 四、代码安全扫描要求 ### 扫描时机 - **【强制 C1】** 软件上线发布前必须进行源代码安全扫描 - **【强制 C2】** 开发期间提交代码评审时需进行代码质量扫描 - **【强制 C3】** 代码安全扫描缺陷处理、审计、代码安全基线 ### 扫描类型 | 类型 | 说明 | |------|------| | SCA | 软件成分分析 | | SAST | 静态应用安全测试 | | DAST | 动态应用安全测试 | | SonarQube | 代码质量扫描 | ### 安全评估分级 - 阻断级问题 → 必须修复才能上线 - 严重级问题 → 必须修复 - 一般级问题 → 建议修复 - 轻微级问题 → 可选修复 --- ## 五、研发云平台安全要求 - **【强制】** 系统接入须提供安全扫描、漏洞扫描、渗透测试报告 - **【强制】** API 对接使用 TLS 1.3+,敏感数据应用层加密(AES-256) - **【强制】** 页面集成通过 iframe 须用 HTTPS + 公网可信证书 - **【强制】** CSP 头严格限制 iframe 来源,添加 sandbox 属性 - **【强制】** 链接跳转实施白名单机制 - **【强制】** 日志保留至少 6 个月 - **【强制】** 具备安全事件应急处置预案 - **【禁止】** 研发云与接入系统间禁止批量同步:用户信息、项目信息、用户角色和权限