scan-secrets.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env bash
  2. # 扫描交付目录中的高风险密钥/直连痕迹(实例内执行)
  3. set -euo pipefail
  4. ROOT="$(cd "$(dirname "$0")/.." && pwd)"
  5. cd "$ROOT"
  6. echo "== TARGET-voc-instance secret scan =="
  7. echo "root: $ROOT"
  8. PATTERNS=(
  9. 'TIKHUB_TOKEN'
  10. 'TIKHUB_PROXY_URL'
  11. 'server-msq\.fmode\.cn'
  12. 'standardapi\.sorftime\.com'
  13. 'api\.tikhub\.io'
  14. 'server\.fmode\.cn/thapi'
  15. 'BasicAuth [A-Za-z0-9]'
  16. 'Bearer r[A-Za-z0-9]'
  17. 'r:d5d356'
  18. 'postgresql://root:'
  19. 'Msq2025uqisad'
  20. 'msq!post666'
  21. )
  22. FAIL=0
  23. for p in "${PATTERNS[@]}"; do
  24. echo "--- pattern: $p"
  25. RG_EXCLUDES=(
  26. -g '!node_modules'
  27. -g '!dist'
  28. -g '!*.lock'
  29. -g '!docs/**'
  30. -g '!**/docs/**'
  31. -g '!scripts/scan-secrets.sh'
  32. -g '!scripts/desense.ps1'
  33. -g '!**/README.md'
  34. -g '!**/CHANGELOG.md'
  35. )
  36. if command -v rg >/dev/null 2>&1; then
  37. if rg -n --hidden "${RG_EXCLUDES[@]}" "$p" frontend/src backend/api backend/src backend/config.json backend/config.example.json backend/server.ts frontend/src/assets ; then
  38. echo "FOUND: $p"
  39. FAIL=1
  40. else
  41. echo "clean (runtime paths)"
  42. fi
  43. else
  44. if grep -RIn --exclude-dir=node_modules --exclude-dir=dist --exclude='*.lock' -E "$p" frontend/src backend/api backend/src backend/config.json backend/server.ts ; then
  45. echo "FOUND: $p"
  46. FAIL=1
  47. else
  48. echo "clean (runtime paths)"
  49. fi
  50. fi
  51. done
  52. # sk 占位允许存在,真实 sk 不允许(仅运行时路径)
  53. echo "--- pattern: live sk- (non-placeholder)"
  54. if command -v rg >/dev/null 2>&1; then
  55. if rg -n -g '!node_modules' -g '!dist' "sk-[A-Za-z0-9]" frontend/src backend/api backend/src backend/config.json backend/config.example.json | rg -v 'sk-TARGET_RELAY_SK' ; then
  56. echo "FOUND live sk"
  57. FAIL=1
  58. else
  59. echo "clean (only placeholder or none)"
  60. fi
  61. fi
  62. if [ "$FAIL" -ne 0 ]; then
  63. echo "SCAN_FAILED"
  64. exit 1
  65. fi
  66. echo "SCAN_OK"