Files
railwaysystem/docs/reports/integrated-acceptance/FINAL_PHASE1_20260917_101044/security-final.md
T

3.3 KiB
Raw Blame History

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