| name | sensitive-info-scanner |
| description | Scans code for sensitive information leaks (API keys, passwords, tokens, enterprise data). Invoke when user requests sensitive data detection or credential scan. |
Sensitive Information Scanner
This skill provides comprehensive sensitive information detection for codebases, focusing on identifying potential data leaks with minimal false positives.
Detection Categories
1. API Keys & Secrets
# Generic API Key
(?i)(api[_-]?key|apikey|api_secret)['\":\s]*['\"]?[a-zA-Z0-9_\-]{20,}
# AWS Access Key
AKIA[0-9A-Z]{16}
# AWS Secret Key
(?i)aws[_-]?secret[_-]?access[_-]?key['\":\s]*['\"]?[a-zA-Z0-9/+=]{40}
# Azure Key
(?i)azure[_-]?(account[_-]?key|storage[_-]?key)['\":\s]*['\"]?[a-zA-Z0-9+/=]{40,}
# GCP Service Account
(?i)google[_-]?(cloud[_-]?api[_-]?key|service[_-]?account)['\":\s]*['\"]?[a-zA-Z0-9_\-]{20,}
# GitHub Token
ghp_[a-zA-Z0-9]{36}
gho_[a-zA-Z0-9]{36}
ghu_[a-zA-Z0-9]{36}
ghs_[a-zA-Z0-9]{36}
ghr_[a-zA-Z0-9]{36}
# GitLab Token
glpat-[a-zA-Z0-9_\-]{20}
# Slack Token
xox[baprs]-[0-9]{10,13}-[a-zA-Z0-9]{24}
# Stripe Key
sk_live_[a-zA-Z0-9]{24}
rk_live_[a-zA-Z0-9]{24}
# Twilio Account SID
AC[a-f0-9]{32}
# SendGrid API Key
SG\.[a-zA-Z0-9_\-]{22}\.[a-zA-Z0-9_\-]{43}
2. Authentication Credentials
# Password in Code
(?i)(password|passwd|pwd)\s*[=:]\s*['\"][^'\"]{4,}['\"]
(?i)(password|passwd|pwd)\s*:\s*['\"][^'\"]{4,}['\"]
# Database Connection String
(?i)(mysql|postgres|postgresql|mongodb|redis|oracle)://[^\s\"']+
(?i)(jdbc|odbc):[^\s\"']+
# Private Key
-----BEGIN (RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----
# JWT Token
eyJ[a-zA-Z0-9_-]*\.eyJ[a-zA-Z0-9_-]*\.[a-zA-Z0-9_-]*
# OAuth Token
(?i)(oauth[_-]?token|access[_-]?token|bearer)['\":\s]*['\"]?[a-zA-Z0-9_\-\.]{20,}
# Session Secret
(?i)(session[_-]?secret|secret[_-]?key)['\":\s]*['\"]?[a-zA-Z0-9_\-]{16,}
3. Encryption Keys & IV/Salt
# IV Salt (ๅๅงๅๅ้/็ๅผ)
(?i)(iv|salt|nonce|initialization[_-]?vector)['\":\s]*['\"]?[a-fA-F0-9]{16,}['\"]?
# Hardcoded Encryption Key
(?i)(secret[_-]?key|encryption[_-]?key|cipher[_-]?key|aes[_-]?key|des[_-]?key)['\":\s]*['\"]?[a-fA-F0-9]{16,}['\"]?
# Key Assignment
(?i)key\s*=\s*['\"][a-fA-F0-9]{16,}['\"]
# PGP Key Block
-----BEGIN PGP (PUBLIC|PRIVATE) KEY BLOCK-----
# SSH Public Key
ssh-rsa [a-zA-Z0-9+/=]+
ssh-ed25519 [a-zA-Z0-9+/=]+
4. Enterprise-Specific Patterns (Low False Positive)
# ๅทฅๅท - ๅญๆฏ+00+6ไธชๆฐๅญ็ปๆ (ๅฆ: A00123456, z01876543)
\b[a-zA-Z]0[01][0-9]{6}\b
# ๅทฅๅท - ๅญๆฏ+600+5ไธชๆฐๅญ็ปๆ (ๅฆ: A60012345, q60098765)
\b[a-zA-Z]60[01][0-9]{5}\b
# ๅทฅๅท - wx+7ไธชๆฐๅญ็ปๆ (ๅฆ: wx1234567, WX7654321)
\b[wW][xX][0-9]{7}\b
# DTSๅๅท - DTS+ๅนด(4ไฝ)+ๆฅๆ(4ไฝ)+5ไธชๆฐๅญ
\bDTS(202[0-9]|20[3-9][0-9])(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[0-9]{5}\b
\bdts(202[0-9]|20[3-9][0-9])(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[0-9]{5}\b
# HUAWEI ๅ
ณ้ฎๅญ - ไป
ๅจๆๆไธไธๆไธญๆฃๆต
(?i)(password|passwd|pwd|secret|key|token|credential|api[_-]?key|access[_-]?key).{0,20}huawei
(?i)huawei.{0,20}(password|passwd|pwd|secret|key|token|credential|api[_-]?key|access[_-]?key)
# ๅไธบAPI/SDKๅฏ้ฅ
\b[Hh][Ww][_-]?(ACCESS|SECRET|API|APP)[_-]?(KEY|ID|SECRET)\b
(?i)huawei[_-]?(access|secret|api|app)[_-]?(key|id|secret)\s*[=:]
# ๅไธบไบๆๅก็ซฏ็น
https?://[\w-]+\.(obs|evs|ecs|vpc|iam|kms)\.[\w-]+\.myhuaweicloud\.com
https?://[\w-]+\.myhuaweicloud\.com
# ๅไธบๅ
้จๅๅ
(?i)(host|url|endpoint|server|domain)\s*[=:]\s*['\"]?https?://[\w-]+\.huawei\.(com|cn)
# ๅไธบ้ฎ็ฎฑ
\b[\w.-]+@(huawei|huaweicloud|hicloud)\.(com|cn|de|jp)\b
# ๅไธบGitไปๅบ
(git@|https?://)(gitlab|git|code)\.huawei\.com[/:][\w/-]+(\.git)?
# ๅไธบ่ฎค่ฏไฟกๆฏ
(?i)(huawei|hwc|hw)[_-]?(username|password|token|credential)\s*[=:]\s*['\"]?[^'\"\s]+
(?i)(huawei|hwc|hw)[_-]?(client[_-]?id|client[_-]?secret|app[_-]?id|app[_-]?secret)\s*[=:]\s*['\"]?[^'\"\s]+
5. Personal Identifiable Information (PII)
5.1 ไธญๅฝ่บซไปฝ่ฏๅท็
# ไธญๅฝๅฑ
ๆฐ่บซไปฝ่ฏ - 18ไฝ (ๅซๆ ก้ชไฝ)
# ๆ ผๅผ: 6ไฝๅฐๅบ็ + 8ไฝๅบ็ๆฅๆ + 3ไฝ้กบๅบ็ + 1ไฝๆ ก้ช็
\b[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]\b
# ไธญๅฝๅฑ
ๆฐ่บซไปฝ่ฏ - 15ไฝ (ๆง็)
# ๆ ผๅผ: 6ไฝๅฐๅบ็ + 6ไฝๅบ็ๆฅๆ + 3ไฝ้กบๅบ็
\b[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}\b
# ่บซไปฝ่ฏๅทไธไธๆๆฃๆต (้ไฝ่ฏฏๆฅ)
(?i)(่บซไปฝ่ฏ|id[_-]?card|identity[_-]?card|ๅฑ
ๆฐ่บซไปฝ่ฏ|่ฏไปถๅท็ )\s*[๏ผ:๏ผ=]\s*['\"]?[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]
่บซไปฝ่ฏๆ ก้ช่งๅ:
ๆ ก้ชไฝ่ฎก็ฎ:
1. ๅ17ไฝๅๅซไนไปฅ็ณปๆฐ: 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2
2. ๆฑๅๅๅฏน11ๅๆจก
3. ๅฏนๅบๆ ก้ช็ : 1,0,X,9,8,7,6,5,4,3,2
5.2 ไธญๅฝ้ถ่กๅกๅท
# ้ถ่กๅกๅท้็จๆ ผๅผ - 16-19ไฝ
\b\d{16,19}\b
# ้ถ่กๅกๅทไธไธๆๆฃๆต (้ไฝ่ฏฏๆฅ)
(?i)(้ถ่กๅก|ๅกๅท|card[_-]?number|bank[_-]?card|่ดฆๅท|account)\s*[๏ผ:๏ผ=]\s*['\"]?\d{16,19}
# ๅ้ถ่กBIN็ ่ฏๅซ
# ๅทฅๅ้ถ่ก (ICBC)
\b(622202|622203|622208|620200|620208|621226|621225|621227|621229|621224)\d{10,13}\b
# ๅไธ้ถ่ก (ABC)
\b(622848|622849|622845|622846|622847|622840|622841|622842|622843|622844)\d{10,13}\b
# ไธญๅฝ้ถ่ก (BOC)
\b(621660|621661|621662|621663|621665|621667|621668|621669|621666|621258)\d{10,13}\b
# ๅปบ่ฎพ้ถ่ก (CCB)
\b(622700|622280|622280|622281|622282|622283|622284|622285|622286|622287)\d{10,13}\b
# ไบค้้ถ่ก (BOCOM)
\b(622260|622261|622262|622263|622264|622265|622266|622267|622268|622269)\d{10,13}\b
# ๆๅ้ถ่ก (CMB)
\b(622580|622581|622582|622583|622584|622585|622586|622587|622588|622589)\d{10,13}\b
# ๆฐ็้ถ่ก (CMBC)
\b(622615|622617|622618|622619|622620|622621|622622|622623|622624|622625)\d{10,13}\b
# ๆตฆๅ้ถ่ก (SPDB)
\b(622260|622261|622262|622263|622264|622265|622266|622267|622268|622269)\d{10,13}\b
# ไฟก็จๅกๅท - 16ไฝ (Visa/MasterCard/JCB)
\b4\d{15}\b # Visa
\b5[1-5]\d{14}\b # MasterCard
\b35\d{14}\b # JCB
\b(34|37)\d{13}\b # American Express
\b(6011|65|64[4-9])\d{12,15}\b # Discover
\b(62|81)\d{14,17}\b # UnionPay
้ถ่กๅกLuhnๆ ก้ช:
def luhn_check(card_number):
digits = [int(d) for d in str(card_number)]
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
total = sum(odd_digits)
for d in even_digits:
d *= 2
if d > 9:
d -= 9
total += d
return total % 10 == 0
5.3 ไธญๅฝๆค็
งๅท็
# ไธญๅฝๆค็
ง - ๆ ผๅผ: E + 8ไฝๆฐๅญ ๆ G + 8ไฝๆฐๅญ
\b[EG][0-9]{8}\b
# ็ตๅญๆค็
ง - ๆ ผๅผ: C + 8ไฝๆฐๅญ + 1ไฝๆ ก้ช
\bC[0-9]{8}[A-Z]\b
# ๅ
ฌๅกๆค็
ง - ๆ ผๅผ: SE + 7ไฝๆฐๅญ ๆ P + 7ไฝๆฐๅญ
\b(SE[0-9]{7}|P[0-9]{7})\b
# ๆค็
งไธไธๆๆฃๆต
(?i)(ๆค็
ง|passport|passport[_-]?no|ๆค็
งๅท็ )\s*[๏ผ:๏ผ=]\s*['\"]?[EG][0-9]{8}
5.4 ไธญๅฝ้ฉพ้ฉถ่ฏๅท็
# ้ฉพ้ฉถ่ฏๅท - 18ไฝ (ไธ่บซไปฝ่ฏๅท็ธๅ)
\b[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]\b
# ๆกฃๆก็ผๅท - 12ไฝ
\b[0-9]{12}\b
# ้ฉพ้ฉถ่ฏไธไธๆๆฃๆต
(?i)(้ฉพ้ฉถ่ฏ|้ฉพ็
ง|driving[_-]?license|driver[_-]?license)\s*[๏ผ:๏ผ=]\s*['\"]?[1-9]\d{17}[\dXx]
5.5 ไธญๅฝ็คพไผไฟ้ๅท็
# ็คพไผไฟ้ๅท - 18ไฝ (ไธ่บซไปฝ่ฏๅท็ธๅ)
\b[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]\b
# ็คพไฟๅกๅท - ๅๅฐๆ ผๅผไธๅ๏ผ้ๅธธ9-12ไฝ
(?i)(็คพไฟ|็คพไฟๅก|social[_-]?security|ssn)\s*[๏ผ:๏ผ=]\s*['\"]?\d{9,12}
# ็คพไฟไธไธๆๆฃๆต
(?i)(็คพไผไฟ้ๅท|็คพไฟๅท|็คพไฟ็ผๅท|social[_-]?security[_-]?number)\s*[๏ผ:๏ผ=]
5.6 ไธญๅฝๅปไฟๅกๅท
# ๅปไฟๅกๅท - ๅๅฐๆ ผๅผไธๅ
(?i)(ๅปไฟ|ๅปไฟๅก|medical[_-]?insurance|health[_-]?card)\s*[๏ผ:๏ผ=]\s*['\"]?\d{8,18}
# ๅปไฟ็ตๅญๅญ่ฏ็
(?i)(ๅปไฟๅญ่ฏ|ๅปไฟ็ตๅญๅญ่ฏ)\s*[๏ผ:๏ผ=]\s*['\"]?\d{16,20}
5.7 ไธญๅฝๅๅฎ่ฏ/ๅฃซๅ
ต่ฏ
# ๅๅฎ่ฏ - ๆ ผๅผ: ๅๅญ็ฌฌXXXXXXๅท ๆ ็ฎๅๆ ผๅผ
(?i)(ๅๅฎ่ฏ|ๅๅฎ|ๅๅญ็ฌฌ)\s*[็ฌฌ]?\s*[0-9]{6,8}\s*[ๅท]?
# ๅฃซๅ
ต่ฏ
(?i)(ๅฃซๅ
ต่ฏ|ๅฃซๅ
ต)\s*[็ฌฌ]?\s*[0-9]{6,8}\s*[ๅท]?
# ๆ่ๅนฒ้จ่ฏ
(?i)(ๆ่่ฏ|ๆ่ๅนฒ้จ)\s*[็ฌฌ]?\s*[0-9]{6,8}\s*[ๅท]?
# ๅๅฎ่ฏไธไธๆๆฃๆต
(?i)(military[_-]?id|officer[_-]?id)\s*[๏ผ:๏ผ=]\s*['\"]?[ๅๅญ็ฌฌ]?\d{6,8}
5.8 ๆธฏๆพณ้่ก่ฏ/ๅฐๆนพ้่ก่ฏ
# ๆธฏๆพณ้่ก่ฏ - ๆ ผๅผ: C + 8ไฝๆฐๅญ ๆ K + 8ไฝๆฐๅญ
\b[CK][0-9]{8}\b
# ๅฐๆนพ้่ก่ฏ - ๆ ผๅผ: L + 8ไฝๆฐๅญ ๆ M + 8ไฝๆฐๅญ
\b[LM][0-9]{8}\b
# ๆธฏๆพณๅฑ
ๆฐๆฅๅพๅ
ๅฐ้่ก่ฏ - ๆ ผๅผ: H + 10ไฝๆฐๅญ ๆ M + 10ไฝๆฐๅญ
\b[HM][0-9]{10}\b
# ๅฐๆนพๅฑ
ๆฐๆฅๅพๅคง้้่ก่ฏ - ๆ ผๅผ: 8ไฝๆฐๅญ ๆ ๆฐ็K + 8ไฝๆฐๅญ
\bK?[0-9]{8}\b
# ้่ก่ฏไธไธๆๆฃๆต
(?i)(ๆธฏๆพณ้่ก่ฏ|ๅฐๆนพ้่ก่ฏ|ๅไนก่ฏ|ๅฐ่่ฏ|travel[_-]?permit)\s*[๏ผ:๏ผ=]\s*['\"]?[CKLM][0-9]{8,10}
5.9 ไธญๅฝ็ต่ฏๅท็
# ๆๆบๅท็ - 11ไฝ (ไธญๅฝๅคง้)
\b1[3-9]\d{9}\b
# ๆๆบๅท็ ไธไธๆๆฃๆต
(?i)(ๆๆบ|ๆๆบๅท|mobile|phone|็ต่ฏ|่็ณปๆนๅผ)\s*[๏ผ:๏ผ=]\s*['\"]?1[3-9]\d{9}
# ๅบงๆบๅท็ - ๅบๅท+ๅท็
\b0\d{2,3}-?\d{7,8}\b
# 400/800็ต่ฏ
\b[48]00-?\d{3}-?\d{4}\b
# ๅฝ้
็ต่ฏๆ ผๅผ
\+86\s*1[3-9]\d{9}
\+?[1-9]\d{6,14}
5.10 ๅฝ้
่บซไปฝ่ฏไปถ
# ็พๅฝ็คพไผๅฎๅ
จๅท (SSN) - ๆ ผๅผ: XXX-XX-XXXX
\b\d{3}-\d{2}-\d{4}\b
# ็พๅฝSSNไธไธๆๆฃๆต
(?i)(ssn|social[_-]?security)\s*[๏ผ:๏ผ=]\s*['\"]?\d{3}-\d{2}-\d{4}
# ็พๅฝๆค็
ง - 9ไฝๆฐๅญ
\b[0-9]{9}\b
(?i)(us[_-]?passport|็พๅฝๆค็
ง)\s*[๏ผ:๏ผ=]\s*['\"]?[0-9]{9}
# ่ฑๅฝๅฝๅฎถไฟ้ฉๅท (NINO) - ๆ ผๅผ: AA 12 34 56 A
\b[A-Z]{2}\s?\d{2}\s?\d{2}\s?\d{2}\s?[A-D]\b
# ่ฑๅฝๆค็
ง - 9ไฝๆฐๅญ
\b[0-9]{9}\b
# ๅ ๆฟๅคง็คพไผไฟ้ฉๅท (SIN) - 9ไฝๆฐๅญ
\b\d{3}-?\d{3}-?\d{3}\b
# ๆพณๅคงๅฉไบ็จๅท (TFN) - 8-9ไฝๆฐๅญ
\b\d{3}\s?\d{3}\s?\d{3}\b
# ๆฅๆฌไธชไบบ็ชๅท (My Number) - 12ไฝๆฐๅญ
\b\d{4}-?\d{4}-?\d{4}\b
# ้ฉๅฝๅฑ
ๆฐ็ป่ฎฐๅท (RRN) - 13ไฝๆฐๅญ
\b\d{6}-?\d{7}\b
# ๆฐๅ ๅก่บซไปฝ่ฏ (NRIC) - ๆ ผๅผ: S/T + 7ไฝๆฐๅญ + ๅญๆฏ
\b[STFG]\d{7}[A-Z]\b
# ้ฆๆธฏ่บซไปฝ่ฏ - ๆ ผๅผ: ๅญๆฏ + 6-7ไฝๆฐๅญ + (ๅญๆฏ/ๆฐๅญ)
\b[A-Z]\d{6,7}\([A-Z0-9]\)\b
5.11 ๅ
ถไปไธชไบบ้็งไฟกๆฏ
# ็ตๅญ้ฎ็ฎฑ
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
# ้ฎ็ฎฑไธไธๆๆฃๆต
(?i)(้ฎ็ฎฑ|email|้ฎไปถ|mail)\s*[๏ผ:๏ผ=]\s*['\"]?[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
# ๅงๅ - ไธญๆ (2-4ไธชๆฑๅญ)
[\u4e00-\u9fa5]{2,4}
# ๅงๅไธไธๆๆฃๆต
(?i)(ๅงๅ|ๅๅญ|name)\s*[๏ผ:๏ผ=]\s*['\"]?[\u4e00-\u9fa5]{2,4}
# ๅบ็ๆฅๆ
\b(19|20)\d{2}[-/ๅนด](0[1-9]|1[0-2])[-/ๆ](0[1-9]|[12]\d|3[01])[ๆฅ]?\b
# ๅฎถๅบญไฝๅ - ็ๅธๅบๅฟๅ
ณ้ฎ่ฏ
(?i)(ๅฐๅ|ไฝๅ|address|ๅฎถๅบญไฝๅ)\s*[๏ผ:๏ผ=]\s*['\"]?[\u4e00-\u9fa5]+็[\u4e00-\u9fa5]+ๅธ[\u4e00-\u9fa5]+
# ่ฝฆ็ๅท
[ไบฌๆดฅๆฒชๆธๅ่ฑซไบ่พฝ้ปๆน็้ฒๆฐ่ๆต่ตฃ้ๆก็ๆ่้ๅ้ฝ่ดต็ฒค้่ๅทๅฎ็ผไฝฟ้ข][A-Z][A-HJ-NP-Z0-9]{5,6}
# ่ฝฆๆถๅท (VIN) - 17ไฝ
\b[A-HJ-NPR-Z0-9]{17}\b
# ๅๅจๆบๅท - 6-8ไฝ
(?i)(ๅๅจๆบๅท|ๅๅจๆบ)\s*[๏ผ:๏ผ=]\s*['\"]?[A-Z0-9]{6,8}
5. PII Detection Summary Table
| ๆฐๆฎ็ฑปๅ | ๆ ผๅผ | ็คบไพ | ้ฃ้ฉ็ญ็บง | ๆ ก้ชๆนๅผ |
|---|
| ไธญๅฝ่บซไปฝ่ฏ(18ไฝ) | 6ไฝๅฐๅบ+8ไฝๆฅๆ+3ไฝ้กบๅบ+1ไฝๆ ก้ช | 110101199001011234 | ไธฅ้ | ๆ ก้ชไฝ็ฎๆณ |
| ไธญๅฝ่บซไปฝ่ฏ(15ไฝ) | 6ไฝๅฐๅบ+6ไฝๆฅๆ+3ไฝ้กบๅบ | 110101900101123 | ้ซๅฑ | ๆ ผๅผ้ช่ฏ |
| ้ถ่กๅกๅท | 16-19ไฝๆฐๅญ | 6222021234567890123 | ไธฅ้ | Luhn็ฎๆณ |
| ๆค็
งๅท็ | E/G + 8ไฝๆฐๅญ | E12345678 | ้ซๅฑ | ๆ ผๅผ้ช่ฏ |
| ้ฉพ้ฉถ่ฏๅท | 18ไฝ(ๅ่บซไปฝ่ฏ) | 110101199001011234 | ้ซๅฑ | ๆ ก้ชไฝ็ฎๆณ |
| ็คพไฟๅท | 18ไฝ(ๅ่บซไปฝ่ฏ) | 110101199001011234 | ้ซๅฑ | ๆ ก้ชไฝ็ฎๆณ |
| ๅๅฎ่ฏ | ๅๅญ็ฌฌ+6-8ไฝๆฐๅญ | ๅๅญ็ฌฌ123456ๅท | ้ซๅฑ | ๆ ผๅผ้ช่ฏ |
| ๆธฏๆพณ้่ก่ฏ | C/K + 8ไฝๆฐๅญ | C12345678 | ้ซๅฑ | ๆ ผๅผ้ช่ฏ |
| ๅฐๆนพ้่ก่ฏ | L/M + 8ไฝๆฐๅญ | L12345678 | ้ซๅฑ | ๆ ผๅผ้ช่ฏ |
| ๆๆบๅท็ | 1 + 10ไฝๆฐๅญ | 13812345678 | ไธญๅฑ | ๅทๆฎต้ช่ฏ |
| ็พๅฝSSN | XXX-XX-XXXX | 123-45-6789 | ไธฅ้ | ๆ ผๅผ้ช่ฏ |
| ๆฐๅ ๅกNRIC | S/T + 7ไฝๆฐๅญ + ๅญๆฏ | S1234567A | ้ซๅฑ | ๆ ก้ชไฝ็ฎๆณ |
| ้ฆๆธฏ่บซไปฝ่ฏ | ๅญๆฏ+6-7ไฝๆฐๅญ+(ๆ ก้ช) | A123456(7) | ้ซๅฑ | ๆ ก้ชไฝ็ฎๆณ |
6. Network & Infrastructure
# IP Address (Private)
\b(10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3})\b
# IP Address (Public) - with context
(?i)(server|host|ip|address)\s*[=:]\s*['\"]?\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
# Port with Service
(?i)(port|listen)\s*[=:]\s*\d{2,5}
# Domain with Credentials
(?i)(ftp|sftp|ssh|telnet)://[^:]+:[^@]+@[^\s\"']+
# Internal URL
(?i)(internal|intranet|private)[_-]?(url|host|endpoint)
7. Configuration & Environment
# Environment Variable Assignment
^[A-Z_]+\s*=\s*['\"][^'\"]{8,}['\"]
# .env File Pattern
(?i)(secret|password|token|key|credential)\s*=\s*
# Docker Registry
(?i)(docker[_-]?registry|registry[_-]?url)['\":\s]*['\"]?[^\s\"']+
# Kubernetes Secret
(?i)kind:\s*Secret
(?i)kubectl.*--token
# Terraform Variable
variable\s+['\"]?(password|secret|token|key)['\"]?\s*\{
Language-Specific Patterns
Python
# Environment Variable
os\.environ\[['\"]\w+['\"]\]\s*=\s*['\"][^'\"]+['\"]
os\.getenv\(['\"]\w+['\"]\)
# Config Assignment
config\[['\"]\w+['\"]\]\s*=\s*['\"][^'\"]+['\"]
settings\.\w+\s*=\s*['\"][^'\"]+['\"]
# Django Secret Key
SECRET_KEY\s*=\s*['\"][^'\"]+['\"]
Java
# System Property
System\.getenv\(['\"]\w+['\"]\)
System\.setProperty\(['\"]\w+['\"],\s*['\"][^'\"]+['\"]\)
# Properties File
password\s*=\s*[^\s]+
jdbc\.url\s*=\s*[^\s]+
# Spring Boot
@Value\(['\"]\$\{[^}]+\}['\"]\)
JavaScript/TypeScript
# Process Env
process\.env\.\w+\s*=\s*['\"][^'\"]+['\"]
process\.env\.\w+['\"]\)
# Const Assignment
const\s+(API_KEY|SECRET|PASSWORD|TOKEN)\s*=\s*['\"][^'\"]+['\"]
# Local Storage
localStorage\.setItem\(['\"]\w+['\"],\s*['\"][^'\"]+['\"]\)
sessionStorage\.setItem\(['\"]\w+['\"],\s*['\"][^'\"]+['\"]\)
Go
# OS Getenv
os\.Getenv\(['\"]\w+['\"]\)
# Const Declaration
const\s+\w+\s*=\s*['\"][^'\"]{16,}['\"]
# Variable Declaration
var\s+\w+\s*=\s*['\"][^'\"]{16,}['\"]
C/C++
# Define Macro
#define\s+(PASSWORD|SECRET|KEY|TOKEN)\s+['\"][^'\"]+['\"]
# Char Array
char\s+\w+\[\]\s*=\s*['\"][^'\"]+['\"]
# Getenv
getenv\(['\"]\w+['\"]\)
Lua
# OS Getenv
os\.getenv\(['\"]\w+['\"]\)
# Local Variable
local\s+\w+\s*=\s*['\"][^'\"]{16,}['\"]
False Positive Reduction
Context Constraints
ไป
ๅจไปฅไธไธไธๆไธญ่งฆๅๆๆไฟกๆฏๆฃๆต:
- ่ตๅผ่ฏญๅฅ (
=, :, =>)
- ้
็ฝฎๆไปถ (
.env, .yaml, .json, .properties)
- ็ฏๅขๅ้่ฎพ็ฝฎ
- ๅฝๆฐๅๆฐไธญ็ๅญ่ฏ
Exclusion Rules
ๆ้คไปฅไธๆ
ๅต:
# ๆณจ้่ก
^\s*#
^\s*//
^\s*\*
# ็คบไพ/ๆๆกฃ
example|sample|test|mock|dummy|placeholder|fake
# ๅ้ๅๅฃฐๆ (้่ตๅผ)
(password|secret|key)\s*:\s*(string|str)
# ็ฉบๅผ
(password|secret|key)\s*[=:]\s*['\"]['\"]
(password|secret|key)\s*[=:]\s*null
(password|secret|key)\s*[=:]\s*None
Validation Rules
้ช่ฏๅน้
็ปๆ:
- ้ฟๅบฆๆฃๆฅ: ๅฏ้ฅ/ๅฏ็ ่ณๅฐ8ๅญ็ฌฆ
- ๆ ผๅผๆฃๆฅ: ็ฌฆๅ้ขๆ็ๆ ผๅผๆจกๅผ
- ไธไธๆๆฃๆฅ: ๆ้คๆต่ฏๆไปถๅ็คบไพไปฃ็
- ้ๅคๆฃๆฅ: ๅไธๅผๅคๆฌกๅบ็ฐๅฏ่ฝๆฏๅ ไฝ็ฌฆ
Scan Commands
Quick Scan
grep -rnE "(password|secret|token|key|credential)" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.go" --include="*.c" --include="*.cpp" . | grep -v "test\|spec\|example\|sample\|mock"
Deep Scan
grep -rnE "(?i)(password|passwd|pwd|secret|token|api[_-]?key|access[_-]?key|private[_-]?key)" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.go" --include="*.c" --include="*.cpp" --include="*.yaml" --include="*.yml" --include="*.json" --include="*.properties" --include="*.env" . | grep -v "^\s*#\|^\s*//\|test\|spec\|example"
Enterprise Scan
grep -rnE "\b[a-zA-Z]00[0-9]{6}\b|\b[wW][xX][0-9]{7}\b|\bDTS[0-9]{13}\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.go" .
grep -rnE "(?i)(huawei|hwc|hw)[_-]?(password|token|secret|key|credential)" --include="*.py" --include="*.java" --include="*.yaml" --include="*.properties" .
grep -rnE "[\w.-]+@(huawei|huaweicloud|hicloud)\.(com|cn)" --include="*.py" --include="*.java" --include="*.md" .
PII Scan (ไธชไบบ้็งๆฐๆฎๆซๆ)
grep -rnE "\b[1-9][0-9]{5}(19|20)[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9Xx]\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.go" --include="*.csv" --include="*.json" .
grep -rnE "\b[0-9]{16,19}\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.csv" --include="*.json" . | grep -iE "(card|bank|account|ๅก|่ดฆๅท)"
grep -rnE "\b1[3-9][0-9]{9}\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.csv" --include="*.json" .
grep -rnE "\b[EG][0-9]{8}\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.csv" --include="*.json" .
grep -rnE "\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b" --include="*.py" --include="*.java" --include="*.js" --include="*.ts" --include="*.csv" --include="*.json" .
grep -rnE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" --include="*.py" --include="*.java" --include= --include= --include= --include= .
grep -rnE --include= --include= --include= --include= --include= --include= .
grep -rnE --include= --include= --include= --include= --include= --include= .
Git History Scan
git log -p | grep -E "(password|secret|token|key).*=.*['\"][^'\"]+['\"]"
git log --all -p | grep -E "(password|secret|token|key).*=.*['\"][^'\"]+['\"]"
Scan Workflow
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Sensitive Information Scan Workflow โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ Step 1: Detect Languages โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Identify file types โ Select language-specific patterns โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 2: Universal Pattern Scan โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ API keys, passwords, tokens, private keys โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 3: Enterprise Pattern Scan โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๅทฅๅท, DTSๅๅท, HUAWEI็ธๅ
ณ, ไผไธๅๅ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 4: PII Pattern Scan โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ่บซไปฝ่ฏ, ้ถ่กๅก, ๆค็
ง, ๆๆบๅท, ้ฎ็ฎฑ, ่ฝฆ็ๅท โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 5: False Positive Filtering โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Exclude comments, tests, examples, placeholders โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 6: Generate Report โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Categorize findings โ Severity rating โ Recommendations โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 7: Output Report File โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Save report to file โ Naming: ไปไปๅ_Sensitive_Info_ๆฅๆ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Step 8: Cleanup โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Delete downloaded code repository โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Report Output
Report File Naming
ๆฅๅๆไปถๅฝๅๆ ผๅผ๏ผไปฃ็ ไปๅบๅ_Sensitive_Info_ๅนดๆๆฅ.md
็คบไพ:
KAE_Sensitive_Info_20260402.md
ffmpeg_Sensitive_Info_20260402.md
openclaw_Sensitive_Info_20260402.md
Report Output Location
ๆฅๅ่พๅบๅฐๅฝๅๅทฅไฝ็ฎๅฝ๏ผc:\Users\z00471535\Documents\trae_projects\Security\
Report Generation Process
- ๆซๆๅฎๆๅ๏ผ็ๆMarkdownๆ ผๅผๆฅๅ
- ไฝฟ็จๅฝๅๆฅๆไฝไธบๆไปถๅๅ็ผ
- ๅฐๆฅๅไฟๅญไธบๆไปถ
- ๅ ้คไธ่ฝฝ็ไปฃ็ ไปๅบ็ฎๅฝ
Report Format
# Sensitive Information Scan Report
## Summary
- **Total Files Scanned**: X
- **Total Findings**: X
- **Critical**: X | **High**: X | **Medium**: X | **Low**: X
## Findings by Category
### 1. API Keys & Secrets
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
### 2. Authentication Credentials
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
### 3. Enterprise Sensitive Data
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
### 4. PII - Identity Documents (่บซไปฝ่ฏไปถ)
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
| file.py | 123 | ไธญๅฝ่บซไปฝ่ฏ | 110101199001011234 | Critical | ่ฑๆๅค็ |
### 5. PII - Financial Data (้่ๆฐๆฎ)
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
| file.py | 456 | ้ถ่กๅกๅท | 6222021234567890 | Critical | ่ฑๆๅค็ |
### 6. PII - Contact Information (่็ณปๆนๅผ)
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
| file.py | 789 | ๆๆบๅท็ | 13812345678 | Medium | ่ฑๆๅค็ |
| file.py | 790 | ็ตๅญ้ฎ็ฎฑ | user@example.com | Low | ๆฃๆฅๅฟ
่ฆๆง |
### 7. PII - Other Personal Data (ๅ
ถไปไธชไบบๆฐๆฎ)
| File | Line | Type | Match | Severity | Action |
|------|------|------|-------|----------|--------|
| file.py | 100 | ่ฝฆ็ๅท | ไบฌA12345 | Medium | ่ฑๆๅค็ |
## PII Compliance Check (้็งๅ่งๆฃๆฅ)
### ๆฐๆฎ็ฑปๅ็ป่ฎก
| ๆฐๆฎ็ฑปๅ | ๆฐ้ | ๅ่ง็ถๆ | ๅคๆณจ |
|----------|------|----------|------|
| ่บซไปฝ่ฏๅท | X | โ ้ๆดๆน | ้่ฑๆๆๅ ๅฏๅญๅจ |
| ้ถ่กๅกๅท | X | โ ้ๆดๆน | ้่ฑๆๆๅ ๅฏๅญๅจ |
| ๆๆบๅท็ | X | โ ๏ธ ้่ฏไผฐ | ๆฃๆฅๆถ้ๅฟ
่ฆๆง |
| ้ฎ็ฎฑๅฐๅ | X | โ ๏ธ ้่ฏไผฐ | ๆฃๆฅๆถ้ๅฟ
่ฆๆง |
### ๅ่งๅปบ่ฎฎ
1. ๆๆๆฐๆฎ่ฑๆ: ่บซไปฝ่ฏใ้ถ่กๅก็ญๆๆๆฐๆฎ้่ฑๆๅญๅจ
2. ๆฐๆฎๆๅฐๅ: ไป
ๆถ้ๅฟ
่ฆ็ไธชไบบไฟกๆฏ
3. ๅ ๅฏๅญๅจ: ๆๆๆฐๆฎๅบๅ ๅฏๅญๅจ
4. ่ฎฟ้ฎๆงๅถ: ้ๅถๆๆๆฐๆฎ็่ฎฟ้ฎๆ้
5. ๅฎก่ฎกๆฅๅฟ: ่ฎฐๅฝๆๆๆฐๆฎ็่ฎฟ้ฎๆฅๅฟ
## Recommendations
Move secrets to environment variables
Use secret management tools (Vault, AWS Secrets Manager)
Add sensitive files to .gitignore
Rotate exposed credentials immediately
Implement pre-commit hooks for secret detection
PII data masking and encryption
Data minimization review
[ ] .env files
[ ] Configuration files
[ ] Source code with hardcoded values
[ ] Database files
[ ] Log files
[ ] Git history
Severity Classification
| ็บงๅซ | ๆ่ฟฐ | ็คบไพ |
|---|
| Critical | ๅฏ็ดๆฅๅฏผ่ด็ณป็ป่ขซๅ
ฅไพตๆไธฅ้้็งๆณ้ฒ | AWSๅฏ้ฅใ็ง้ฅใๆฐๆฎๅบๅฏ็ ใ่บซไปฝ่ฏๅทใ้ถ่กๅกๅท |
| High | ๅฏๅฏผ่ดๆๆๆฐๆฎๆณ้ฒ | APIๅฏ้ฅใ็จๆทๅฏ็ ใTokenใๆค็
งๅทใ้ฉพ้ฉถ่ฏๅท |
| Medium | ๅฏ่ฝๆณ้ฒๅ
้จไฟกๆฏๆไธชไบบ้็ง | ๅ
็ฝIPใๅ
้จๅๅใๅทฅๅทใๆๆบๅทใ่ฝฆ็ๅท |
| Low | ไฟกๆฏๆณ้ฒ้ฃ้ฉ่พไฝ | ้ฎ็ฎฑๅฐๅใๅ
ฌ็ฝIPใๅงๅ |
Remediation Actions
For API Keys
export API_KEY="your-key-here"
api_key: ${API_KEY}
For Passwords
aws secretsmanager get-secret-value --secret-id my-secret
vault kv get secret/myapp/password
For Enterprise Data
echo "A00123456" | sed 's/[0-9]/X/g'
employee_id: ${EMPLOYEE_ID}
dts_number: ${DTS_NUMBER}
For PII Data (ไธชไบบ้็งๆฐๆฎ่ฑๆ)
def mask_id_card(id_card):
if len(id_card) == 18:
return id_card[:6] + '********' + id_card[-4:]
return id_card
def mask_bank_card(card_number):
if len(card_number) >= 16:
return card_number[:4] + '******' + card_number[-4:]
return card_number
def mask_phone(phone):
if len(phone) == 11:
return phone[:3] + '****' + phone[-4:]
return phone
def mask_email(email):
if '@' in email:
parts = email.split('@')
if len(parts[0]) > :
parts[][:] + + parts[]
email
():
(name) >= :
name[] + * ((name) - )
name
():
re
= re.(, address)
:
.group() +
address[:] +
():
(plate) >= :
plate[:] + + plate[-:]
plate
function maskIdCard(idCard) {
if (idCard.length === 18) {
return idCard.substring(0, 6) + '********' + idCard.substring(14);
}
return idCard;
}
function maskBankCard(cardNumber) {
if (cardNumber.length >= 16) {
return cardNumber.substring(0, 4) + '******' + cardNumber.substring(cardNumber.length - 4);
}
return cardNumber;
}
function maskPhone(phone) {
if (phone.length === 11) {
return phone.substring(0, 3) + '****' + phone.substring(7);
}
return phone;
}
function maskEmail(email) {
const parts = email.();
(parts. === && parts[]. > ) {
parts[].(, ) + + parts[];
}
email;
}
public class DataMasker {
public static String maskIdCard(String idCard) {
if (idCard != null && idCard.length() == 18) {
return idCard.substring(0, 6) + "********" + idCard.substring(14);
}
return idCard;
}
public static String maskBankCard(String cardNumber) {
if (cardNumber != null && cardNumber.length() >= 16) {
return cardNumber.substring(0, 4) + "******" + cardNumber.substring(cardNumber.length() - 4);
}
return cardNumber;
}
public static String maskPhone(String phone) {
if (phone != null && phone.length() == 11) {
return phone.substring(0, 3) + "****" + phone.substring(7);
}
return phone;
}
public static String {
(email != && email.contains()) {
String[] parts = email.split();
(parts[].length() > ) {
parts[].substring(, ) + + parts[];
}
}
email;
}
}
Usage Examples
Example 1: Quick Scan
User: "Scan this project for sensitive information"
Action:
1. Detect languages
2. Run universal pattern scan
3. Filter false positives
4. Generate summary report
5. Save report to file: ไปๅบๅ_Sensitive_Info_ๅนดๆๆฅ.md
6. Cleanup downloaded code
Example 2: Enterprise Scan
User: "Check for enterprise sensitive data leaks"
Action:
1. Scan for ๅทฅๅท, DTSๅๅท
2. Scan for HUAWEI-related credentials
3. Check internal domains and emails
4. Generate enterprise-specific report
5. Save report to file: ไปๅบๅ_Sensitive_Info_ๅนดๆๆฅ.md
6. Cleanup downloaded code
Example 3: PII Scan
User: "Scan for personal identifiable information"
Action:
1. Scan for ่บซไปฝ่ฏๅท, ้ถ่กๅกๅท
2. Scan for ๆๆบๅท, ้ฎ็ฎฑ, ๆค็
งๅท
3. Check for ่ฝฆ็ๅท, ้ฉพ้ฉถ่ฏๅท
4. Generate PII compliance report
5. Save report to file: ไปๅบๅ_Sensitive_Info_ๅนดๆๆฅ.md
6. Cleanup downloaded code
Example 4: Deep Scan with Git History
User: "Deep scan including git history"
Action:
1. Scan current codebase
2. Scan git history for committed secrets
3. Check all branches
4. Generate comprehensive report
5. Save report to file: ไปๅบๅ_Sensitive_Info_ๅนดๆๆฅ.md
6. Cleanup downloaded code
Example 5: Remote Repository Scan
User: "Scan https://gitcode.com/boostkit/KAE.git for sensitive information"
Action:
1. Clone repository to temp directory (ไปๅบๅ-scan/)
2. Detect languages
3. Run all pattern scans (API keys, credentials, enterprise, PII)
4. Filter false positives
5. Generate comprehensive report
6. Save report to file: KAE_Sensitive_Info_20260402.md
7. Delete temp directory (KAE-scan/)
Best Practices
- Scan Early - Integrate into CI/CD pipeline
- Scan Often - Run on every commit
- Use Pre-commit Hooks - Prevent secrets from being committed
- Rotate Regularly - Change credentials periodically
- Least Privilege - Use minimal required permissions
- Audit Access - Log all secret access
- Encrypt at Rest - Never store secrets in plain text
- Use Secret Managers - Centralize secret management
- PII Masking - Always mask sensitive PII data
- Data Minimization - Only collect necessary personal data
- Compliance Check - Ensure GDPR/PIPL compliance