PHP后门清理不能依赖一键扫描,需人工+工具双轨排查,重点识别非授权可执行代码;警惕混淆型后门、多后缀文件及系统文件篡改,迁移核心是重建信任链而非盲目删除。

PHP后门不是靠“一键扫描”就能清干净的,它往往藏在正常业务文件里、被混淆或伪装成配置片段,盲目删文件可能直接瘫痪网站。迁移前必须人工+工具双轨排查,重点不是“删”,是“识别出非授权可执行代码”。
怎么快速定位可疑 PHP 后门文件
后门常驻于上传目录、模板目录、缓存目录,但更危险的是混进 index.php、functions.php 或主题 footer.php 末尾。别只盯着 .php 后缀——.inc、.phar、.phtml 甚至带空格的 shell .php 都可能被执行。
- 用命令快速筛:
find /var/www -name "*.php" -type f -exec grep -l "eval\|base64_decode\|gzinflate\|str_rot13\|assert(" {} \; - 注意 false positive:WordPress 的
wp-includes/compat.php也含assert,得结合上下文判断 - 重点关注最近修改时间异常的文件:
find /var/www -name "*.php" -type f -mtime -7
如何识别混淆型 PHP 后门(不报错但能执行)
攻击者常用变量拼接、动态函数名、十六进制字符串绕过关键词检测。比如 $a = "e" . "v" . "a" . "l"; $a($_POST['x']); 或 $b = "\x65\x76\x61\x6c";,静态扫描基本失效。
- 用
php -l检查语法没问题 ≠ 安全,得运行时分析:临时启用disable_functions并配合日志看哪些文件调用了高危函数 - 检查
$_REQUEST、$_POST、$_GET是否被无条件传入eval、system、passthru - 用
php -d display_errors=1 -f suspicious.php触发报错,有时会暴露隐藏逻辑分支
迁移前要不要删文件?删错怎么办
别直接 rm -rf。很多后门和业务逻辑耦合,删了导致订单不入库、登录失效。迁移的本质是“重建信任链”,不是“清空重来”。
立即学习“PHP免费学习笔记(深入)”;
- 先备份整站 + 数据库,再用干净环境(如新服务器)部署原始源码(不是当前线上代码)
- 把数据库导出后,人工比对用户表、选项表(如 WordPress 的
wp_options)是否被注入恶意跳转链接或 webhook - 若必须保留旧代码,逐个审查所有含
include、require、file_get_contents的地方,确认路径是否可控 - 临时加全局拦截:在入口文件顶部插入
if (isset($_REQUEST['cmd']) || isset($_REQUEST['x'])) die('Blocked');,观察是否影响功能
真正难清理的从来不是明面上的 shell.php,而是改写过的 wp-cron.php 或伪造的 wp-content/mu-plugins/health-check.php ——它们看起来就是系统文件。迁移前花三小时人工通读所有非标准路径下的 PHP 文件,比跑十遍扫描工具更可靠。










