php 8.3.36 不存在缓存投毒漏洞,它是官方为修复 cve-2026-109618 和 cve-2026-109619 两个严重 rce 漏洞发布的紧急安全更新版本;php 本身不处理 http 缓存逻辑,所谓“缓存投毒”均源于应用代码、框架或中间件对用户输入的不当处理。

PHP 8.3.36 没有缓存投毒漏洞。这个版本是 PHP 官方为修复两个远程代码执行(RCE)漏洞(CVE-2026-109618 和 CVE-2026-109619)发布的紧急安全更新,**不是引入新问题的版本,而是修复问题的版本**。
如果你看到“PHP 8.3.36 缓存投毒”这类说法,大概率是混淆了以下三类情况之一:
为什么不存在“PHP 8.3.36 缓存投毒漏洞”
PHP 自身不实现 HTTP 缓存、反向代理缓存或 CDN 缓存逻辑。它不解析或生成 Cache-Control、Vary、Set-Cookie 等响应头的语义,也不参与缓存键(cache key)计算。所谓“缓存投毒”,本质是应用层或中间件(如 Nginx、Varnish、Cloudflare)对用户可控输入(如请求头、URL 参数)未做校验,错误地将其纳入缓存键或缓存内容生成逻辑中。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
哪些地方可能被误认为是“PHP 引起的缓存投毒”
-
应用代码里拼接了用户输入到响应头:比如
header('Vary: ' . $_SERVER['HTTP_X_CLIENT_TYPE']),且未白名单校验X-Client-Type值,导致攻击者注入逗号分隔值干扰缓存分区 -
框架/库自动设置 Vary 头但逻辑有缺陷:例如某 Laravel 中间件读取
User-Agent并无条件加入Vary,而攻击者用畸形 UA 触发边缘行为,使不同用户命中同一缓存块 -
CDN 或反向代理配置不当:比如 Nginx 的
proxy_cache_key包含$args却未 normalize,或 Cloudflare 的 Cache Rules 对Cookie字段做缓存却未排除会话标识
如果你正在排查疑似缓存异常,重点检查这些环节
确认问题是否真与缓存有关,而不是 PHP 本身的 RCE 漏洞被利用后植入了恶意响应:
- 用
curl -I对比不同请求头(如X-Forwarded-Host、Accept-Language)的响应头差异,看Vary是否被污染 - 检查 Web 服务器配置中
proxy_cache_key(Nginx)、hash指令(Varnish)是否包含未过滤的变量 - 审查 PHP 应用是否调用了
header()、setcookie()或输出了含用户输入的Link、Content-Disposition等可影响缓存的头 - 确认你运行的确实是
PHP 8.3.36(执行php -v),而非旧版(如8.3.35)——后者仍受CVE-2026-109619影响,可能被用于构造跨请求状态污染,间接干扰缓存一致性
8.3.36 的环境中,CVE-2026-109619(全局状态残留)可能让攻击者通过两个请求配合,污染会话初始化逻辑或错误处理路径,进而让后续请求返回异常响应——这种异常响应若被缓存,就可能造成“看起来像缓存投毒”的现象。但这只是表象,根因仍是未修复的 RCE 漏洞。
升级到 8.3.36 是必须动作;但若业务依赖缓存,还得同步审计你控制范围内的缓存策略和响应头生成逻辑——PHP 不负责缓存,但你的代码和配置会。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










