有一天打开自己的网站,首页变成了一面黑色背景、绿色文字的”黑客宣言”——上面赫然写着”Hacked By XXX”。你心里一沉,赶紧搜自己的网站名字,结果发现百度搜索结果里全是博彩广告页面,跟你网站半毛钱关系都没有。
再或者,更隐蔽的情况:网站看起来一切正常,你甚至完全没察觉异常。直到某天无意中打开服务器监控,发现 CPU 长期 100%,网站莫名其妙变卡了。
不管是哪种,你的第一反应大概率是慌。
别慌。这篇文章就是专门为这种情况写的。我经手处理过十几起网站被入侵的事件——从挂博彩页面、植入恶意跳转、到数据库被篡改、服务器被当肉鸡挖矿,各种情况都遇到过。这篇文章把整个排查和修复流程拆成六步,每一步都告诉你具体怎么做,照着来就行。
第一步:先别动,判断被黑到什么程度
发现异常后,绝大多数人的本能反应是立刻登录后台删东西、改密码。
我的建议是:先别动。
为什么?因为你根本不知道黑客在系统里留了多少个后门。你这边删一个文件,他那边从另一个入口又进来了。得先搞清楚入侵程度,才能制定修复方案,不然就是打地鼠。
攻击程度分三级,先判断你在哪一级:
| 级别 | 症状 | 常见原因 |
|---|---|---|
| 轻度 | 个别页面被篡改、多了几篇来路不明的文章 | 弱密码、后台账号被盗 |
| 中度 | 首页被替换、被挂博彩/色情广告、搜索结果异常 | 主题或插件漏洞、文件上传漏洞 |
| 重度 | 数据库被加密勒索、服务器被植入挖矿木马、对外发起攻击被机房封 IP | 服务器权限被提权、系统漏洞 |
怎么快速判断?三个检查动作:
第一,查首页。 浏览器直接访问,看有没有被替换。首页正常也别大意,用手机(不同网络环境)再访问一次。有些恶意代码很鸡贼,会判断访问来源——搜索引擎爬虫和手机端才显示恶意内容,你自己电脑上看着却一切正常。
第二,查搜索结果。 在百度搜索框输入 site:你的域名,看搜索结果里的标题和描述有没有出现”赌博”、”博彩”、”色情”之类的词。如果有,说明被挂了针对搜索引擎的恶意代码(业内叫 SEO Spam),黑客通过你的网站给灰产做排名。
第三,查服务器资源。 登录服务器,敲 top 命令看 CPU 使用率。如果没跑什么任务但 CPU 长期接近 100%,大概率被植入了挖矿木马——黑客拿你的服务器当矿机,电费他不用出,性能损耗全算你的。
第二步:立刻执行的四项紧急措施
确认被黑后,下面四件事马上做,不管什么程度的攻击都适用。
2.1 开启网站维护模式
先把你网站和访客隔离开,防止恶意代码继续传播,影响范围扩大。
宝塔面板用户在网站设置里直接开启”站点维护”模式即可。没有宝塔的话,在网站根目录创建一个 503.html,然后通过 Nginx 把所有流量指向这个页面:
rewrite ^(.*)$ /503.html break;
处理完安全事件后再去掉这条规则。
2.2 改掉所有密码,是所有
不是只改后台登录密码,是全部改一遍。需要改的清单:
- 网站后台管理员密码(以及所有管理员账号的密码)
- 数据库密码(改完记得同步更新网站配置文件)
- 服务器 SSH 密码
- 控制面板登录密码(宝塔、cPanel 等)
- 域名注册商账户密码
- FTP 密码(如果有的话)
密码怎么设: 至少 16 位,大小写字母 + 数字 + 特殊符号混排,不要用任何有意义的单词或日期。推荐用密码管理器(Bitwarden 免费好用)生成随机密码,自己记不住没关系,管理器帮你记。
2.3 检查用户列表
登录后台,逐一检查所有用户。重点关注:
- 有没有你根本不认识的账号
- 管理员身份是不是多了一个你不认识的人
- 普通用户的权限有没有被偷偷提升
发现可疑账号,立即删除,不用犹豫。
2.4 保留证据
如果你打算报案或者追究责任,修改任何东西之前,先截屏保存被黑页面、导出服务器日志。这些是后续追查的原始证据。当然,如果你只是个人网站,修复为主,这一步可以跳过。
第三步:把恶意代码揪出来
这是整个修复过程中最需要耐心的一步。黑客藏代码的手法五花八门,但有几个固定的藏身之处,排查优先级从高到低:
3.1 高优先级排查位置
主题文件。 functions.php 和 header.php 是黑客最爱的注入点。用宝塔面板的文件管理,按修改时间排序,找出最近在你不知情的情况下被改过的文件。这两个文件如果修改时间异常,立刻打开检查。
插件目录。 后台 → 插件,看看有没有你压根不记得安装过的插件。有些插件名字伪装得很正常,比如”WP Security Helper”、”Site Optimizer”——听起来像正经安全工具,实际是伪装的恶意插件。
上传目录。 在 /wp-content/uploads/ 目录下,理论上是放图片、PDF 等媒体文件的地方。如果你在里面发现了 .php 文件,几乎可以肯定是后门。黑客经常利用文件上传漏洞,把 PHP 后门伪装成图片上传——文件名可能是 logo.jpg.php。
快速排查命令: SSH 登录服务器后执行:
find /www/wwwroot/你的网站目录 -name "*.php" -mtime -7
列出最近 7 天内被修改过的所有 PHP 文件,能快速缩小排查范围。
3.2 恶意代码长什么样
如果你没经验,看到一堆 PHP 代码可能会懵。记下这三个特征,看到了基本就能判定为恶意:
特征一:base64 编码。 正常代码极少用 base64_decode。看到类似这样的代码,八九不离十是恶意代码在解码隐藏的攻击载荷:
eval(base64_decode('一堆乱码字符串'));
特征二:无意义的变量名。 正常代码的变量名有语义,比如 $post_title、$user_email。恶意代码的变量名通常是 $a8s7d9f、$x1y2z3 这种随机字符串。
特征三:文件头部大段空白。 打开 PHP 文件,开头是一大段空白行,然后才是 <?php。黑客经常用这种方法把恶意代码藏在大段空白里,视觉上不容易发现。
第四步:彻底清除,不给后门留机会
4.1 核心文件直接重装
对于建站系统核心文件(/wp-admin/、/wp-includes/ 等目录),不要手动清理,直接重装。 后台 → 更新 → 点击”重新安装”,系统会用官方最新版本覆盖所有核心文件。这个操作不会影响你的文章、主题和插件数据。
4.2 主题和插件:删掉再装
可疑的主题和插件,从后台直接删除(不是停用,是删除),然后从官方源重新安装。别用 FTP 覆盖——覆盖只替换同名文件,黑客新建的后门文件不会被删掉。
4.3 上传目录:PHP 文件一个不留
用命令找出 uploads 目录下所有 PHP 文件:
find /www/wwwroot/你的域名/wp-content/uploads/ -name "*.php"
输出结果里的每一个文件,直接删除。uploads 目录里不应该存在任何 PHP 文件,没有例外。
4.4 数据库也要检查
文件清干净了,数据库里可能还有恶意代码。登录 phpMyAdmin 或宝塔面板的数据库管理,执行:
SELECT * FROM wp_posts WHERE post_content LIKE '%eval%' OR post_content LIKE '%base64%' OR post_content LIKE '%<script%';
搜索出来的结果中,逐条检查文章内容,发现可疑代码的直接编辑删除。
第五步:堵住漏洞,别让黑客再进来
恶意代码清理干净了,不代表安全了。如果漏洞没堵上,很可能第二天黑客又从同一个入口进来了。
5.1 装安全防火墙
不管你用的是什么建站系统,装一个安全插件能过滤掉大部分自动化攻击。推荐 Wordfence Security,免费版就够用。安装后开启防火墙和定期扫描。
5.2 限制登录尝试次数
暴力破解是最常见的攻击方式——黑客用脚本不停尝试用户名和密码组合,直到猜对为止。用 Limit Login Attempts Reloaded 插件限制失败次数,超过阈值就锁 IP。
5.3 改掉默认登录地址
把后台登录地址从默认的 /wp-login.php 或 /admin 改成自定义路径,能避开大部分自动化扫描。WPS Hide Login 插件,免费,改完即生效。
5.4 禁用 XML-RPC
XML-RPC 是大量攻击的入口。如果你不需要通过手机 App 远程发布文章,直接禁用它。在 Nginx 配置里加:
location = /xmlrpc.php {
deny all;
}
5.5 定期备份——最后一道防线
如果被黑得太彻底,清理不干净,最省事的办法就是恢复备份。用 UpdraftPlus 插件,设置每周自动备份到远程存储(百度网盘、阿里云 OSS 等),保留最近 3-5 个版本。有备份,任何攻击都有退路。
第六步:恢复搜索引擎的信任
网站修好了,但搜索引擎可能还没有更新判断。之前的异常搜索结果需要主动通知百度处理。
百度站长平台提交审核: 登录百度搜索资源平台,在”站点信息”里提交安全审核申请,说明网站已清理修复。百度审核通过后会清除异常展示。
重新提交 sitemap: 修复完成后立即重新提交一次 sitemap,让百度尽快重新抓取你的页面。
移除安全警告: 如果网站曾被标记为”危险网站”,修复后在百度站长平台申请移除安全警告标识。
一张图总结:网站被黑自救六步
| 步骤 | 做什么 | 关键动作 |
|---|---|---|
| 1 | 判断程度 | 查首页、搜 site:域名、看 CPU 使用率 |
| 2 | 紧急措施 | 开维护模式、改所有密码、删可疑账号 |
| 3 | 定位恶意代码 | 查 functions.php、uploads 目录、最近修改的文件 |
| 4 | 彻底清除 | 重装核心文件、删可疑插件、清数据库、删 uploads 下的 PHP |
| 5 | 堵住漏洞 | 装安全插件、限登录、改地址、禁 XML-RPC、定期备份 |
| 6 | 恢复搜索信任 | 百度站长平台提交审核、重新提交 sitemap |
写在最后
网站被黑这件事,绝大多数情况不是因为黑客技术有多高超,而是因为网站本身的安全防护太薄弱。
弱密码、默认配置、从不更新、从来没做过备份——这些漏洞在黑客的自动化扫描工具面前,跟一扇没锁的门没什么区别。人家不是针对你,是脚本在互联网上地毯式扫描,扫到谁算谁。你门没锁,扫到你就是你。
如果你读完这篇文章只做一件事,我的建议是:现在就去做一次全站备份。 有备份,任何攻击都有退路;没有备份,一次被黑可能就是灭顶之灾。
如果你遇到了具体的安全问题,或者需要帮忙排查,欢迎联系我。安全这件事,有时候一个人闷头搞容易漏掉关键线索,多一个人帮你看一眼,也许就能找到问题所在。
本文由 wujianzhan.com 原创发布,如需转载请联系作者。