Skip to content

🛡️ 行为分析拦截器

📖 简介

行为分析拦截器主要用于检测客户端的异常行为,识别潜在的恶意攻击并进行拦截或记录。它可以作为 SQL 注入拦截器和 XSS 拦截器的前置防线,针对敏感路径扫描、恶意请求方法、路径穿越等特征进行检测。

💡 核心特性

  • 敏感路径扫描防护:自动拦截对 /.env/.git/wp-admin 等常见漏洞扫描路径的访问。
  • 非法请求方法防护:拒绝如 TRACETRACKDEBUG 等存在安全风险的请求方法。
  • 路径穿越防护:检测并拦截带有 ../..\ 试图突破目录限制的请求。
  • 扫描器/爬虫拦截:识别并拦截主流漏洞扫描器或恶意爬虫的 User-Agent (如 sqlmap, nikto, curl 等)。
  • 非法扩展名检测:预防针对后门/木马等恶意脚本(.jsp, .php, .exe 等)的上传或执行探测。
  • XSS 跨站脚本拦截:深度检测并拦截携带恶意前端执行脚本参数的 XSS 攻击请求。
  • 常见攻击载荷拦截:快速拦截包含 <scripteval(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,超过该大小认为是攻击

配置参数详解

参数名类型必填默认值说明
enabledbooleanfalse是否启用行为分析拦截器
rulesarray-行为分析规则列表

规则 (Rule) 参数详解

参数名类型必填默认值说明
urlsarray-需要进行行为分析的 URL 路径模式集合(如 /**
forbid-urlsarray-排除不进行行为分析的 URL 路径模式集合
actionstringblock触发策略时的动作:block (拦截返回 403) 或 log (仅打印 Warn 级别日志并放行)
check-sensitive-pathbooleanfalse是否检查敏感路径扫描,如 /.env/.git/wp-admin
check-path-traversalbooleanfalse是否检查路径穿越,如 ../..\
check-malicious-methodbooleanfalse是否检查恶意或不常用请求方法,如 TRACETRACKDEBUG
check-scanner-uabooleanfalse是否检查漏洞扫描器、恶意爬虫、非法脚本程序的 User-Agent (如 sqlmap, nmap, 空UA 等)
check-illegal-extensionbooleanfalse是否检查非法文件扩展名,如 .jsp, .php, .asp, .exe, .bat, .dll
check-xssbooleanfalse是否深度检查 XSS 跨站脚本攻击,拦截带有诸如 <iframe, onload=, javascript: 等脚本特征的参数
check-common-payloadbooleanfalse是否检查通用的简单攻击载荷,如 <scripteval(union select
max-body-sizeint640请求体最大字节数,超过该大小则认为是异常大包 DoS 攻击 (设为 0 表示不限制)

🚨 异常处理与日志

当拦截器检测到恶意行为时:

  1. 会在网关日志中输出 Warn 级别的告警信息: 🚨 [BehaviorAnalysisFilter] 检测到恶意行为! 攻击类型: Sensitive_Path_Scan, 客户端IP: 192.168.1.100, 载荷/路径: /.env, 请求头User-Agent: curl/7.68.0
  2. 如果 actionblock,将直接向客户端返回 403 状态码及错误信息 {"code": 403, "msg": "Access Denied: Suspicious behavior detected"}

💡 最佳实践

  • 建议在生产环境中始终开启 check-sensitive-pathcheck-path-traversal,因为这几乎不会产生误杀,能有效阻挡大量自动化的黑客扫描器。
  • 如果您的应用是纯接口(API),强烈建议开启 check-malicious-method,只放行常用的 GET, POST, PUT, DELETE 等方法。
  • 对于误杀敏感的业务,可以先将 action 设置为 log 观察一段时间日志,确认没有正常请求被拦截后,再修改为 block