将php.ini中的session.upload_progress.enabled设置为session.upload_progress.enabled = Off并重启php 这个方式能解决吗
关闭 session.upload_progress.enabled 并重启 PHP 只能封堵一条疑似攻击分支,无法解决 PHP2Shell,也不能替代补丁;应在 Web 运行时确认该设置生效,并尽快升级到包含修复的 PHP 版本。
结论:session.upload_progress.enabled = Off 不能解决 PHP2Shell。 提出这一缓解措施的 GMO Flatt Security 当天已明确修正:该设置单独“不构成完整对策”,预计会出现绕过它的攻击路径。PHP 核心开发者 Gina Peter Banyard 的表述更直接:“唯一的缓解措施就是打补丁 / 升级 PHP”。
session.upload_progress.enabled = Off 到底能做什么、不能做什么?
结论:它能关闭一条疑似攻击分支入口,但不能替代补丁,也不应被当作“已经安全”的信号。
session.upload_progress 是 PHP 中记录文件上传进度的功能,默认开启。早期分析认为 PHP2Shell 的漏洞点位于这一功能的内存处理中,因此建议关闭它作为临时缓解。问题在于,这一判断本身建立在推断之上:PHP 官方在补丁发布前并未确认漏洞根因,GMO Flatt Security 也承认其结论仅限于“与其自身研究匹配的部分”。同时,GMO Flatt 在当天 05:00 UTC 的更新中明确表示,攻击者存在绕过该配置的路径,关闭它“只能堵死一条分支入口”。watchTowr 的结论是当时没有经过确认的 workaround。
如果已经设置或准备设置,正确的操作方式是什么?
结论:设置本身可以做,但必须落在“正在处理 Web 流量的运行时”上,并通过 Web 请求验证生效,而不是 CLI。
具体入口有三类,按优先级选择:
php.ini 或 PHP-FPM pool 配置:写入 session.upload_progress.enabled = Off,然后重启 PHP-FPM 或 Apache。
.user.ini(仅 CGI / FastCGI 版本 PHP) :写入同一行,但 PHP 默认每 300 秒才重读一次,生效有延迟;Apache module 模式下 .user.ini 不被读取,应改用 .htaccess。
.htaccess(Apache module) :适用于 mod_php 场景。
验证时不要依赖终端里的 php -i,因为 CLI 和 Web SAPI 使用两套配置。正确做法是通过 Web 请求确认正在服务流量的 PHP 进程(PHP-FPM 或 mod_php)中 session.upload_progress.enabled 显示为 Off,确认后关闭或删除诊断入口。
不能只靠这个设置,那补丁到达前真正有效的是什么?
结论:补丁到达前的有效动作是降低暴露面,而不是寻找“配置层盾牌”。
CERT-EU 的建议是:在无法立即打补丁的情况下,“考虑将面向互联网的应用从公共网络隔离,直到修复可用”。具体到操作层面,包括把站点放到 VPN、allowlist 客户端之后,或至少在边缘层加认证访问控制,并确认流量无法绕过这些控制直接到达源站。云 WAF 的紧急规则(如 Cloudflare 在 10 月 21 日发布的异常执行规则)只能作为弱止损,其公告并未点名这两个 CVE,也无法覆盖所有变体。真正移除漏洞的动作只有一个:在补丁发布后,将 PHP 运行时升级到包含修复的版本(计划中的 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)。
收束: 把 session.upload_progress.enabled = Off 当作止血带,而不是治疗。能做就做,做完后用 Web 请求验证生效;但不要因为它已设置就推迟打补丁,也不要把它当作“PHP2Shell 已解决”的结论。
以上内容仅供参考,请仔细甄别
转载请注明出处,版权归原作者所有。