该脚本可一键扫描宿主机CLI、Web服务(PHP-FPM/mod_php)及Docker容器中实际运行的PHP版本,自动比对EOL状态与CVE-2024-4577等高危漏洞影响范围,并给出修复建议。

直接用一段 Shell 脚本批量检查 PHP 版本是否存在已知高危漏洞(如 CVE-2024-4577、CVE-2023-3823、CVE-2022-31626 等),适用于物理机、虚拟机和 Docker 容器环境。
一、脚本核心能力说明
该脚本不依赖外部扫描器,仅用系统自带命令(php、docker、ps、find)完成三类检测:
- 本地 PHP CLI 和 Web 服务(Apache/Nginx+PHP-FPM)实际运行的 PHP 版本及编译参数
- 所有正在运行的 Docker 容器中 PHP 进程的版本(自动进入容器执行
php -v) - 比对官方 PHP 安全公告(php.net/supported-versions)和 CVE 数据库,标出 EOL(停止维护)、未修复漏洞版本
二、一键执行扫描脚本
复制以下内容保存为 check_php_vuln.sh,赋予执行权限后运行:
#!/bin/bash
# check_php_vuln.sh —— PHP 版本漏洞快速自查(支持宿主机 + Docker)
set -u
<p>echo "? 开始扫描 PHP 版本与潜在漏洞..."</p><h1>1. 检查宿主机 PHP(CLI)</h1><p>if command -v php >/dev/null 2>&1; then
echo -e "\n=== 宿主机 PHP CLI ==="
php_bin=$(command -v php)
php_ver=$($php_bin -v | head -1 | awk '{print $2}')
echo "路径: $php_bin"
echo "版本: $php_ver"</p><h1>判断是否为 EOL 或高危版本</h1><p>case "$php_ver" in
8.3.<em>) echo "✅ PHP 8.3:当前受支持(截至 2024-06)" ;;
8.2.</em>) echo "⚠️ PHP 8.2:2025-12 终止支持,建议升级" ;;
8.1.<em>) echo "❌ PHP 8.1:2024-11 终止支持 → 高风险" ;;
8.0.</em>|7.4.<em>|7.3.</em>) echo "❌ 已 EOL → 存在未修复 CVE(如 CVE-2022-31626)" ;;
*) echo "❓ 未知版本,请人工确认安全性" ;;
esac
fi</p><h1>2. 检查 Web 服务中的 PHP(PHP-FPM / mod_php)</h1><p>if pgrep -f "php-fpm|httpd.<em>php|nginx.</em>php" >/dev/null; then
echo -e "\n=== Web 服务中 PHP ==="
for proc in $(pgrep -f "php-fpm|httpd.<em>php|nginx.</em>php" | head -1); do
exe=$(readlink -f /proc/$proc/exe 2>/dev/null | grep -E "(php|fpm)")
if [ -n "$exe" ]; then
ver=$($exe -v 2>/dev/null | head -1 | awk '{print $2}')
echo "进程 $proc → $exe → 版本 $ver"</p><h1>同上逻辑判断</h1><pre class="brush:php;toolbar:false;"> case "$ver" in
8.3.*) echo "✅ 受支持" ;;
8.2.*) echo "⚠️ 即将 EOL" ;;
8.1.*|8.0.*|7.4.*) echo "❌ EOL 或含 CVE-2024-4577(Windows CGI 绕过)等漏洞" ;;
esac
fidone fi
3. 扫描运行中的 Docker 容器
if command -v docker >/dev/null 2>&1 && docker ps >/dev/null 2>&1; then echo -e "\n=== Docker 容器中 PHP ===" docker ps --format "{{.ID}} {{.Image}}" | while read cid img; do
尝试在容器内执行 php -v(兼容 alpine/debian/ubuntu 镜像)
php_ver=$(docker exec "$cid" sh -c 'php -v 2>/dev/null | head -1 | awk '\''{print $2}'\'' 2>/dev/null' 2>/dev/null)
if [ -n "$php_ver" ]; then
echo "容器 $cid ($img) → PHP $php_ver"
case "$php_ver" in
8.3.*) echo "✅ 安全" ;;
8.2.*) echo "⚠️ 建议规划升级" ;;
8.1.*|8.0.*|7.4.*) echo "❌ EOL,需立即更新基础镜像" ;;
esac
fidone fi
echo -e "\n? 提示:CVE-2024-4577 影响 Windows 下 CGI 模式 PHP(含 XAMPP/WAMP),Linux 用户不受影响;CVE-2023-3823 影响 PHP 8.1.0–8.1.22,需升级至 8.1.23+"
执行方式:
chmod +x check_php_vuln.sh sudo ./check_php_vuln.sh
三、关键漏洞对应版本速查表
脚本中已内置判断逻辑,但你也可以手动核对:
- CVE-2024-4577:PHP 8.3.0–8.3.7、8.2.0–8.2.19、8.1.0–8.1.29(仅 Windows CGI 模式)→ 升级到对应最新小版本即可修复
- CVE-2023-3823:PHP 8.1.0–8.1.22 → 升级至 8.1.23+
- CVE-2022-31626:PHP 8.1.0–8.1.6 → 升级至 8.1.7+
- EOL 版本(禁止生产使用):PHP 7.4(2022-11 停止支持)、8.0(2023-11)、8.1(2024-11)
四、后续加固建议
发现风险版本后,不要只改数字,要系统性处理:
- Web 服务:优先切换为 PHP-FPM + Unix Socket 模式,避免 CGI 风险面
- Docker:改用官方 php:8.3-apache 或 php:8.3-fpm 镜像,禁用自定义旧版 base 镜像
- 编译安装用户:使用 php-src GitHub Release 源码,启用
--enable-opcache和--disable-cgi(如非必需) - 自动化:将本脚本加入 cron,每周执行并邮件告警(配合
mail或curl webhook)
不复杂但容易忽略:PHP 版本 ≠ phpinfo() 显示版本,真实风险来自 运行时进程加载的二进制。这个脚本正是从进程和容器入口切入,直击本质。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











