Awesome-omni-skill secret-scanner
自動掃描程式碼中的敏感資訊。當準備 commit、編輯設定檔、新增環境變數、或建立 PR 時自動執行。檢測 API keys、tokens、密碼、資料庫連線字串等敏感資訊,防止意外洩漏。
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/secret-scanner-keweikao" ~/.claude/skills/diegosouzapw-awesome-omni-skill-secret-scanner && rm -rf "$T"
manifest:
skills/development/secret-scanner-keweikao/SKILL.mdsource content
Secret Scanner - 敏感資訊掃描
自動觸發時機
Claude 會在以下情況自動執行此 skill:
| 觸發情境 | 說明 |
|---|---|
| 準備 Commit | 在 commit 前檢查 staged 檔案 |
| 編輯設定檔 | 修改 、 等檔案 |
| 新增環境變數 | 任何涉及環境變數的變更 |
| 建立 PR | PR 建立前的最終檢查 |
| 新增檔案 | 建立新檔案時檢查內容 |
掃描模式
1. API Keys & Tokens
# AWS AKIA[0-9A-Z]{16} aws[_-]?(secret[_-]?access[_-]?key|access[_-]?key[_-]?id) # Anthropic sk-ant-[a-zA-Z0-9-_]{40,} # OpenAI sk-[a-zA-Z0-9]{48} # Gemini/Google AIza[0-9A-Za-z-_]{35} # Groq gsk_[a-zA-Z0-9]{52} # Slack xox[baprs]-[0-9]{10,13}-[a-zA-Z0-9-]+ # GitHub gh[pousr]_[A-Za-z0-9_]{36,} github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59} # Generic api[_-]?key\s*[:=]\s*['"][^'"]{20,}['"] secret[_-]?key\s*[:=]\s*['"][^'"]{20,}['"]
2. 資料庫連線
# PostgreSQL postgres(ql)?://[^:]+:[^@]+@[^/]+/\w+ # MySQL mysql://[^:]+:[^@]+@[^/]+/\w+ # MongoDB mongodb(\+srv)?://[^:]+:[^@]+@[^/]+ # Redis redis://[^:]+:[^@]+@[^:]+:\d+
3. 私鑰與憑證
# Private Keys -----BEGIN (RSA |EC |OPENSSH |DSA )?PRIVATE KEY----- -----BEGIN PGP PRIVATE KEY BLOCK----- # Certificates -----BEGIN CERTIFICATE-----
4. 密碼模式
password\s*[:=]\s*['"][^'"]+['"] passwd\s*[:=]\s*['"][^'"]+['"] pwd\s*[:=]\s*['"][^'"]+['"]
執行流程
步驟 1: 識別掃描範圍
# 查看 staged 檔案 git diff --cached --name-only # 或掃描特定目錄 find . -type f \( -name "*.ts" -o -name "*.js" -o -name "*.env*" -o -name "*.json" \)
步驟 2: 排除安全檔案
白名單(不掃描):
- 範例檔案(無真實值).env.example
- 測試檔案中的 mock 值*.test.ts
- 第三方套件node_modules/
- Git 內部檔案.git/
步驟 3: 執行掃描
對每個檔案:
- 讀取內容
- 執行所有敏感模式匹配
- 記錄發現的問題
步驟 4: 驗證發現
區分真正的敏感資訊和誤報:
| 類型 | 處理方式 |
|---|---|
| 真實 API Key | 🔴 立即警告,阻止提交 |
| 環境變數引用 | ✅ 安全(如 ) |
| 範例/Mock 值 | ✅ 安全(如 ) |
| 文件說明 | ✅ 安全(文檔中的格式說明) |
輸出格式
發現敏感資訊
## 🚨 Secret Scanner 警告 ### 發現敏感資訊! | 檔案 | 行號 | 類型 | 風險等級 | |------|------|------|---------| | `apps/server/config.ts` | 15 | API Key | 🔴 高 | | `packages/env/index.ts` | 42 | DB Password | 🔴 高 | ### 詳細資訊 #### 🔴 apps/server/config.ts:15 **類型**: Gemini API Key **發現內容**: `AIzaSyB...`(已遮蔽) **建議**: 移至環境變數 \`\`\`typescript // ❌ 不安全 const apiKey = "AIzaSyB..."; // ✅ 安全 const apiKey = process.env.GEMINI_API_KEY; \`\`\` ### ⛔ 行動要求 1. **不要提交這些變更** 2. 將敏感資訊移至 `.env` 檔案 3. 確保 `.env` 在 `.gitignore` 中 4. 重新掃描確認安全
掃描通過
## ✅ Secret Scanner 通過 **掃描範圍**: X 個檔案 **掃描時間**: YYYY-MM-DD HH:mm ### 檢查項目 - [x] API Keys & Tokens - [x] 資料庫連線字串 - [x] 私鑰與憑證 - [x] 硬編碼密碼 ### 白名單排除 - `.env.example` (範例檔案) - `tests/**` (測試 mock) **結論**: 未發現敏感資訊,可以安全提交。
專案特定規則
此專案的敏感資訊位置
| 環境變數 | 用途 | 應在檔案 |
|---|---|---|
| Gemini AI | |
| Groq Whisper | |
| Slack Bot | Cloudflare Secrets |
| PostgreSQL | / Cloudflare |
| Auth 加密 | |
安全的引用方式
// ✅ 正確:從環境變數讀取 import { env } from "@sales-ai/env"; const apiKey = env.GEMINI_API_KEY; // ❌ 錯誤:硬編碼 const apiKey = "AIzaSyB...";
整合的工具
| 工具 | 用途 |
|---|---|
| 執行正則匹配 |
| 讀取檔案內容 |
| 找出需掃描的檔案 |
| 識別變更範圍 |
相關 Skills
- Commit 前自動執行掃描/commit
- PR 前執行掃描/pr-review
- 完整安全審計/security-audit