网站恶意代码清理:网站被植入恶意代码怎么办?一次完整的清理实
准备阶段:备份与工具就绪
动手清理之前,先做两件事:全站文件和数据库备份、准备排查工具。
如果你用的是宝塔面板,可以在后台“文件”菜单全选站点目录,直接打包下载一份到本地。
数据库备份则在“数据库”页面选择对应库,点击“导出”。
另外推荐安装两个 Linux 命令:grep 和 find(一般系统自带)。
Windows 服务器用户可以在文件资源管理器里用“搜索内容”功能代替。
从访问日志定位可疑入口
恶意代码通常通过上传漏洞、插件漏洞或弱口令进入。
打开宝塔面板的“日志”菜单,查看网站的访问日志(access.log),重点关注 POST 请求和 ? 参数中包含 eval、base64_decode、assert 等关键词的 URL。
# 在日志目录下搜索可疑请求(请将 /www/wwwroot/your_site/logs 替换为实际路径)
grep -E '(eval|base64_decode|assert)' /www/wwwroot/your_site/logs/access.log
如果发现某个 URL 频繁出现异常请求,记下对应文件路径。
恶意文件通常命名为 1.php、shell.php、wp-config.bak.php 等,或隐藏在正常目录伪装成图片(如 logo.jpg.php)。
两步查找恶意文件
1. 根据后门特征全局搜索
在站点根目录下用 grep 扫描包含常见恶意函数的文件:
cd /www/wwwroot/your_site
# 搜索 PHP 文件中的 eval、base64_decode、file_put_contents 等可疑函数
grep -rl 'eval(' --include='*.php' ./
grep -rl 'base64_decode' --include='*.php' ./
grep -rl 'file_put_contents' --include='*.php' ./
找到的文件逐行检查,特别是最近修改过的。
注意部分主题、插件代码也可能使用 eval,要区分是否是正常功能。
如果不确定,可以先移到备份目录(如 ./bak/)再观察网站是否异常。
2. 按修改时间排查可疑文件
查看最近 7 天内被修改过的 PHP 文件:
find ./ -name '*.php' -mtime -7 -type f
如果配合之前日志定位的入口时间,可以进一步缩小范围。
比如上周三凌晨被入侵,就用 -newer 参数限定那个时间点后修改的文件。
清理数据库中的恶意代码
不少恶意代码会写入 WordPress 或其他 CMS 的数据库,比如在 wp_posts 表的 post_content 字段插入隐藏的 iframe。
登录 phpMyAdmin 或宝塔面板的“数据库管理”,逐一查看内容表,执行 SQL 搜索:
SELECT * FROM wp_posts WHERE post_content LIKE '%
找到后可以直接在管理工具里删除对应行或替换掉恶意字符。记得先备份数据库再执行删除操作。
加固与预防:防止二次入侵
清理完恶意文件后,不要急着上线,先做这几步封闭后门:
- 修改所有密码:FTP、数据库、网站后台、服务器 SSH 密码,全部换成高强度(至少 16 位大小写数字符号组合)。
- 删除无用插件和主题:尤其是来源不明的破解版。
- 禁用文件编辑功能:在
wp-config.php中追加define('DISALLOW_FILE_EDIT', true);。 - 加固上传目录:在 Nginx 或 Apache 配置中禁止 PHP 执行。例如宝塔面板中可以在“站点设置→伪静态”里添加规则:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
避坑指南与高频问题
Q:清理后网站首页依然被劫持?
可能是浏览器缓存或 CDN 缓存未刷新。先清空本地浏览器缓存,再强制刷新一次。如果用了 CDN,到 CDN 后台刷新缓存。
Q:删掉某文件后网站报错,是误删了吗?
先把备份文件还原到新文件名(如原文件 +_bak),再观察报错是否消失。如果消失证明误删,可以把正常版本放回。
Q:用了杀毒软件扫描都查不出木马?
有些一句话木马变形很严重,建议使用在线木马查杀工具(如 D盾、河马),或者手动按特征搜索。
最后提醒:清理后建议开启宝塔面板的“防火墙”和“入侵防御”功能,定期检查日志,避免再次被攻破。
如果问题反复出现,考虑重装系统并升级所有软件到最新版。