5.9 KiB
5.9 KiB
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) |
输入验证核心规则
- 【强制】 禁止对用户输入未过滤的参数进行 SQL 拼接
- 【强制】 禁止对用户输入未过滤的参数进行 XML 拼接
- 【强制】 禁止用户输入未经校验的系统命令作为入参
- 【强制】 禁止向前端输出未经安全过滤的数据
- 【强制】 禁止上传未经安全校验的文件
- 【强制】 页面跳转 URL 参数做白名单验证
- 【强制】 禁止向
Runtime.exec()传递不可信数据
四、代码安全扫描要求
扫描时机
- 【强制 C1】 软件上线发布前必须进行源代码安全扫描
- 【强制 C2】 开发期间提交代码评审时需进行代码质量扫描
- 【强制 C3】 代码安全扫描缺陷处理、审计、代码安全基线
扫描类型
| 类型 | 说明 |
|---|---|
| SCA | 软件成分分析 |
| SAST | 静态应用安全测试 |
| DAST | 动态应用安全测试 |
| SonarQube | 代码质量扫描 |
安全评估分级
- 阻断级问题 → 必须修复才能上线
- 严重级问题 → 必须修复
- 一般级问题 → 建议修复
- 轻微级问题 → 可选修复
五、研发云平台安全要求
- 【强制】 系统接入须提供安全扫描、漏洞扫描、渗透测试报告
- 【强制】 API 对接使用 TLS 1.3+,敏感数据应用层加密(AES-256)
- 【强制】 页面集成通过 iframe 须用 HTTPS + 公网可信证书
- 【强制】 CSP 头严格限制 iframe 来源,添加 sandbox 属性
- 【强制】 链接跳转实施白名单机制
- 【强制】 日志保留至少 6 个月
- 【强制】 具备安全事件应急处置预案
- 【禁止】 研发云与接入系统间禁止批量同步:用户信息、项目信息、用户角色和权限