PHP后门需通过修改时间、可疑函数、隐藏文件等多维度定位,确认后再删除;同IP多站点须隔离用户、open_basedir、session路径及禁用危险函数;清理后须检查数据库、crontab和日志,并堵住插件更新、Git残留、slowlog权限等漏洞入口。
PHP后门文件怎么快速定位和删除
PHP后门不是靠
杀毒软件
能扫干净的,它往往伪装成正常文件(比如
、
、
),或藏在图片里(
)。重点不是“删哪个”,而是“怎么确认它是后门”。
先查最近修改时间:用
找 7 天内新增/改过的 PHP 文件
再筛可疑特征:用
—— 注意
在 PHP 7.2+ 默认禁用,但老版本仍可被利用
检查隐藏文件:
看有没有
、
这类带点开头的文件
别直接
,先
确认是 PHP 脚本;再
看头部是否含混淆代码(如长 base64 字符串、
关闭错误提示)
同IP多站点如何防止PHP后门交叉感染
共享 IP 不是问题根源,共享用户权限、共享临时目录、共享 session 存储路径才是。Apache 或 Nginx 本身不传播后门,但 PHP 进程若以同一系统用户(如
)运行所有站点,一个站被拿下,就能读写其他站的文件。
每个站点必须用独立系统用户:用
创建隔离用户,再配 PHP-FPM 池(
,
)
禁用全局
,改用 per-pool 配置:
关闭危险函数:在对应 pool 的
里设
(注意
常被忽略)
session.save_path 必须分站指定,不能共用
;否则 A 站可伪造 session ID 写入恶意数据,B 站反序列化时触发执行
清理后必须验证的三个硬性动作
删完文件不等于清干净。后门可能已写入数据库、注册为 WordPress 插件、或通过 crontab 持久化。
查数据库:进 MySQL,
—— 尤其检查
和
查定时任务:
(如果 PHP 进程用的是
),也别漏了
下的文件
查 Web 服务器日志:用
或
,看攻击者是否曾上传过文件、调用过 shell 路径(如
)
为什么改了密码、删了文件,几天后又出现后门
因为漏洞没堵住。常见被忽视的入口点:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
WordPress 插件更新机制被劫持:检查
是否被篡改,或插件目录下有异常
Git 仓库未清理:
可能含恶意 hook,
里可能藏加密 payload
PHP-FPM slowlog 开启但日志权限过大(如
),攻击者可写入恶意 PHP 到 slowlog 文件,再通过
加载执行
备份文件泄露:
、
如果放在 Web 目录下,可能被下载并反推数据库密码,进而登录后台上传新后门
真正的清理不在删文件,而在切断攻击链——谁写的文件、谁读的文件、谁执行的文件,这三个权限流必须全部隔离清楚。稍有松动,后门就回来得比你改密码还快。
wp-config.phpcache.phpindex1.phpshell.jpg.phpfind /var/www -type f -name "*.php" -mtime -7grep -r "eval\|base64_decode\|system\|exec\|passthru\|assert(" /var/www --include="*.php"assert()ls -la /var/www.env.php.htaccess.bakrm -ffile xxx.phphead -n 20 xxx.php@ini_setwww-dataadduser sitea --home /var/www/sitea --shell /usr/sbin/nologinuser = siteagroup = siteaopen_basedirphp_admin_value[open_basedir] = /var/www/sitea:/tmp:/usr/share/phpphp.inidisable_functions = system,exec,passthru,shell_exec,proc_open,popen,pcntl_execpcntl_exec/var/lib/php/sessionsSELECT * FROM wp_options WHERE option_name LIKE '%theme%' OR option_value LIKE '%eval%';theme_mods_*active_pluginscrontab -u www-data -lwww-data/etc/cron.d/zgrep "POST.*\.php" /var/log/apache2/access.log*nginx/access.log*/wp-content/uploads/2023/xx/shell.phpwp-includes/update.phpupdate-core.php.git/config.git/logs/chmod 666file_get_contents()config.php.bakdatabase.sql.gz