最有效临时缓解措施是关闭session.upload_progress.enabled,可阻断cve-2026-109619利用链;需在php.ini、.user.ini或.htaccess中配置并重启服务,同时waf层可拦截含php_session_upload_progress的请求体。

直接关掉 session.upload_progress.enabled 是当前最有效、副作用最小的临时缓解手段,能阻断 CVE-2026-109619 利用链中关键的一环——攻击者正是靠伪造上传进度 session 数据触发状态残留漏洞的。
怎么关掉 session.upload_progress(三处配置位置)
该配置必须在 PHP 解释器加载请求前就生效,所以要改运行时配置,不能靠代码动态设置。注意:不是所有环境都支持全部方式,优先按顺序尝试。
- 主配置文件
php.ini:找到session.upload_progress.enabled行,改为session.upload_progress.enabled = Off;若整行被注释,取消注释再改 - 用户级配置
.user.ini(仅对 CGI/FPM 且启用了user_ini.filename时有效):在 Web 根目录下新建或编辑该文件,写入session.upload_progress.enabled=Off - Apache 环境下的
.htaccess:仅限mod_php(不适用于 PHP-FPM),添加php_flag session.upload_progress.enabled off
改完后必须重启服务:systemctl restart php-fpm 或 systemctl restart apache2。用 php -i | grep upload_progress 验证是否已禁用,输出应为 session.upload_progress.enabled => Off。
WAF 层拦截 upload_progress 请求体关键词
攻击载荷必然在 multipart 请求体中携带 PHP_SESSION_UPLOAD_PROGRESS 字符串,这是目前最稳定、误报率最低的检测点。但注意:规则一旦启用,所有合法使用该功能的业务(如带进度条的头像上传)将失效。
- ModSecurity 规则示例:
SecRule REQUEST_BODY "@contains PHP_SESSION_UPLOAD_PROGRESS" "id:1001,deny,status:403,msg:'Blocked upload_progress exploit'" - Nginx + ngx_http_modsecurity_module:确保
SecRuleEngine On已启用,并把上述规则加到modsec_includes.conf中 - 云 WAF(如阿里云、Cloudflare):在自定义规则里添加「请求体包含」条件,值填
PHP_SESSION_UPLOAD_PROGRESS,动作设为「拦截」
别漏掉 REQUEST_BODY —— 攻击数据在 body 里,ARGS 或 REQUEST_HEADERS 检查无效。如果业务确需保留上传进度功能,这条规则就不能开。
为什么不能只依赖 open_basedir 或 disable_functions
这两个措施对 php2shell 类漏洞基本无效,因为漏洞发生在 PHP 内核处理请求生命周期的底层阶段,远早于用户代码执行和函数调用环节。
-
disable_functions只影响eval、system等函数调用,而 CVE-2026-109618/109619 是内存损坏型 RCE,根本不需要调用这些函数 -
open_basedir限制的是文件操作路径,但漏洞利用不涉及include或fopen,它绕过了所有用户态的文件系统检查 - 真正起作用的只有两层:① 切断上传进度机制(
session.upload_progress.enabled=Off);② 在网络边界拦住含关键词的请求体
补丁发布前,别在 php.ini 里折腾一堆无关配置,重点盯住这两项是否生效。很多团队翻了一晚上文档去调 memory_limit 或 max_execution_time,结果发现完全没用——因为漏洞触发跟这些参数没关系。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











