你的网站是不是突然开始“乱跳”?
打开自己网站,结果秒进博彩页?或者点开首页,下一秒就到了完全不认识的境外推广站?用户私信你:“刚点进来就弹窗了”,流量数据断崖式下滑——别怀疑,这大概率不是服务器抽风,是有人悄悄往你网站里塞了跳转代码。
第一步:如何快速确认跳转类型?
先别急着删文件。打开浏览器,按 F12,切到「网络」(Network)标签页,点一下左上角的清空按钮,再刷新页面。
盯紧第一个请求的状态码:
- 如果是
301或302→ 跳转发生在服务器端,问题可能出在.htaccess、Nginx 配置,或者 PHP 文件里的header("Location: ...")。 - 如果状态码是
200,但页面加载完立刻跳走 → 基本可以锁定是前端被塞了脚本,比如藏在footer.php里的window.location.href = "xxx",或者一段自动执行的iframe。
一个真实案例:上周帮一个做本地装修的客户排查,他网站 PC 端一切正常,但手机一打开就跳赌博站。我们用 Chrome 的「设备模拟器」切到 iPhone 模式,在 Network 里发现每次请求都返回一个 200 页面,几毫秒后控制台就执行了一段从 cdn-srv[.]top 加载的 JS——这串域名他根本没用过,直接定位到主题 footer 里被硬塞的代码。
第二步:从哪里开始“地毯式搜索”?
恶意代码爱钻空子,但它有固定套路。优先查这几个地方,80% 的问题能在这圈出来:
- 主题和插件文件:尤其是你正在用的主题,打开
header.php、footer.php、functions.php,从头到尾快速扫一眼——特别注意文件最开头和最后几行。插件也一样,重点看那些半年没更新、作者名看着像拼音乱码、或者安装包是从第三方论坛下载的。 - 数据库内容:进 phpMyAdmin,打开
wp_posts表,用「搜索」功能查eval(、base64_decode、fromCharCode;再切到wp_options表,搜theme_mods_开头的 option_name,有些黑链会伪装成主题设置混进去。 - 根目录核心文件:
index.php、wp-config.php、.htaccess这几个文件,用文本编辑器打开,看第一行和最后一行有没有多出来的<?php ... ?>块,或者末尾突然多了一行<script>。
第三招:用哪些工具能提高排查效率?
别靠肉眼一行行翻。把网站文件整个下载到本地,用你平时写代码的工具来干这事:
- VS Code 全局搜索:打开整个网站文件夹,按
Ctrl+Shift+F(Mac 是Cmd+Shift+F),搜这些关键词:<script src=、<iframe src=、window.location、document.write(、eval(、base64_decode(
搜出来结果,一个个点开看来源——不是你加的,一律标红。 - 用 Beyond Compare 对比备份:如果你电脑里还存着上个月的网站压缩包,直接拖两个文件夹进去对比。所有被改过的文件左边标红、右边标绿,一眼就能揪出哪几个文件“被动过手脚”。
- 翻服务器 access.log:登录宝塔或 cPanel,找到最近 24 小时的访问日志。用记事本打开,搜
.php?或POST /wp-admin/,看有没有大量来自同一 IP 的异常 POST 请求——那很可能是黑产在批量上传木马。
第四招:遇到加密混淆的代码怎么办?
看到 eval(base64_decode('aHR0cHM6Ly9...')) 这种,别懵。它只是把真实地址藏起来了,不是什么高深技术。
安全解法:
- 把单引号里的那一长串字符全选中,复制;
- 打开本地浏览器,新建一个空白 HTML 文件,贴进去这段代码:
<script>
console.log(atob('aHR0cHM6Ly9...')); // 把你复制的串粘贴到这里
</script>
- 用浏览器打开这个 HTML,F12 看 Console 输出——解出来的就是真实跳转地址。
一个具体例子:在客户主题的 footer.php 最底下,只有一行:<?php eval(base64_decode("ZWNobyAi...")); ?>。我们按上面步骤解出来,发现是往 <head> 里动态注入一个外部 JS,而那个 JS 文件每小时换一次域名,专门用来做移动端跳转。
第五步:清理后如何避免再次中招?
删干净不等于结束。很多站长修完第二天又被黑,就是因为漏了这几步:
- 密码全部重置:WordPress 后台、FTP、数据库、宝塔面板、甚至主机商后台——所有带密码的地方,今天必须全换。密码别用“admin123”,试试“煎饼果子加俩蛋不加葱”这种又长又傻又好记的。
- 砍掉所有闲置项:进 WordPress 后台,把不用的主题、停用超过 3 个月的插件,全部删掉。连 demo 数据、测试页面也清干净。
- 锁死文件权限:在宝塔或 FTP 里,把整个网站目录设为
755,所有.php文件设为644,wp-config.php单独设成600或400——不让任何程序能偷偷改它。 - 马上做一次干净备份:用宝塔一键备份,或导出数据库 + 打包网站根目录,存在本地硬盘,别只放网盘。
今天下班前就能执行的操作清单
现在就打开电脑,按顺序做这五件事:
- 立刻备份数据库:进主机管理后台或 phpMyAdmin,选中所有数据库,导出为
.sql文件,保存到桌面,文件名带上今天日期。 - 下载整站文件:用 FileZilla 或宝塔文件管理器,把
/www/wwwroot/你的域名/整个文件夹打包下载到本地。 - 挂维护页:在网站根目录新建一个
maintenance.html,内容就写一行<h1>网站升级中,稍后再来</h1>;然后在 WordPress 根目录的index.php开头加一行include 'maintenance.html'; exit;(临时用,修完记得删)。 - 本地全局搜外链:用 VS Code 打开刚下载的网站文件夹,按
Ctrl+Shift+F,搜<script src=,重点关注结果里出现的非你域名、非 CDN 域名的链接。 - 直击首页文件:双击打开
index.php和你当前主题的header.php,鼠标滚轮拉到底部,看最后 10 行有没有<?php、<script>或http://开头的奇怪代码——有就截图,别动,先来找人一起看。
做完这五步,你已经拦住了扩散,也摸清了大概在哪动手。剩下的,是耐心一点,一行行清理。网站被黑不可怕,可怕的是修完不记教训。下次更新插件前,多点两下「查看最近更新日志」,比啥防护插件都管用。