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