外观
🛡️ 行为分析拦截器
📖 简介
行为分析拦截器主要用于检测客户端的异常行为,识别潜在的恶意攻击并进行拦截或记录。它可以作为 SQL 注入拦截器和 XSS 拦截器的前置防线,针对敏感路径扫描、恶意请求方法、路径穿越等特征进行检测。
💡 核心特性
- 敏感路径扫描防护:自动拦截对
/.env、/.git、/wp-admin等常见漏洞扫描路径的访问。 - 非法请求方法防护:拒绝如
TRACE、TRACK、DEBUG等存在安全风险的请求方法。 - 路径穿越防护:检测并拦截带有
../、..\试图突破目录限制的请求。 - 扫描器/爬虫拦截:识别并拦截主流漏洞扫描器或恶意爬虫的 User-Agent (如
sqlmap,nikto,curl等)。 - 非法扩展名检测:预防针对后门/木马等恶意脚本(
.jsp,.php,.exe等)的上传或执行探测。 - XSS 跨站脚本拦截:深度检测并拦截携带恶意前端执行脚本参数的 XSS 攻击请求。
- 常见攻击载荷拦截:快速拦截包含
<script、eval(、union select等特征的异常查询。 - 异常大包拦截 (DoS 防护):限制请求体最大字节数,防止攻击者发送超大 Payload 耗尽网关内存。
- 灵活的动作配置:可配置为直接
block(拦截) 或仅log(记录告警信息)。
⚙️ 配置说明
在 config.yaml 中,可以通过 gateway.filter.behavior-analysis 进行配置。
基础配置示例
yaml
gateway:
filter:
behavior-analysis:
enabled: true
rules:
- urls:
- "/**"
forbid-urls:
- "/static/**"
action: "block"
check-sensitive-path: true
check-path-traversal: true
check-malicious-method: true
check-scanner-ua: true
check-illegal-extension: true
check-xss: true
check-common-payload: true
max-body-size: 5242880 # 5MB,超过该大小认为是攻击配置参数详解
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
enabled | boolean | 否 | false | 是否启用行为分析拦截器 |
rules | array | 是 | - | 行为分析规则列表 |
规则 (Rule) 参数详解
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
urls | array | 是 | - | 需要进行行为分析的 URL 路径模式集合(如 /**) |
forbid-urls | array | 否 | - | 排除不进行行为分析的 URL 路径模式集合 |
action | string | 否 | block | 触发策略时的动作:block (拦截返回 403) 或 log (仅打印 Warn 级别日志并放行) |
check-sensitive-path | boolean | 否 | false | 是否检查敏感路径扫描,如 /.env、/.git、/wp-admin 等 |
check-path-traversal | boolean | 否 | false | 是否检查路径穿越,如 ../、..\ 等 |
check-malicious-method | boolean | 否 | false | 是否检查恶意或不常用请求方法,如 TRACE、TRACK、DEBUG |
check-scanner-ua | boolean | 否 | false | 是否检查漏洞扫描器、恶意爬虫、非法脚本程序的 User-Agent (如 sqlmap, nmap, 空UA 等) |
check-illegal-extension | boolean | 否 | false | 是否检查非法文件扩展名,如 .jsp, .php, .asp, .exe, .bat, .dll 等 |
check-xss | boolean | 否 | false | 是否深度检查 XSS 跨站脚本攻击,拦截带有诸如 <iframe, onload=, javascript: 等脚本特征的参数 |
check-common-payload | boolean | 否 | false | 是否检查通用的简单攻击载荷,如 <script、eval(、union select 等 |
max-body-size | int64 | 否 | 0 | 请求体最大字节数,超过该大小则认为是异常大包 DoS 攻击 (设为 0 表示不限制) |
🚨 异常处理与日志
当拦截器检测到恶意行为时:
- 会在网关日志中输出
Warn级别的告警信息:🚨 [BehaviorAnalysisFilter] 检测到恶意行为! 攻击类型: Sensitive_Path_Scan, 客户端IP: 192.168.1.100, 载荷/路径: /.env, 请求头User-Agent: curl/7.68.0 - 如果
action为block,将直接向客户端返回 403 状态码及错误信息{"code": 403, "msg": "Access Denied: Suspicious behavior detected"}。
💡 最佳实践
- 建议在生产环境中始终开启
check-sensitive-path和check-path-traversal,因为这几乎不会产生误杀,能有效阻挡大量自动化的黑客扫描器。 - 如果您的应用是纯接口(API),强烈建议开启
check-malicious-method,只放行常用的GET,POST,PUT,DELETE等方法。 - 对于误杀敏感的业务,可以先将
action设置为log观察一段时间日志,确认没有正常请求被拦截后,再修改为block。