网站被黑这件事,多数人第一次遇到会慌:先删文件、再改密码、然后重启服务器。结果证据没了,后门还在,几天后又被黑一次。
正确的顺序是:先止血,再取证,最后清理。下面是六步流程。
第一步:隔离,别急着删
发现异常后,第一动作是限制访问,不是删文件。
- 把域名解析暂停,或者用防火墙只允许自己的 IP 访问。
- 保留服务器快照,作为取证依据。
- 不要立即重装系统——重装会丢掉所有日志。
如果站点涉及交易,先公告"系统维护",避免用户在看到被篡改内容时下单。
第二步:取证,搞清怎么进来的
三处日志必看:
- Web 访问日志:找异常 POST 请求、可疑的 .php 文件访问、大量 404 扫描。
- SSH 登录日志:
/var/log/auth.log或/var/log/secure,看有没有异常 IP 登录成功。 - 文件修改时间:用
find找最近 7 天被修改的 php 文件,木马通常在这些文件里。
find /www/wwwroot -name "*.php" -mtime -7 -type f | head -50
常见入口:过期的插件漏洞、弱密码后台、上传目录可执行 PHP、破解主题里的后门。
第三步:清理,别只删看得见的
木马通常不止一个。清理顺序:
- 下载整站到本地,用杀毒工具扫描(ClamAV 或 D 盾)。
- 对比官方源码,找出被修改的文件,用官方版本替换。
- 检查
.htaccess、index.php、functions.php是否被插入代码。 - 检查数据库里是否有被插入的脚本(常见于文章内容、模板配置)。
- 删除不明账号、不明计划任务、不明 SSH 公钥。
清理完不要立刻上线,先做加固。
第四步:加固,堵住入口
| 项 | 动作 |
|---|---|
| 密码 | 面板、SSH、数据库、后台全部改掉,用强密码 |
| 端口 | SSH 改端口,数据库不对公网 |
| 权限 | 目录 755、文件 644,上传目录禁执行 |
| 程序 | 核心、主题、插件全部升级到最新 |
| 防火墙 | 开启 WAF,限制登录尝试 |
| 备份 | 确认备份未被污染,重新做一份干净备份 |
第五步:恢复
优先用"干净的旧备份 + 补丁"恢复,而不是用被黑后的文件清理。因为清理很难保证彻底。
恢复后先在小范围测试:访问首页、内页、后台、表单,确认无异常跳转。再用 curl 检查返回头有没有可疑的 302。
curl -I https://your-site.com/ | head -20
第六步:复盘与预防
写一份简单的复盘:什么时候发现、怎么进来的、影响范围、处理耗时、后续措施。这份文档比任何安全产品都有用。
预防上,三件事最有效:及时更新、最小权限、可靠备份。这三件做到,能挡掉八成问题。
如果是 DDoS
DDoS 和被黑不同,处理方式也不一样:
- 立刻上高防或 CDN,把流量引走。
- 在防火墙层做限速和 IP 黑名单。
- 联系云厂商,多数提供基础防护。
- 不要试图在源站硬扛,带宽扛不住。
先止损,再查原因
发现被攻击,第一步不是研究攻击手法,而是止损:切 CDN、封攻击 IP、临时关闭被打的接口,必要时进入维护页。第二步保留日志和镜像,第三步才恢复备份、查入口、改密码。
恢复后别急着宣布结束。把入口、漏洞、账号、定时任务全部过一遍,确认没有后门,再逐步放开流量。很多站二次被攻,都是因为只恢复了数据,没修入口。
恢复前确认备份没有被感染,恢复后先改所有密码、更新程序、删除陌生账号和定时任务。只恢复数据不修入口,很快会二次被攻。
恢复后先改所有密码、删陌生账号和定时任务,再逐步放开流量。
常见问题
被黑了要不要报警
造成实际损失的可以报警,保留日志和快照作为证据。多数小站以止损为主。
重装系统是不是最干净
最干净,但会丢日志和取证线索。建议先取证再重装。
怎么知道有没有残留后门
用文件完整性校验(对比官方源码哈希)、查计划任务、查异常进程、查外连 IP。三项都干净,基本可以放心。
日常预防的关键是备份。策略见网站备份的三二一原则。