一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

PHP 8.5.7 的 EqualsUri 漏洞影响多大:安全必看

时间:2026-07-11 09:33:04 编辑:袖梨 来源:一聚教程网

CVE-2026-44928 严重影响安全机制,EqualsUri 函数误判语义不同 URI 为相等,导致白名单、缓存、鉴权三重失效,引发开放重定向、越权访问、缓存污染及签名绕过;PHP 8.5.7 已改为严格字面比较,需全面重构依赖旧逻辑的代码。

影响非常大,尤其对依赖 URI 相等性判断的安全机制而言——不是“可能被绕过”,而是“已被设计用于绕过”。CVE-2026-44928 的核心问题是 EqualsUri 函数族把语义不同的 URI 判定为相等,这种误判会直接穿透白名单、缓存、鉴权三层防线。

直接影响访问控制与重定向安全

很多系统用 URI 字符串做权限校验或跳转放行,比如 OAuth 回调地址白名单、后台跳转链接过滤、API 网关路由匹配。旧版 EqualsUri 会认为以下 URI “相等”:

  • https://trusted.com/callback?state=abc vs https://trusted.com/callback?state=abc%0A&evil=1(fragment 或 query 含不可见控制字符)
  • https://api.example.com/v1/users vs https://api.example.com/v1%2Fusers(路径中 %2F 是否解码未统一)
  • https://site.com/?a=1&b=2 vs https://site.com/?b=2&a=1(query 参数顺序不同但被判定相同)

攻击者只需微调编码、插入空格或调整参数顺序,就能让恶意 URI 被白名单逻辑“认可”,从而完成开放重定向、CSRF 助攻或越权访问。

导致缓存键污染与响应混淆

若用原始 URI 字符串作缓存 key(如 Redis 或 CDN 缓存),EqualsUri 误判会让两个实际含义不同的请求映射到同一个缓存条目:

立即学习“PHP免费学习笔记(深入)”;

  • 用户 A 请求 https://shop.com/product?id=123&ref=aff1
  • 用户 B 请求 https://shop.com/product?id=123&ref=aff2
  • 旧版解析后都变成“相同 URI”,返回错误的 affiliate 归属页或敏感数据

这类问题在高并发场景下不易复现,但一旦发生,影响范围广、排查成本高。

破坏基于 URI 的签名与幂等机制

部分系统对 URI 做哈希或签名用于防重放、接口限流或幂等控制。EqualsUri 误判会导致:

  • 不同请求生成相同签名,绕过幂等校验
  • 攻击者构造编码变体反复提交,消耗服务资源
  • 签名验证逻辑因输入 URI 被自动归一化而失效

这不是边缘情况——只要业务代码里出现 uriEqualsUri()http_build_url() 或自定义字符串比较,就可能中招。

修复后行为已根本改变

PHP 8.5.7 中,EqualsUri 系列函数不再宽松比较。新 UriRfc3986Uri::equals() 方法严格区分字面值与规范形式:

  • 参数顺序不同 → 不相等
  • %2F 与 / 在路径中 → 不相等(除非显式调用 normalize()
  • 含控制字符的 fragment → 直接拒绝或明确区分

这意味着:升级不是“加个补丁”,而是让 URI 比较从模糊匹配变为语义精确匹配。所有依赖旧逻辑的代码必须重新验证,不能假设“看起来一样就算合法”。

热门栏目