PHP 8.5.7 的两项 URI 安全修复直接加固路由核心逻辑:CVE-2026-44927 防止指针截断导致的路径/主机解析错误,CVE-2026-44928 杜绝 EqualsUri 误判引发的路由绕过、缓存污染与白名单失效,升级后应改用 Uri\Rfc3986\Uri 类确保语义准确。

会,而且影响直接且关键。
PHP 8.5.7 修复的两个 URI 漏洞——CVE-2026-44927 和 CVE-2026-44928——本质上破坏的是“URI 怎么被识别、比较和归一化”这一底层逻辑。而现代 Web 框架(如 Laravel、Symfony、Slim)的路由系统,高度依赖 URI 的解析结果、路径匹配、主机判断甚至 query 参数结构来做分发决策。漏洞未修复时,攻击者可利用解析偏差绕过路由保护机制。
路由匹配可能被绕过
旧版 URI 解析在处理编码、参数顺序、主机名边界字符时存在误判。例如:
-
https://api.example.com/%u202Eadmin(含 Unicode 双向控制符)可能被错误解析为/admin,导致本应拦截的敏感路径被路由到管理控制器 -
https://example.com/login?next=%2Fdashboard%2Ecom中的%2Ecom若被误判为.com,可能让跳转白名单校验失效,进而触发开放重定向
路由缓存键污染
很多框架用 URI 字符串作缓存键(如路由预编译、中间件响应缓存)。CVE-2026-44928 导致语义不同的 URI 被 EqualsUri 判为相等:
-
https://site.com/?id=123&sort=asc和https://site.com/?sort=asc&id=123→ 缓存命中同一结果,但后端逻辑可能因参数顺序不同返回不同数据 -
https://site.com/path%2Fsub和https://site.com/path/sub→ 路由器可能将两者映射到不同控制器,却共享缓存,造成内容混杂
基于 Host 或 Scheme 的路由策略失效
CVE-2026-44927 的指针截断问题,在解析超长或畸形 host(如 a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.example.com)时可能引发内存越界,导致:
-
parse_url()返回空 host 或错误 port,使if ($uri['host'] === 'admin.example.com')判断永远为 false - 路由器 fallback 到默认 handler,暴露非预期接口
怎么确认你的路由是否受影响
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 检查是否用
parse_url()或第三方 URI 库做路由前校验(如跳转白名单、子域路由分发) - 查看是否将原始 URI 字符串直接用于缓存键生成(而非标准化后)
- 审计所有调用
uriEqualsUri()或类似逻辑的地方(常见于网关、鉴权中间件) - 运行如下测试用例验证修复效果:
•https://test.com/%u202Elogin是否被拒绝或正确解析为非法路径
•https://a.com/path%2Fb与https://a.com/path/b调用$uri1->equals($uri2)是否返回false
升级到 PHP 8.5.7 后,建议改用 Uri\Rfc3986\Uri::createFromString() 替代裸 parse_url(),并统一通过 $uri->getPath()、$uri->getHost() 等方法提取组件——这样路由逻辑才能建立在语义准确、不可篡改的 URI 基础上。
立即学习“PHP免费学习笔记(深入)”;


















