我有漏洞吗?
PHP2Shell 版本检测工具
粘贴版本号、php -v 的输出,或整批服务器的版本(每行一个)。检测在你的浏览器里完成,不会上传任何数据。
最后核实 2026-10-22
粘贴版本号、php -v 的输出,或每行一个版本批量检测整批服务器。完全在你的浏览器内运行。
试试:
CLI 和 Web 服务器可能使用不同的 PHP 构建。请检查 Web 服务器实际使用的版本:php-fpm -v(或 php-fpm8.3 -v),或在该站点上访问 phpinfo()。
| 分支 | 存在漏洞 | 修复版本 |
|---|---|---|
| 8.5 | < 8.5.12 | 8.5.12 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.1 · 8.0 · 7.4 | 全部 | 仅源码回移植 |
| 5.4 – 7.3 | 全部 | 无修复 |
收集要粘贴的版本
真正要看的是处理 Web 请求的那个 PHP。同一台机器上的 CLI 可能是另一个构建。
shell
# One host: the binary that serves web traffic
php-fpm -v 2>/dev/null || php -v
# Many hosts over SSH — paste the output into the checker
for h in web1 web2 web3; do
printf '%s ' "$h"; ssh "$h" "php -r 'echo PHP_VERSION, PHP_EOL;'"
done
# Exact Debian/Ubuntu package version (shows distro backports)
dpkg-query -W -f='${Package} ${Version}\n' 'php*-common'
# RHEL family
rpm -q php-common各检测结果的含义
| 结果 | 含义 | 怎么做 |
|---|---|---|
| 存在漏洞 | 上游版本低于该分支的首个修复版本。 | 升级并重启。如果是操作系统软件包,先看 changelog——可能已经包含回移植补丁。 |
| 需查发行版 | 版本字符串带有发行版后缀(ubuntu、deb、el、amzn、suse、fc)。 | 发行版会在不提升上游版本号的情况下回移植补丁。请在软件包 changelog 中查找 CVE 编号。 |
| 存在漏洞 · 已停止支持 | 8.1 或更早的分支——不会再有新的 PHP 版本。 | 迁移到 8.4 / 8.5。临时办法:厂商回移植,或 PHP 为 7.4 / 8.0 / 8.1 提供的源码回移植。 |
| 已修复 | 等于或高于首个修复版本。 | 确认升级后所有 worker 都已重启。 |
| 更新的分支 | 比公告覆盖的所有分支都新。 | 应已包含修复;请在发布说明中确认。 |
| 早已停止支持 | 早于 5.4——不在已报告的范围内。 | 虽未列为受影响,但早已停止支持且有其他严重漏洞。请迁移。 |
为什么发行版构建要多看一眼
Ubuntu 的 8.3.6-0ubuntu0.24.04.x 或 Debian 的 8.2.x-1~deb12uN 会保留发布时的上游版本号,再在其上叠加安全补丁。所以一台机器显示 “8.3.6” 也可能已经修复。反过来也一样:旧镜像里一个看起来很新的版本号也可能没修复。
Ondřej Surý 仓库(deb.sury.org)的软件包与上游版本保持一致,因此检测工具会把它们当作官方版本来判断。
下一步
- 修复 / 打补丁PHP2Shell 分步修复:Ubuntu、Debian、Sury、RHEL、Remi、Alpine、Docker、cPanel EasyApache、Plesk、Homebrew、Windows,以及重启、验证和 PHP 8.1 及更早版本的出路。
- 临时缓解暂时无法升级时的 PHP2Shell 缓解措施:memory_limit、post_max_size、上传进度、fatal_error_backtraces、cgroup 内存上限——各自能挡住什么、会带来什么副作用。
- 主机商使用虚拟主机或托管主机时你无法自己升级 PHP。如何在 cPanel、Plesk 等面板里查看和切换 PHP 版本、各主机商的公开表态,以及该向他们问什么。