PHP后门不能仅靠删文件清除,需结合代码行为分析(如eval/base64_decode)、文件时间比对、哈希校验、数据库钩子排查、配置文件审查及权限加固等多维度交叉验证。

PHP后门不是靠“删文件”就能解决的——它可能藏在合法文件里、用加密函数混淆、或通过数据库/缓存持久化。直接删一个 shell.php 只是表面清理,真正的风险在于没发现的隐蔽入口。
怎么看文件里有没有被注入恶意代码
重点不是找“明显木马名”,而是搜可疑行为模式。PHP后门常依赖 eval、assert、system、exec、passthru、shell_exec 这类函数,但攻击者会用变量拼接、base64_decode 套壳绕过简单 grep。
- 先用
grep -r "eval\|assert\|system\|exec\|passthru\|shell_exec" /var/www/html/ --include="*.php"快速扫一遍,但别全信结果——很多后门会写成$a='ev'.'al';$a($_POST['x']); - 重点关注
base64_decode和gzinflate调用:它们常用来解包隐藏逻辑,比如eval(base64_decode("..."))或eval(gzinflate(base64_decode("..."))) - 检查文件修改时间是否异常:用
find /var/www/html -name "*.php" -mtime -7 -ls找最近被改过的 PHP 文件,尤其那些你没动过却时间戳更新了的 - 对比原始程序哈希:如果你用的是 WordPress、ThinkPHP 等框架,下载官方源码,用
sha256sum对比核心文件(如wp-includes/load.php),不一致就极可能被篡改
怎么判断后门是不是已经连上数据库或写进配置
后门不止在 PHP 文件里,也可能把自身注册进数据库钩子(如 WordPress 的 wp_options 表里插恶意 active_plugins 或 cron 任务),或者往 .htaccess、php.ini、wp-config.php 插入自动加载逻辑。
- 查 WordPress 的
wp_options表:SELECT * FROM wp_options WHERE option_name LIKE '%auto%' OR option_value LIKE '%eval%' OR option_value LIKE '%base64%'; - 检查
.htaccess是否有异常RewriteRule指向隐藏 PHP 文件,或添加了php_value auto_prepend_file - 翻
php.ini或用户级.user.ini,确认没有设置auto_prepend_file或auto_append_file指向未知脚本 - 看
wp-config.php结尾有没有多出的require_once或include行——这是常见 WordPress 后门落点
删完之后怎么防止它立刻回来
删后门只是应急,不堵住漏洞等于给黑客留着门钥匙。绝大多数 PHP 后门是通过未修复的 CMS 插件漏洞、弱口令后台、或开放的文件上传接口进来的。
立即学习“PHP免费学习笔记(深入)”;
- 立刻禁用所有非必要插件/模块,尤其是来源不明、长期未更新的(比如 WordPress 上 “WP File Manager” 旧版曾爆高危 RCE)
- 重置所有管理员密码,包括数据库用户、FTP、CMS 后台、服务器 SSH(如果共用密码)
- 关掉
allow_url_include = On和display_errors = On——前者让远程代码包含成为可能,后者会泄露路径和调试信息给攻击者 - 限制上传目录执行权限:
chmod -R 755 /var/www/html/wp-content/uploads/,再加deny from all到该目录下的.htaccess(Apache)或 Nginx 配置里禁止 PHP 执行
最麻烦的不是找到后门,而是它可能已建立多个入口点:一个在主题函数里,一个在数据库定时任务里,一个在 .user.ini 里自动预加载。清理必须交叉验证——文件扫描 + 数据库查 + 配置检查 + 权限收紧,缺一不可。











