正则匹配脚本

记录

今天上班的时候,老是发现uuid这些长id,我要想利用又懒得一个个复制,所以搞了一个脚本扩展,因为我是新手嘛,所以这个脚本有蛮多毛病,这章专门用来介绍哪些毛病,方便以后想改了,拿出来看看好找到要改的地方,我脚本放到github了,以防自己改炸了还有备份

顺便记录一下排查api的正则

问题点

1、python代码里只匹配了双引号和单引号

2、直接将匹配到的内容写入文件—空格字符和回车字符

3、没有检查匹配字符的过程—不能实时的查看自己的匹配过程 //主要

正则记录

以method为特征值

==>遍历 js 跑出 api 的个数:

1
method\s*:\s*"(post|get)"

以path为特征值

==>遍历 js 尽可能跑出 api 以及虚拟页面的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 定义匹配的正则表达式和分类标签
含重复的正则
pattern_groups = {
"PagePath Matches": [
(re.compile(r'[Pp][Aa][Gg][Ee][Pp][Aa][Tt][Hh]:\s*"(.*?)"'), "pagePath_double_quotes"),
(re.compile(r"[Pp][Aa][Gg][Ee][Pp][Aa][Tt][Hh]:\s*'(.*?)'"), "pagePath_double_quotes"),
],
"Path Matches": [
(re.compile(r'[Pp][Aa][Tt][Hh]:\s*"(.*?)"'), "path_double_quotes"),
(re.compile(r"[Pp][Aa][Tt][Hh]:\s*'(.*?)'"), "path_double_quotes"),
(re.compile(r'[Uu][Rr][Ll]:\s*"([^"]+)"'), "path_double_quotes"),
(re.compile(r'[Uu][Rr][Ll]: "([^"]+)'), "path_double_quotes"),
],
"GET Matches": [
(re.compile(r'[Gg][Ee][Tt]\([^()]*?"([^"]*?)"[^()]*?\)'), ""),
(re.compile(r"[Gg][Ee][Tt]\([^()]*?['\"]([^'\"]*?)['\"][^()]*?\)"), ""),
(re.compile(r'[Gg][Ee][Tt]\(\s*["\']([^"\']+)["\']\s*,'), ""),
],
"POST Matches": [
(re.compile(r'[Pp][Oo][Ss][Tt]\([^()]*?"([^"]*?)"[^()]*?\)'), ""),
(re.compile(r"[Pp][Oo][Ss][Tt]\([^()]*?['\"]([^'\"]*?)['\"][^()]*?\)"), ""),
(re.compile(r'[Pp][Oo][Ss][Tt]\(\s*["\']([^"\']+)["\']\s*,'), ""),
]
}

以特殊符号为特征值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 1. 匹配完整 URL(含协议或协议相对)
(?:"|') # 起始引号(单引号或双引号)
((?:[a-zA-Z]{1,10}://|//) # 协议:例如 http://、https://、ftp:// 或协议相对 //
[^"'/]{1,}\. # 主域名(不含引号或斜线)+ 点
[a-zA-Z]{2,}[^"']{0,}) # 顶级域名后缀(如 com/net)+ 可选路径
(?:"|') # 结束引号

# 中文解释:提取形如 "https://example.com/path" 或 '//cdn.xxx.com' 的完整 URL


# 2. 匹配相对路径(以 /、../ 或 ./ 开头)
(?:"|')
((?:/|\.\./|\./) # 以 /、../ 或 ./ 开头
[^"'><,;| *()(%%$^/\\\[\]] # 第一个字符不能为特殊符号
[^"'><,;|()]{1,}) # 后续字符为路径
(?:"|')

# 中文解释:提取形如 "/api/user"、"../img/pic.png" 的相对路径链接


# 3. 匹配目录+资源文件(如 action、js、png)
(?:"|')
([a-zA-Z0-9_\-/]{1,}/ # 至少一个目录名 + 斜杠
[a-zA-Z0-9_\-/]{1,} # 文件名
\.(?:[a-zA-Z]{1,4}|action) # 文件后缀(如 .js/.css/.action)
(?:[\?|/][^"' ]{0,}|)) # 可选参数或路径,如 ?id=1
(?:"|')

# 中文解释:提取形如 "admin/login.action"、"static/app.js?v=1" 的接口或资源路径


# 4. 匹配单文件名 + 参数(如 login.php?id=1)
(?:"|')
([a-zA-Z0-9_\-]{1,} # 文件名
\.(?:php|asp|aspx|jsp|json| # 特定后缀(可扩展)
action|html|js|txt|xml)
(?:\?[^"']{0,}|)) # 可选参数
(?:"|')

# 中文解释:提取形如 "index.php?id=1"、"test.jsp" 的单独接口文件


# 5. 匹配 .do/.cgi/.py 等其他接口风格
(?:"|')
([a-zA-Z0-9_\-/.]{1,}
\.(?:do|cgi|py|rb|go)
(?:\?[^"']{0,}|))
(?:"|')

# 中文解释:提取 ".do"、".cgi"、".py" 等扩展名接口(例如 WebLogic、老系统常见)

跳转

bp插件

api脚本