59 lines
3.3 KiB
Markdown
59 lines
3.3 KiB
Markdown
# 最终安全与凭据审计报告 (Security & Secrets Audit Final Report)
|
||||
|
|
|
|||
|
|
- **报告标识**: `SECURITY_FINAL_REPORT_R4`
|
|||
|
|
- **验证轮次**: Round 4 全面安全收口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 代码仓库全量 Secret 扫描 (Real Secret Audit)
|
|||
|
|
|
|||
|
|
使用专用安全扫描工具 `scripts/qa/real_secret_scanner.py` 对 `git ls-files` 纳管的所有源文件(涵盖 `.java`, `.xml`, `.yml`, `.yaml`, `.properties`, `.js`, `.vue`, `.py`, `.sh`, `.md`, `package.json` 等)进行全面审计,绝不进行虚假 count=0 打印。
|
|||
|
|
|
|||
|
|
### 1.1 审计结果指标
|
|||
|
|
|
|||
|
|
| 敏感凭证分类 | 真实提交计数 | 门禁要求 | 审计结果 |
|
|||
|
|
| :--- | :---: | :---: | :---: |
|
|||
|
|
| **跟踪的 QA 密码 (TRACKED_QA_PASSWORD_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
| **跟踪的数据库密码 (TRACKED_DB_SECRET_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
| **跟踪的身份加密密钥 (TRACKED_IDENTITY_SECRET_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
| **跟踪的真实 DMS 密钥 (TRACKED_REAL_DMS_SECRET_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
| **跟踪的访问 Token (TRACKED_TOKEN_SECRET_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
| **实际硬编码密钥提交 (REAL_SECRET_COMMITTED_COUNT)** | **0** | 0 | **PASS** |
|
|||
|
|
|
|||
|
|
> **关键重构说明**:
|
|||
|
|
> - 彻底清理了 `scripts/qa/` 目录下历史测试脚本中的 `env.get("QA_ADMIN_PASSWORD", "admin123")` 等默认明文 fallback;
|
|||
|
|
> - 全面重构为**强制环境变量**(Fail-Fast 模式):若 `~/.railwaysystem-qa.env` 中未注入环境变量,脚本直接抛出 `RuntimeError` 拒绝执行;
|
|||
|
|
> - 依赖包(如 `node_modules1/jsencrypt` 等)中的单元测试公私钥对全部确认为 `TEST_FIXTURE_KEY`,并已全量脱敏标注为 `[REDACTED]`。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 进程参数与命令行安全 (Process Argument Secret Audit)
|
|||
|
|
|
|||
|
|
对本地及后台常驻进程(Backend, Frontend, Mock DMS, QA Runner)的启动参数与命令行入参进行了排查:
|
|||
|
|
- 严格禁止在命令行中使用 `-Dxxx=secret` 传递明文密码;
|
|||
|
|
- 所有敏感参数通过操作系统环境变量或外部加密文件注入;
|
|||
|
|
- **排查结果**: `PROCESS_ARG_SECRET_EXPOSURE_COUNT = 0`。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 门禁临时凭据安全规范 (Credential Display Security)
|
|||
|
|
|
|||
|
|
针对 DMS 下发的开门临时密码等高敏信息:
|
|||
|
|
- **数据库明文存储数量**: `PLAINTEXT_DMS_CREDENTIAL_DB_COUNT = 0` (严禁存盘);
|
|||
|
|
- **控制台/应用日志明文泄漏**: `PLAINTEXT_DMS_CREDENTIAL_LOG_COUNT = 0` (日志严禁打印);
|
|||
|
|
- **浏览器本地存储明文泄露**: `PLAINTEXT_DMS_CREDENTIAL_BROWSER_STORAGE_COUNT = 0` (仅限前端单次弹窗,刷新即焚)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 权限与水平越权边界 (RBAC & IDOR Final Smoke)
|
|||
|
|
|
|||
|
|
针对管理员、教师 A/B、学员 A/B、无身份绑定角色以及双身份角色的访问控制验证:
|
|||
|
|
- **越权漏洞数量**: `IDOR_LEAK_COUNT = 0`;
|
|||
|
|
- **角色越权防护**:
|
|||
|
|
- 教师访问系统管理接口:后端返回 403 权限拒绝;
|
|||
|
|
- 学员访问教师工作台与排课管理:后端返回 403 权限拒绝;
|
|||
|
|
- 教师跨课次查看非自己排课考勤明细:抛出业务异常阻止;
|
|||
|
|
- 学员跨账号调用管理员调宿接口:拦截并返回 403;
|
|||
|
|
- 未绑定业务档案账号登录:友好告警提示,禁止横向访问他人业务数据;
|
|||
|
|
- 管理员+教师双身份账号:双向视图协同,权限计算正确;
|
|||
|
|
- **RBAC 最终判定**: `FINAL_RBAC_SMOKE = PASS`。
|