匹配条件说明
更新时间:2026-02-09
接入百度智能云 Web 应用防火墙(Web Application Firewall,简称 WAF)后,在配置白名单规则、自定义规则或 Bot 管理规则时,您需要通过设置匹配条件来定义 WAF 要检测的请求特征。本文将详细介绍匹配条件的组成及 WAF 支持的各类匹配字段。
什么是匹配条件
匹配条件用于指定 WAF 需要检测的请求特征。当某个请求满足规则中定义的匹配条件时,该请求将被判定为命中对应规则,WAF 随后会根据规则设置的处置动作(如放行、拦截、验证等)对请求进行相应处理。
对于使用 URL 编码、HTML 编码、Unicode 编码等常见编码方式的请求内容,WAF 会先进行解码处理,再按照匹配内容进行匹配检测。
匹配条件的组成
每个匹配条件由以下三个要素组成:
配置示例如下:
| 要素 | 说明 |
|---|---|
| 匹配字段 | 指定要检测的请求属性,如 URI、IP、Header 等。 |
| 逻辑符 | 定义匹配字段与匹配内容之间的逻辑关系,如等于、包含、正则匹配等。 |
| 匹配内容 | 设置具体的匹配值,如特定的 URL 路径、IP 地址等。 |
配置示例如下:
| 匹配字段 | 逻辑符 | 匹配内容 | 说明 |
|---|---|---|---|
| URI | 包含 | /login.php | 当请求路径中包含 /login.php 时,请求命中该规则 |
| IP | 属于 | 192.168.1.100 | 当客户端 IP 为 192.168.1.100 时,请求命中该规则 |
| User-Agent | 包含 | bot | 当请求的 User-Agent 中包含 bot 时,请求命中该规则 |
当规则包含多个匹配条件时,请求必须同时满足所有条件(逻辑与关系)才能命中该规则。
支持的匹配字段
以下所有匹配字段的匹配内容均不区分大小写。不同 WAF 版本支持的匹配字段可能存在差异。
下表列出了 WAF 支持的匹配字段及其详细说明。
| 匹配字段 | 说明 | 支持的逻辑符 |
|---|---|---|
| Body | 请求的 Body 内容。 |
|
| Content-Length | 请求头中的 Content-Length 字段,表示请求内容所包含的字节数。取值范围:0~2147483648。 |
|
| Content-Type | 请求头中的 Content-Type 字段。HTTP 请求通过 Content-Type 头字段声明消息体的媒体类型,该类型沿用了 MIME(Multipurpose Internet Mail Extensions)类型体系。 |
|
| Cookie | 请求头中的 Cookie 字段。 |
|
| Cookie Name(带有子字段的 Cookie) | 请求头中 Cookie 字段里的某个 Cookie。例如在 acw_tc=111 这个 Cookie 中,acw_tc 是 Cookie 的键名称(Key),111 为对应的 Cookie 值。需指定 Cookie 名称作为 Key。 |
|
| Header(带有子字段) | 自定义 Header,需指定 Header 子字段的名称。 |
|
| Host | 请求头中的 Host 字段,表示被请求的域名。 |
|
| Http-Method | 请求方法,包括 GET、POST、DELETE、PUT、OPTIONS、CONNECT、HEAD、TRACE、PATCH 等。 |
|
| IP | 请求的来源地址,用于标识发起请求的客户端 IP。若请求链路前置存在七层代理或负载均衡,需要勾选WAF前是否有七层代理,并选择客户端IP判定方式(如 X-Forwarded-For、X-Real-IP 等)。匹配内容支持使用 IPv4 地址(例如 1.XX.XX.1)、IPv6 地址(例如 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff)、IP 网段(例如 1.XX.XX.1/16)。 |
|
| IP 动态情报 | 汇聚百度内外多个情报源对客户端 IP 的风险识别结果 |
|
| JA3 | TLS JA3 指纹的 MD5 值。 |
|
| JA4 | TLS JA4 指纹的 MD5 值。 |
|
| Query String | 请求 URI 中的查询字符串。查询字符串位于 URI 中问号(?)之后,由一组以 key=value 形式表示的参数组成,多个参数之间使用 & 连接。 |
|
| Query String Parameter | HTTP 请求 URI 中查询字符串(Query String)里的参数项。例如在 www.baidu.com/request_path?param1=a¶m2=b 中,param1 和 param2 为查询参数的参数名,对应的参数值分别为 a 和 b。 |
|
| Referer | 请求头中的 Referer 字段,表示请求的来源网址。 |
|
| URI | 请求的统一资源标识符 URI(Uniform Resource Identifier),表示被请求的资源的路径。一般来说,URI = URI Path + Query String。对应匹配内容以 / 开头,不包含域名,例如 /login.php。 |
|
| URI Path | 请求 URI 的路径部分,不包含查询字符串。 |
|
| User-Agent | 请求头中的 User-Agent 字段,包含浏览器标识、渲染引擎标识和版本信息等。 |
|
| X-Forwarded-For | 请求头中的 X-Forwarded-For(XFF)字段,用于在请求经过 HTTP 代理或负载均衡转发时,记录客户端的原始 IP 地址。该字段通常由代理或负载均衡设备添加或追加,以标识请求链路中的客户端来源。 |
|
| 区域 | 请求来源的中国省份或者国家 |
|
使用正则匹配的规则可能会产生额外费用,且部分 WAF 版本可能不支持正则匹配功能。Query String Parameter、Cookie Name、Header 的自定义参数名称区分大小写。
使用建议
- 精确匹配优先:在能够使用等于、属于等精确匹配的场景下,优先使用精确匹配以提高检测效率。
- 合理使用正则:正则表达式功能强大但性能开销较大,建议仅在必要时使用,且尽量简化正则表达式。
- 注意字段大小写:部分匹配字段(如 Query String Parameter、Cookie Name、Header)的自定义参数名称区分大小写,配置时需注意。
- 测试验证:新增或修改匹配条件后,建议先使用观察模式进行测试,确认规则效果符合预期后再启用拦截。
