神奇的Willem

雷池WAF规则使用

我看这篇文章也没啥人愿意看,都用现成的,其实怎么说呢都还好吧。就是会这个人不想写,不会的人也用不到。这里简单写一下。

不知道对不对都是自己学的。

通过URL路径和脚本匹配拦截

我们来看一个别人写的规则

这里是一个黑明单,匹配上URL路径,符合条件的进行拦截。

以这个。.*/.*\.php$为例子符号,含义,说明

.,任意一个字符(除了换行),比如字母、数字、斜杠等

*,表示前面的内容可以重复零次或多次,即允许“任意长度”

.*,组合起来表示“匹配任意长度的任意字符”,相当于“前面随便是什么”

\.,匹配一个真正的点 .,因为单独写 . 表示“任意字符”,所以要加反斜杠转义(反斜杠前面加点是随机,不加就是固定你写的内容)

php,匹配字符串 “php”,文件扩展名部分

$,匹配字符串的结尾,表示 .php 必须出现在最后,而不是中间

这个表达式就是,我们访问任意目录下,无论是根目录还是多少个子目录任意字符长度,下面的以.php结尾的文件。

这样很显然什么php都拦截

如果这么改呢

.*/abc\.php$

表示:我们访问任意目录下,无论是根目录还是多少个子目录任意字符长度,下面的以abc.php结尾的文件

如果是这样呢

^/[^/]+\.(php|asp|aspx|jsp)(?:\?.*)?$

说明

• ^/:以 / 开头(根目录)。

• [^/]+:仅允许一段路径名(即没有额外的 /),所以 /index.php、/login.php 都会命中,但 /dir/index.php 不会命中。

• \.(php|asp|aspx|jsp):匹配这几种后缀之一。

• (?:\?.*)?$:允许 URL 后面带查询字符串,如 /index.php?x=1 也会命中。(有为静态,这个叼毛就没什么意义了)

意思是:只对/根目录下的,切没有第二个路径的(不包含子路径)下面的所有以.php|asp|aspx|jsp结尾的文件/后面允许字符串查询

基本上可以这么写,防止拦截一些无关紧要的东西。

^/con/app/.*\.(php|asp|aspx|jsp)

意思是:/con/app(包含子路径)下面的所有以.php|asp|aspx|jsp结尾的文件。

这样不就不安全了吗。这要是黑客攻击下载在其他目录不就执行了。

真聪明,一般来说这种脚本最好都拦截,因为有个东西webshell这条规则的作用是:

阻止任何动态脚本(PHP、ASP、JSP 等)被直接访问或执行,防止远程代码执行攻击(RCE)与 WebShell 入侵。

基本上具有反向代理的节点,我们不需要塔执行任何脚本保护安全。

安全很杂,宁可错杀,也不放过。

这里是正对路径拦截,当然你也可以拦截你想拦截路径,下面的东西都别看,也是可以的,可以用包含路径

意思是这个目录都不能看。

如果用正则表达式是

^/phpwind(?:/.*)?

事例如下

截屏2025-11-06 11.55.13.png

我不知道你们下面有什么文件夹,我就拦截敏感文件夹,我可以吧有这些字符串的文件夹不管你在哪都拦截,因为脚本扫描目录乱七八糟的,都是脚本。可以拦截敏感文件。

我们对路径教学到这里了,其他我也不会了。

防止机器爬虫脚本

这是一个简单防止python脚本,很多脚本不对User-Agent请求头做伪装,不会伪装成类似比如win10乱七八糟的,他会很诚实告诉你,这种垃圾爬虫就拦截一些,他要是伪装了,还有人机验证,还有JavaScript挑战(虽然都可以过,过了就给他吧,我是菜逼)

User-Agent: python-requests/2.31.0
User-Agent: Python-urllib/3.12
#就像这样

#正常的是这样的;
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
#我的是apple mac

像我,只要不是中国IP都拦截,就可以少一半的烦恼。速录限制,大刀阔斧就是拦截,反正没几个人看。

我觉得这个规则不太适合我。我自己写了一个规则。以后分享。

举几个常见的请求头是脚本的。

屏蔽基础爬虫和空UA

规则列表:

(常见脚本)

匹配目标: Header

参数名*: User-Agent

匹配方式*: 正则表达式

匹配内容*: requests|urllib|python|curl|wget|scrapy|httpie|java|ruby

[ 添加一个 OR 条件 ]

(不能为空)

匹配目标: Header

参数名*: User-Agent

匹配方式*: 值为空

匹配内容*: [此项无需填写]

屏蔽恶意漏洞扫描器

规则列表:

(常见扫描器)

匹配目标: Header

参数名*: User-Agent

匹配方式*: 正则表达式

匹配内容*: sqlmap|nmap|WPScan|Acunetix|Netsparker|Go-http-client

检查 User-Agent 标头是否包含任何已知的漏洞扫描工具名称,如 sqlmap(最著名的SQL注入工具)、nmap(端口扫描器)、WPScan(WordPress扫描器,但黑客常会误用它来扫所有网站)等特意加上了 Go-http-client,因为您发的图片中背景里就有它。

假如我们像站点提供评论,将在api目录下请求post

如下

Request URL
https:/baidu.com/apis/api/ffdd/v1al/comments
Request Method
POST
Status Code
200 OK
Remote Address
127.0.0.1:1082
Referrer Policy
strict-origin-when-cross-origin

origin
https://bk.wished.cc
priority
u=1, i
referer
https://bk.wished.cc/archives/docker-composepei-zhi-wen-jian-he-ji-ben-ming-ling
sec-ch-ua
"Google Chrome";v="141", "Not?A_Brand";v="8", "Chromium";v="141"
sec-ch-ua-mobile
?0
sec-ch-ua-platform
"macOS"
sec-fetch-dest
empty
sec-fetch-mode
cors
sec-fetch-site
same-origin
user-agent
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36

防止API垃圾评论 (空Referer)

规则列表:

(评论前缀)

匹配目标: URI 路径

参数名*: [此项无需填写]

匹配方式*: 包含 (或 "前缀为")

匹配内容*: /apis/api/ffdd/v1al/ <-- (改成您找到的真实路径前缀)

[ 添加一个 AND 条件 ]

匹配目标: Header

参数名*: Referer

匹配方式*: 值为空

匹配内容*: [此项无需填写]

Referer什么意思,一定要加,这个是转跳验证,如果你莫名其妙直接访问这个目录提交post请求,就是机器人,正常应该是在我的主页或者其他转跳过来的。才能提交评论。

总结就是,如果你直接访问我这个目录,前缀或包含目录,且没有转跳,那你就不是人就拦截。