必须立即阻断攻击链、控制影响范围并启动溯源加固:一、禁用allow_url_include/allow_url_fopen及include/require函数;二、排查并清除含eval/base64_decode等特征的恶意PHP文件;三、配置open_basedir、白名单映射和路径规范化校验;四、关闭display_errors、expose_php并删除phpinfo页面。

发现PHP文件包含漏洞已导致服务器沦陷,必须立即阻断攻击链、控制影响范围,并启动溯源与加固。这不是单纯修代码的问题,而是涉及应急响应、权限清理和配置封堵的组合动作。
一、立刻切断文件包含执行通道
攻击者很可能正通过include/require加载Webshell或恶意脚本。优先从PHP运行层阻断:
- 编辑
php.ini,将allow_url_include和allow_url_fopen两项设为Off,防止远程文件包含(RFI)继续生效 - 在
disable_functions中追加include, include_once, require, require_once(注意:仅限紧急隔离阶段使用,长期禁用会影响正常逻辑,后续需替换为安全方案) - 若使用Nginx+PHP-FPM,临时注释
fastcgi_param PHP_VALUE "allow_url_include=off"并重载服务
二、定位并清除已植入的恶意文件
攻击者常将一句话木马、大马或日志型后门写入可写目录。重点排查以下位置:
- 搜索含典型特征的PHP文件:
grep -r "eval.*base64_decode\|assert.*base64_decode\|file_get_contents.*http\|include.*\$_" /var/www/html/ --include="*.php" -n - 检查上传目录、缓存目录、日志目录(如
/var/log/apache2/)中是否存在异常.php或.txt文件,尤其注意文件名伪装成1.jpg.php或带%00截断痕迹的请求记录 - 用
find /var/www/html -type f -name "*.php" -mtime -3快速列出近3天新增的PHP文件,人工核验内容
三、限制文件访问边界,防止路径遍历
即使漏洞代码未修复,也能大幅压缩攻击面:
立即学习“PHP免费学习笔记(深入)”;
- 设置
open_basedir,限定PHP只能访问指定路径,例如:open_basedir = "/var/www/html:/tmp:/var/log",确保不包含系统敏感路径 - 检查所有
include调用点,把动态拼接改为白名单映射,例如:$pages = ['home' => 'home.php', 'about' => 'about.php']; include($pages[$_GET['page']] ?? 'home.php'); - 对用户传入的路径参数做规范化处理:
realpath()+str_starts_with()校验是否仍在允许目录内,拒绝任何跳出根目录的尝试
四、关闭调试信息,防止进一步情报泄露
错误页面可能暴露绝对路径、PHP版本、扩展列表等关键信息,为二次攻击铺路:
- 将
display_errors设为Off,error_reporting设为E_ALL & ~E_NOTICE & ~E_DEPRECATED - 确认
expose_php = Off,避免HTTP头返回X-Powered-By: PHP/8.1.2 - 检查
phpinfo()页面是否被误上传到Web目录,立即删除
服务器沦陷后,不能只清理表面文件。要同步检查SSH密钥、数据库账号、cron任务、其他Web应用是否被横向渗透。修复完成后,务必升级PHP至官方支持的最新稳定版,并启用WAF规则拦截..%2f、%00、php://等高危模式。



















