php后门清理须先定位验证再隔离,不可盲目删除;应排查可疑文件名、修改时间、高危函数、异常权限等,并通过web服务器拦截或禁用危险函数临时阻断,同时核查数据库钩子、主题functions.php、定时任务及管理员账户,无备份时优先导出数据库、打包文件、记录异常进程。

PHP后门不能靠“删文件”草率处理,尤其无备份时盲目删除可能破坏业务逻辑、导致网站崩溃或数据库连接中断。真正的清理必须先定位、再验证、最后隔离,而不是直接 rm -rf。
怎么识别可疑的 PHP 后门文件
后门往往伪装成正常文件:比如 wp-cache.php(非 WordPress 官方缓存文件)、index1.php、shell.php、z.php,或隐藏在 uploads/、cache/、wp-content/plugins/ 等可写目录下。重点排查:
- 文件修改时间明显晚于 CMS 版本发布时间(如 WordPress 6.4 是 2023-07-10 发布,但某
theme/footer.php修改时间是 2024-03-22) - 包含
eval(、base64_decode(、system(、passthru(、assert(、create_function(等高危函数调用(注意:有些合法插件也会用eval,需结合上下文判断) - 文件权限异常(如
777的 PHP 文件)或属主不属于 Web 进程用户(如属主是root但运行的是www-data) - 空白文件名、点开头文件(如
.env.php)、或名字与已知核心文件仅差一个字母(如functons.php)
不删文件也能临时阻断后门执行
如果无法立刻确认某个 PHP 文件是否为后门(例如它被正常业务引用),优先用 Web 服务器层拦截,避免误删引发 500 错误:
- Apache:在
.htaccess或虚拟主机配置中加Redirect 403 /path/to/suspicious.php或<files> Require all denied</files> - Nginx:在 server 块中加
location = /uploads/z.php { return 403; } - PHP 层:修改
php.ini中disable_functions,加入exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec(注意:部分 CMS 需要curl_exec,别误禁)
这类操作不影响数据库和静态资源,且可随时回退。
立即学习“PHP免费学习笔记(深入)”;
如何安全清理又不丢数据
数据库本身不会因删 PHP 文件而损坏,但以下三类关联项必须手动核对:
- 后门常通过
wp_options(WordPress)或config.php注入恶意 URL、webshell 路径、或伪造的管理员账号 —— 清理后务必检查option_name LIKE '%redirect%' OR option_name LIKE '%shell%'等关键词 - 某些后门会 hook 到主题的
functions.php末尾,插入一行include '/tmp/x.php';—— 删除文件前先搜所有functions.php是否含异常include/require - 检查 crontab(
crontab -u www-data -l)和系统定时任务(/etc/cron.d/),后门可能用 PHP 脚本定期拉取新 payload
真正危险的不是“删错一个 PHP 文件”,而是删完没查数据库里的持久化钩子、没关掉定时任务、也没重置被后门创建的管理员账户。
无备份时最该做的三件事
没有备份≠只能硬扛。立即执行:
- 导出当前数据库(
mysqldump -u root -p dbname > clean.sql),哪怕它已被篡改,也是后续溯源的依据 - 打包当前全部 PHP 文件(
tar -czf site-before-clean.tar.gz /var/www/html/),压缩包权限设为600并移出 Web 目录 - 记录所有异常进程(
ps aux | grep php)、网络连接(netstat -tulnp | grep :80)、最近登录(last -a | head -20)
这些动作不改动线上逻辑,但能保住调查线索 —— 很多人删完才发现后门早把数据库密码写进日志,而日志刚被 rm -rf 掉了。











