PHP2Shell 已经修复。
你的 PHP 呢?
PHP 本身的两个严重漏洞 CVE-2026-109618 和 CVE-2026-109619 已于 2026 年 10 月 21 日修复。把 php -v 的输出贴进来,看看你的情况。
受影响。请升级到 8.3.36。
然后重启每一个 PHP worker。
php -v 显示的是命令行版本,Web 服务器跑的可能是另一个。可以运行 php-fpm8.3 -v,或者通过网站打开 phpinfo()。
PHP 8.3 升级步骤已修复版本2026年10月21日
漏洞在哪一层
两个漏洞都在 PHP,不在你的代码里。升级它,重启 worker,服务器上的每个站点就都修好了。
- 严重程度
- 两个都是严重级,CVSS v4.0 9.2
- 攻击入口
- Apache mod_php、PHP-FPM、php-cgi、FrankenPHP、LiteSpeed
- 风险最高
- mod_php,无需登录,在你的代码运行前就会触发
- 在野利用
- 截至 2026 年 10 月 22 日,官方公告未报告
每个分支一行
找到你的分支,看修复它的版本号。同一分支上更低的版本都受影响。
- 已发布修复版本
- 仅源码移植
- 无官方修复
- 核对于 2026年10月22日
横条止于 php.net 官方支持结束日
版本号来自 php.net 公告和两份安全公告,生命周期日期来自 php.net 支持版本页。完整表格见修复状态页。
- PHP 8.58.5.12支持至 2029年12月31日
- PHP 8.48.4.27支持至 2028年12月31日
- PHP 8.38.3.36支持至 2027年12月31日
- PHP 8.28.2.35支持至 2026年12月31日
- PHP 8.1仅源码移植2025年12月31日停止支持
- PHP 8.0仅源码移植2023年11月26日停止支持
- PHP 7.4仅源码移植2022年11月28日停止支持
- PHP 7.3 and older无官方修复多年前已停止支持
暂时还不能升级的话
下面这些设置能降低风险,但不能保证安全。PHP 项目的说法是,只有升级才安全。
代理层也要设
在 PHP 前面限制请求大小、字段数、multipart 分段数、请求头数量和嵌套深度,没有 Content-Length 的请求也要管。
PHP 8.5 上还要设置 fatal_error_backtraces = 0。不要使用 RLIMIT_AS 或 RLIMIT_DATA,这个漏洞走的正是内存分配失败这条路。来源 GHSA-w8hw-w9fx-j79w 和 GHSA-6wmf-4rv5-p3rp。
[www]; 原有的池配置保持不变; CVE-2026-109618, 降低风险php_admin_value[memory_limit] = -1不设内存上限
CVE-2026-109618 在请求耗尽内存时触发。用 php_admin_value 锁定,脚本就没法再调低。
php_admin_value[post_max_size] = 8Mphp_admin_value[upload_max_filesize] = 4M限制请求体大小
不需要上传时设 8M,需要时设 32M。upload_max_filesize 要小于 post_max_size。
php_admin_value[max_input_nesting_level] = 16限制输入嵌套
调低表单和查询参数数组的嵌套上限。16 只是示例,请用你的应用测一下。
; CVE-2026-109619, 降低风险php_admin_flag[session.upload_progress.enabled] = off关闭上传进度
这是针对 CVE-2026-109619 的开关。在这里或 php.ini 里设置,不要用 ini_set() 或 .user.ini。打完补丁也保持关闭。
php_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php8.3-fpm.www.log保留证据
把所有错误写进一个你会去看的日志文件,并在 php.ini 里设 error_reporting = E_ALL。日志干净不代表没事。
; 可选,会降低吞吐量pm.max_requests = 1每个 worker 只处理一个请求
可选,而且慢。每个 worker 处理完一个请求就退出,不会有状态残留。
; 然后重启每一个 worker$ sudo systemctl restart php8.3-fpm免费的修复办法
第一步, 查看版本。
php -v 查的是命令行版本。要问 Web 服务器实际运行的那个二进制,或者通过网站打开 phpinfo()。
第二步, 升级软件包。
装上发行版的修复包,或者从 php.net 编译已修复的版本。它的 changelog 里应该写着这两个 CVE。
最后,重启 每一个 worker。
正在运行的 worker 会把旧的 PHP 留在内存里,直到重启。用 mod_php 的话,改为重启 Apache。
第 1 步,共 3 步 · 查看版本
$ php-fpm8.3 -v PHP 8.3.30 (fpm-fcgi) (built: Oct 2 2026 09:14:52) Copyright (c) The PHP Group Zend Engine v4.3.30, Copyright (c) Zend Technologies
第 2 步,共 3 步 · 升级软件包
$ sudo apt update $ sudo apt install --only-upgrade 'php8.3-*' The following packages will be upgraded: php8.3-cli php8.3-common php8.3-fpm php8.3-opcache 4 upgraded, 0 newly installed, 0 to remove. Setting up php8.3-fpm (8.3.36-1) ...
第 3 步,共 3 步 · 每一个 worker
$ sudo systemctl restart php8.3-fpm $ php-fpm8.3 -v PHP 8.3.36 (fpm-fcgi) (built: Oct 21 2026 18:40:07)
PHP 跑在哪里,
决定下一步怎么做
找人帮忙查看来源
这里的每条信息都链接到出处,并注明我们最后一次核对的时间。来源之间有出入的地方,我们会写出来。ChangeLog 把 8.5.12 和 8.4.27 记在 10 月 22 日,公告写的是 10 月 21 日。所有来源最后核对于 2026年10月22日。
需要有人帮你弄?
说说你用的环境。
请不要粘贴密码、SSH 密钥或 API 密钥。我们一般在工作时间(中欧时间)回复。付费工作先书面确定范围,再开发票。我们不做应急响应。
- 时间
- 周一至周五,9:00–18:00(中欧时间)
- 计费
- 先书面确定范围,再开发票