check_frontend_secrets.sh 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/bin/sh
  2. # check_frontend_secrets.sh —— 红线自检(验收第 8 项)。
  3. # 两种口径都扫:
  4. # 1) 只扫浏览器会加载的文件(index.html + js/ + css/)里的"凭据名"
  5. # 2) 扫整个交付目录的"文本内容"(含 tools/、docs/、README),确认没有把密钥值写进任何文件
  6. # 运行时若设置了 PARSE_MASTER_KEY,还会用它的实际值做一次全文搜索。
  7. set -u
  8. cd "$(dirname "$0")/.." || exit 1
  9. PAT='masterkey|master-key|cc84[0-9a-f]{6,}|PARSE_MASTER_KEY'
  10. fail=0
  11. echo "① 前端加载文件里的凭据名:"
  12. if grep -rniE "$PAT" index.html js css; then
  13. echo " ✗ 前端文件出现凭据名"; fail=1
  14. else
  15. echo " ✓ 无命中(只出现公开的 App ID:FKieRbIoGt_main)"
  16. fi
  17. echo "② 整个目录的文本内容里是否出现真实密钥值:"
  18. if [ -n "${PARSE_MASTER_KEY:-}" ]; then
  19. if grep -rqF -- "$PARSE_MASTER_KEY" . 2>/dev/null; then
  20. echo " ✗ 发现密钥值"; fail=1
  21. else
  22. echo " ✓ 未发现(密钥只在运行时从环境变量读取)"
  23. fi
  24. else
  25. echo " - 未设置 PARSE_MASTER_KEY,跳过实际值搜索"
  26. fi
  27. echo "③ tools/ 与 README 只允许出现变量名,不允许出现密钥:"
  28. if grep -rnE 'cc84[0-9a-f]{6,}' . 2>/dev/null; then
  29. echo " ✗ 出现疑似密钥串"; fail=1
  30. else
  31. echo " ✓ 无匹配 cc84 开头的串"
  32. fi
  33. exit $fail