WAF拦截设置中URI与URI Path的区别

在 Web 应用防火墙 (WAF) 的拦截设置中,URI (Uniform Resource Identifier)URI Path 是两个密切相关但有重要区别的概念,理解它们对于精确配置规则至关重要:

  1. URI (Uniform Resource Identifier)
    • 定义: 这是标识网络资源的完整字符串。它包含了访问该资源所需的所有组成部分。
    • 组成: 一个完整的 URI 通常包括:
      • Scheme: http://, https://, ftp:// 等。
      • Host: 域名或 IP 地址 (例如 www.example.com, 192.168.1.1)。
      • Port: (可选,如果使用标准端口如 80 或 443 则通常省略) 例如 :8080
      • Path: 资源在服务器上的具体路径 (例如 /products/index.html, /api/v1/users)。
      • Query String: (可选) 以 ? 开头,包含传递给资源的参数 (例如 ?id=123&category=books)。
      • Fragment: (可选) 以 # 开头,通常用于指定资源内部的某个锚点 (例如 #section2),注意:Fragment 通常不会被发送到服务器
    • WAF 中的含义: 当 WAF 规则指定匹配 URI 时,它通常指的是包含 Path + Query String 的部分(有时也可能包括 Port,但 Scheme 和 Host 通常在更早的 HTTP 头部处理阶段被处理或用于路由,而不直接作为 URI 规则匹配的一部分)。最重要的是它包含了查询参数 (? 后面的部分)
    • 示例: https://www.example.com:8080/products/search?q=shoes&sort=price#results 这个 URI 中,WAF 规则匹配的 URI 部分通常是 /products/search?q=shoes&sort=price (Path + Query String)。
  2. URI Path
    • 定义: 这是 URI 中特定于资源位置的部分,它标识了目标资源在服务器上的路径或端点
    • 组成: 仅包含从域名/IP地址之后的第一个 / 开始,到 ? (查询字符串开始) 或 # (片段开始) 或字符串结束为止的部分。它不包含 Scheme, Host, Port, Query String 或 Fragment。
    • WAF 中的含义: 当 WAF 规则指定匹配 URI Path 时,它只关注资源的路径部分,完全忽略查询字符串 (? 后面的所有内容)
    • 示例: 对于同一个 URI https://www.example.com:8080/products/search?q=shoes&sort=price#results,WAF 规则匹配的 URI Path 部分只是 /products/search

核心区别总结:

特性URI (在 WAF 上下文中)URI Path
包含内容Path + Query String (可能包含 Port)仅 Path
是否包含查询参数 (? 后)
用途匹配包含特定参数的特定资源请求匹配特定位置或端点的所有请求
示例 (基于请求)/login.php?username=admin/login.php
/api/data?id=456/api/data
/search?q=attack%20string/search

为什么在 WAF 中这个区别至关重要?

  1. 精确匹配 vs. 范围匹配:
    • 使用 URI Path 规则可以拦截访问某个特定路径(如后台管理页面 /admin/、敏感 API 端点 /api/internal/)的所有请求,无论它们带有什么参数。这用于保护特定区域。
    • 使用 URI 规则可以更精确地拦截带有特定参数的请求。例如:
      • 拦截尝试进行 SQL 注入的请求:/products/view?id=1' OR '1'='1 (需要匹配查询字符串中的恶意负载)。
      • 拦截尝试访问特定敏感资源的请求:/download?file=../../etc/passwd (路径遍历攻击依赖于参数值)。
      • 拦截带有特定令牌或标识符的请求。
  2. 避免误拦截:
    • 如果只想阻止访问 /admin/ 目录下的所有内容,使用 URI Path /admin/* 是正确且安全的,不会影响类似 /user/profile?section=admin 这样的合法请求(该请求的 Path/user/profile)。
    • 如果错误地使用 URI 规则去匹配路径,并设置规则为包含 admin,那么 /user/profile?section=admin 也会被错误拦截,因为它整个 URI 字符串包含了 admin
  3. 性能与效率:
    • 匹配 URI Path 通常更快,因为字符串更短且不包含多变的查询参数。
    • 匹配完整的 URI(包含 Query String)可能需要处理更长、变化更大的字符串。

实际配置建议:

  • 明确目标: 首先要清楚你想拦截什么。
    • 是想拦截某个特定位置的所有访问? -> 用 URI Path
    • 是想拦截带有特定恶意参数的请求? -> 用 URI (并确保规则能检查 Query String)。
  • 查看产品文档: 不同 WAF 厂商对配置项的具体命名和行为可能略有差异。务必查阅你所使用的 WAF 文档,确认其“URI”和“Path”字段具体匹配的是哪一部分。
  • 利用通配符: 两者通常都支持通配符 (*, ?) 或正则表达式来实现模式匹配(如 /admin/* 匹配 /admin/ 下所有路径,/search*.php 匹配各种 search 脚本)。
  • 注意编码: WAF 在匹配之前通常会先对 URL 进行解码。攻击者可能对恶意负载进行编码(如 %20 代替空格,%27 代替单引号)。好的 WAF 规则会处理这些编码变体。

简单记忆:

  • URI Path = 你去哪里? (/shop/cart, /api/login)
  • URI (完整) = 你去哪里 + 带了什么条件? (/shop/cart?item=123&qty=5, /api/login?username=foo&password=bar)

正确理解并使用 URI 和 URI Path 的区别,是配置精准、高效且低误报的 WAF 防护规则的关键。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
QQ客服
  • QQ176363189 点击这里给我发消息
旺旺客服
  • 速度网络服务商 点这里给我发消息
电子邮箱
  • sudu@yunjiasu.cc
微信客服
  • suduwangluo