修复PHP 7.3文件包含漏洞须从代码入手:严格校验用户输入、采用白名单机制控制include路径;关闭allow_url_include、设置open_basedir;禁用危险伪协议;改用file_get_contents或前端路由替代动态包含;同步加固上传目录与日志路径。

PHP 7.3 网站若存在文件包含漏洞(LFI/RFI),核心问题不在 PHP 版本本身是否“过时”,而在于代码中对用户可控参数(如 $_GET['page'])未做校验就直接传入 include()、require() 等函数。修复必须从代码逻辑入手,不能依赖版本升级“自动解决”——尤其 PHP 7.3 已停止官方维护,补丁仅覆盖特定内存类漏洞(如 CVE-2026-109618/109619),不修复文件包含。
严格限制动态包含的路径来源
禁止将任何用户输入(GET/POST/COOKIE)未经处理直接拼入包含函数。必须采用白名单机制控制可加载范围:
- 将合法页面名硬编码为数组,例如:
$pages = ['home', 'about', 'contact']; - 接收参数后仅检查是否在该数组内:
if (in_array($_GET['page'], $pages)) { include($_GET['page'] . '.php'); } - 默认值设为首页,非法值直接跳转或报错,不执行包含
禁用危险配置与伪协议
即使代码有疏漏,也可通过服务端配置降低危害面:
- 确认
php.ini中allow_url_include = Off(关闭 RFI 基础条件) - 设置
open_basedir限制 PHP 可访问的文件系统路径,例如:open_basedir = /www/wwwroot/your-site/:/tmp/ - 禁用高危伪协议:在
disable_functions中加入php://filter,php://input,data://,zip://,phar://
替换不安全函数,改用安全替代方案
避免使用 include() 动态加载模板或模块。推荐更可控的方式:
- 用
file_get_contents()读取内容后手动输出(不解析 PHP 代码),适合展示静态文本或日志 - 前端路由 + AJAX 加载内容,服务端只提供 JSON 接口,彻底剥离服务端文件包含逻辑
- 若必须模块化,改用 Composer 自动加载机制,所有类路径由框架管理,无运行时路径拼接
上传与日志场景的协同加固
文件包含常与上传漏洞、日志投毒组合利用。需同步防护:
- 上传目录禁止执行 PHP:
.htaccess中写deny from all(Apache)或 Nginx 配置location ~ \.php$ { deny all; } - 日志路径不可被包含:确保
access.log或error.log不在 Web 可访问目录下,或通过open_basedir隔离 - 敏感配置文件(如
config.php)必须移出 Web 根目录,例如放在/www/private/config.php并用绝对路径包含
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











