PHP 8.3 网站需优先修复 php2shell(CVE-2026-109618/109619)和 SSRF 两类漏洞:前者须升级至 8.3.36+ 并重启 php-fpm/apache,禁用 session.upload_progress 仅作临时缓解;后者须在业务代码中对用户输入 URL 实施协议白名单、DNS 解析校验及私有网段拦截,不可依赖 PHP 版本更新。

PHP 8.3 网站扫描发现漏洞,修复方案不能只写“升级版本”四个字——得说清哪类漏洞、对应哪条路径、谁来改、怎么验。当前(2026年10月)最需优先响应的是两个高危漏洞:一是 php2shell 远程代码执行漏洞(CVE-2026-109618/109619),二是 SSRF 服务端请求伪造漏洞(非 PHP 版本缺陷,但常在 PHP 8.3 应用中暴露)。下面分场景给出可落地的修复动作。
确认是否真受影响:先查版本,再对号入座
很多所谓“扫描出漏洞”,其实是误报或环境不匹配。必须人工验证:
- 执行
php -v和php-fpm -v(若用 FPM),确认 CLI 和 Web 运行的实际版本; - 对照官方影响范围:PHP 8.3.x 中,低于 8.3.36 的所有版本均受 php2shell 影响;
- SSRF 不看 PHP 版本,而看代码里有没有直接拼接用户输入 URL 并调用
file_get_contents()、curl_init()等函数; - 打开
phpinfo()页面,检查session.upload_progress.enabled是否为On——这是 php2shell 的一条已知攻击入口。
php2shell 漏洞:升级是唯一可靠解法
该漏洞存在于 PHP 解释器内核内存管理逻辑中,无法靠代码层过滤绕过。临时配置只是收窄攻击面,不能替代升级:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 升级到 PHP 8.3.36 或更高版本,下载地址以官方为准:php.net/downloads.php;
- 升级后必须重启全部工作进程:
systemctl restart php8.3-fpm或service apache2 restart; - 若用 cPanel、Plesk 或宝塔等面板,请在软件管理中切换 PHP 版本并勾选“重启服务”;
- 禁用
session.upload_progress.enabled=0可作为过渡防护,但需写入全局php.ini或 FPM pool 配置,ini_set()无效。
SSRF 漏洞:修复在业务代码,不在 PHP 版本
PHP 8.3.36 不修复 SSRF,它只修复了 php2shell。SSRF 是你写的调用逻辑没校验导致的,必须改代码:
- 找到所有接收用户传入 URL 的接口(如“远程图片抓取”“Webhook 地址配置”“第三方回调地址”);
- 对每个 URL 执行三层校验:协议白名单 → 域名/IP 解析 → 私有网段拦截;
- 禁用危险协议:
if (!in_array($scheme, ['http', 'https'], true)) die('Invalid scheme');; - 用
getaddrinfo()或dns_get_record()获取真实 IP,不用gethostbyname()(防 DNS 重绑定); - 拒绝私有地址段:
127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、100.64.0.0/10; - cURL 必须加:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false),防止跳转绕过校验。
验证是否修好了
别信扫描报告一勾就完事,要实测:
- 对 php2shell:用 PoC 请求含恶意 payload 的 multipart 表单,观察是否返回 500 或直接崩溃;
- 对 SSRF:尝试传
http://127.0.0.1:6379/info、http://attacker.com@192.168.1.1、gopher://127.0.0.1:11211,确认全部被拦截且无内网发包; - 检查 error_log 和 access_log,确认异常请求已被记录或拦截;
- 用 curl -v 或 Burp 抓包,确认响应头、状态码、响应体符合预期(如 400 错误而非空响应)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










