3.3 KiB
3.3 KiB
最终安全与凭据审计报告 (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。