Files
telecom-rd-project-template/.agents/references/quick-guides/09-security.md
T
2026-07-28 22:30:20 +08:00

142 lines
5.9 KiB
Markdown
Raw 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.
# 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 个月
- **【强制】** 具备安全事件应急处置预案
- **【禁止】** 研发云与接入系统间禁止批量同步:用户信息、项目信息、用户角色和权限