Appearance
WAF 匹配字段说明
本章节详细说明了 WAF 规则引擎支持的匹配字段。在配置白名单、自定义规则及速率限制时,正确理解这些字段的定义与取值范围至关重要。
基础网络与协议字段
此类字段基于 TCP/IP 协议层及 HTTP 协议基础属性,通常用于从网络层面筛选流量。
| 匹配字段 | 字段说明 | 支持运算符 | 格式/示例 | 配置说明与最佳实践 |
|---|---|---|---|---|
| IP | 发起请求的客户端源 IP 地址。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 限速: 次数 | 192.168.1.110.0.0.0/24 | • 支持 IPv4 与 IPv6。 • 注意:如果 WAF 部署在负载均衡或 CDN 之后,此字段可能显示为中间件 IP。如需获取真实用户 IP,请参考 X-Forwarded-For。 |
| Country | 基于源 IP 解析出的所属国家或地区代码。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 | CN (中国)US (美国) | • 遵循 ISO 3166-1 alpha-2 标准。 • 常用于“地域封禁”或“仅允许特定国家访问”。 • 无法判断使用 VPN 或代理绕过地理位置的用户。 |
| Server Port | 客户端请求的目标服务器端口。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 数值: 大于、小于、大于等于、小于等于 | 80, 443, 8080 | • 用于区分同一 IP 上运行的不同服务。 • 建议显式限制允许的端口(如仅允许 80/443),防止非标端口绕过检测。 |
| HTTP Method | HTTP 请求动作。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 | GET, POST, PUT, DELETE | • 建议对静态页面仅开放 GET。• 对未使用的危险方法(如 TRACE, CONNECT)建议直接阻断。 |
| HTTP Version | 请求使用的 HTTP 协议版本。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 | HTTP/1.0, HTTP/1.1, HTTP/2 | • HTTP/1.0 常见于陈旧的扫描脚本或 DDoS 工具,建议在现代应用中进行限制。 |
路径与参数字段
此类字段用于识别具体的业务接口、文件路径及传递的参数,是防御 Web 漏洞(如 SQL 注入、XSS)的核心区域。
| 匹配字段 | 字段说明 | 支持运算符 | 格式/示例 | 配置说明与最佳实践 |
|---|---|---|---|---|
| URI | 完整的统一资源标识符,通常包含路径和查询字符串。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | /login.php?id=1 | • 包含 ? 及其后面的内容。• 适用于需要同时匹配路径和特定参数组合的场景。 |
| URI Path | 仅包含资源路径,不包含查询字符串(参数)。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | /admin/login.php/api/v1/user | • 最常用的路径匹配字段。 • 建议配合“忽略大小写”和“URL 解码”使用,以防止 /Admin 或 %61dmin 绕过。 |
| Query String | URL 中 ? 之后的所有内容。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | id=1&action=view | • 将整个参数串视为一个字符串进行匹配。 • 适用于检测通过 URL 传递的通用攻击特征(如 script 标签)。 |
| Query String Parameter | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 空值: 为空、不为空 | URL 中特定名称的参数值。 | 针对参数 id 匹配值 1 | • 比 Query String 更精准。• 例如:仅检查 page 参数是否包含数字,或仅检查 search 参数是否包含 SQL 注入特征。 |
| Filename | 从 URI 路径中解析出的文件名部分。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | upload.php, image.jpg | • 用于文件上传防御或敏感文件访问控制。 • 注意:攻击者可能利用 %00 截断或特殊编码混淆文件名。 |
| File Extension | 文件的后缀名。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | php, jsp, exe | • 常用于黑名单过滤:禁止访问 .bak, .sql, .config 等备份/配置文件,或禁止上传 .jsp, .asp 等脚本文件。 |
请求头与 Cookie
HTTP 头部包含了客户端环境、身份凭证等元数据,常被用于身份伪造或特定漏洞利用。
| 匹配字段 | 字段说明 | 支持运算符 | 格式/示例 | 配置说明与最佳实践 |
|---|---|---|---|---|
| Header | 任意指定的 HTTP 请求头的值。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | 需指定 Key,如 Authorization | • 可用于检测缺失特定安全头(如 Token)的非法请求。• 针对 Log4j 等漏洞,需全量扫描 Header 值。 |
| Host | 请求头中的域名信息。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | www.example.com | • 用于多域名环境下的精确匹配。 • 建议阻断 Host 为 IP 地址(如 1.1.1.1)的请求,这通常是扫描器的特征。 |
| User-Agent | 客户端浏览器、操作系统或工具的标识字符串。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | Mozilla/5.0...Python-urllib/3.0 | • 可用于阻断明显的扫描工具(如 curl, wget, sqlmap)。• 注意:该字段极易伪造,不可作为唯一的信任依据。 |
| Referer | 请求的来源页面地址。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | https://google.com | • 常用于防盗链(检查图片引用来源)或辅助防御 CSRF。 • 注意:部分隐私保护设置可能导致此字段为空。 |
| X-Forwarded-For | 代理服务器添加的标准头部,用于记录真实客户端 IP 链。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | 203.0.113.195, 10.0.0.1 | • 重要:当 WAF 位于 CDN/LB 后时,需解析此字段获取真实 IP。 • 仅应信任受信任代理添加的最右侧 IP。 |
| Content-Type | 请求体的数据媒体类型。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | application/jsonmultipart/form-data | • 建议强制 API 接口仅接受特定的 Content-Type,防止解析器绕过攻击。 |
| Cookie | 完整的 Cookie 字符串。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | session_id=xy; uid=123 | • 将所有 Cookie 视为一段文本进行匹配。 |
| Cookie Name | 特定 Cookie 键名的值。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 字符串: 包含、不包含、前缀是、前缀不是、后缀是、后缀不是 正则: 正则匹配、正则不匹配 长度: 长度等于、长度不等于、长度大于、长度小于、长度大于等于、长度小于等于 | 针对 session_id 匹配值 | • 推荐:相比全量 Cookie 匹配,指定 Cookie Name 可以减少误报(例如排除经常变化的随机 CSRF Token 字段)。 |
响应字段
此类字段仅适用于速率限制场景,依据服务器的反馈进行动态阻断。
| 匹配字段 | 字段说明 | 支持运算符 | 格式/示例 | 配置说明与最佳实践 |
|---|---|---|---|---|
| Status Code | 服务器返回的 HTTP 状态码。 | 比较: 等于、不等于、包含以下各项、不包含以下各项 数值: 大于、小于、大于等于、小于等于 | 200, 404, 500 | • 404 陷阱:如果某 IP 短时间内产生大量 404 错误,极可能是目录扫描攻击,建议触发限速或封禁。 • 暴力破解检测:短时间内大量 401 或 403 可能意味着密码暴破。 |