Skip to main content

string_analyze/rules/core/
apikey.rs

1use crate::rules::lazy_rule;
2
3lazy_rule!(
4    RE_GITHUB_PAT = r#"\bgh[pousr]_[A-Za-z0-9_]{36,255}\b"#,
5    "发现 Github Token",
6    80
7);
8lazy_rule!(
9    RE_GITHUB_FINEGRAINED = r#"\bgithub_pat_[A-Za-z0-9_]{60,}\b"#,
10    "发现 Github Fine-grained Token",
11    80
12);
13lazy_rule!(
14    RE_GOOGLE_API = r#"\bAIza[0-9A-Za-z_-]{35}\b"#,
15    "发现 Google API Key",
16    80
17);
18lazy_rule!(
19    RE_SLACK_TOKEN = r#"\bxox[baprs]-[0-9]{10,13}-[a-zA-Z0-9-]{24,34}\b"#,
20    "发现 Slack Token",
21    80
22);
23lazy_rule!(
24    RE_STRIPE_KEY = r#"\b[rs]k_(?:live|test)_[a-zA-Z0-9]{24}\b"#,
25    "发现 Stripe API Key",
26    80
27);
28lazy_rule!(
29    RE_DISCORD_TOKEN = r#"[MN][A-Za-z\d]{23}\.[\w-]{6}\.[\w-]{27}"#,
30    "发现 Discord Token",
31    80
32);
33
34lazy_rule!(
35    RE_TELEGRAM_BOT = r#"\b[0-9]{8,10}:[a-zA-Z0-9_-]{35}\b"#,
36    "发现 Telegram Bot Token",
37    80
38);
39
40lazy_rule!(
41    RE_DIGITALOCEAN_TOKEN = r#"dop_v1_[a-f0-9]{64}"#,
42    "发现 DigitalOcean Token",
43    80
44);
45lazy_rule!(
46    RE_NPM_TOKEN = r#"npm_[A-Za-z0-9]{36}"#,
47    "发现 NPM Token",
48    80
49);
50lazy_rule!(
51    RE_PYPI_TOKEN = r#"pypi-AgEIcHlwaS5vcmc[A-Za-z0-9\-_]{70,}"#,
52    "发现 PyPI Token",
53    80
54);
55lazy_rule!(
56    RE_SENDGRID_API = r#"SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}"#,
57    "发现 SendGrid API Key",
58    80
59);
60lazy_rule!(
61    RE_TWILIO_KEY = r#"\bSK[0-9a-fA-F]{32}\b"#,
62    "发现 Twilio API Key",
63    80
64);
65lazy_rule!(
66    RE_MAILGUN_API = r#"key-[a-f0-9]{32}"#,
67    "发现 Mailgun API Key",
68    80
69);
70lazy_rule!(
71    RE_DOCKER_AUTH = r#""auth":\s*"[A-Za-z0-9+/=]{40,}""#,
72    "发现 Docker Auth Token",
73    80
74);
75lazy_rule!(
76    RE_FIREBASE_URL = r#"https://[a-z0-9-]+\.firebaseio\.com"#,
77    "发现 Firebase URL",
78    80
79);
80lazy_rule!(
81    RE_MONGODB_ATLAS = r#"mongodb\+srv://[^:@/]+:[^:@/]+@[a-z0-9.-]+\.mongodb\.net"#,
82    "发现 MongoDB Atlas 凭证",
83    80
84);
85lazy_rule!(
86    RE_HUGGINGFACE = r#"\bhf_[A-Za-z0-9]{34,40}\b"#,
87    "发现 Hugging Face Token",
88    80
89);
90lazy_rule!(
91    RE_CLOUDFLARE_TOKEN = r#"(?i)\bcloudflare[_-]?api[_-]?token\s*[:=]\s*[A-Za-z0-9_-]{40}\b"#,
92    "发现 Cloudflare API Token",
93    80
94);
95lazy_rule!(
96    RE_REPLICATE_TOKEN = r#"\br8_[A-Za-z0-9]{37}\b"#,
97    "发现 Replicate API Token",
98    80
99);
100
101#[cfg(test)]
102mod tests {
103    use crate::analyze_with;
104    use crate::rules::get_rules;
105
106    #[test]
107    fn test() {
108        let input = r#"
109flag{5tgb8uik,0ol}
110
111        "#;
112
113        for line in input.lines() {
114            println!("{}", analyze_with(
115                line,
116                &get_rules(|m, _| module_path!().split("::tests").any(|s| s == m)),
117            ))
118        }
119    }
120}
121