网站被劫持到其它网站如何解决
打开浏览器输入自家域名,网站跳出来的被劫却是博彩页面——这事儿我遇到过三次。最近一次是其网去年帮朋友看他的外贸站,域名解析正常,站何服务器也没被黑,解决但访客就是网站会被带到一水儿的境外赌场。折腾了整晚,被劫最后发现是其网CDN节点上的缓存被污染了。网站劫持的站何花样比大多数人想象的要多,解决起来也不是解决一句“改DNS”就能搞定。
先搞清楚你面对的网站是哪种劫持。常见的被劫有三类:DNS劫持、服务器端劫持、其网以及本地/运营商层面的站何劫持。DNS劫持最粗暴,解决域名解析记录被改,所有人访问都会跳走。服务器端劫持隐蔽些,黑客在代码里塞了判断逻辑,比如只对搜索引擎蜘蛛或特定地区IP返回正常内容,普通访客看到的是跳转页。运营商劫持最烦人,它不碰你服务器,直接在传输链路上做手脚,通常表现为插入广告或偶尔跳转。
怎么判断?用nslookup或dig查一下域名解析结果。如果返回的IP不是你服务器真实的IP,DNS被改了。如果解析正常但访问跳转,用curl -I看HTTP响应头,有没有可疑的Location字段。再找几个不同地区的朋友或使用在线工具测试,如果只有部分地区跳转,大概率是运营商或CDN节点问题。
DNS劫持的修复最直接:登录域名注册商后台,检查DNS记录是否被篡改,改回正确IP。同时立刻修改域名账户密码,开启两步验证。很多案例是注册商账户被撞库,黑客改完解析还顺手关了域名锁定。如果注册商支持,开启注册局锁(Registry Lock),能挡住大部分恶意转移和修改。
服务器端劫持需要翻代码。检查.htaccess、nginx.conf、主题的functions.php,还有index.php头部有没有eval、base64_decode这类危险函数。我见过最阴的一招是在wp-config.php里加了一行include,加载一个伪装成图片的PHP文件。用grep -r "eval("全盘扫一遍,再对比官方源码的文件哈希值。别只盯着网站根目录,/tmp和上传目录也要查。
运营商劫持最憋屈。你服务器没问题,用户本地也没问题,但数据包经过某些节点就被插了跳转脚本。解决方案是上HTTPS。全站强制HTTPS后,运营商没法在加密流量里插东西——他们只能重置连接,不能篡改内容。再配合HSTS头,浏览器会强制走HTTPS,连第一次的HTTP请求都不发。如果已经上了HTTPS还被劫持,检查证书链是否完整,有些老设备会因为证书问题降级到HTTP。
CDN缓存污染容易被忽略。去年那个案例里,攻击者往CDN边缘节点发大量伪造的Host头请求,导致节点缓存了跳转响应。清空CDN缓存,然后在源站配置里加上Cache-Control: no-cache对动态页面,再开启“忽略查询字符串”之类的缓存规则要谨慎。最好在CDN后台设置回源请求的Host白名单,只允许你自己的域名回源。
还有一类是浏览器扩展或本地恶意软件导致的跳转。用户装了来路不明的插件,所有网站都跳。这种你没法从服务器端解决,但可以在页面上加个提示,或者引导用户用无痕模式测试。我一般会让对方先换台干净电脑访问,确认不是本地环境问题再往下查。
处理完记得做监控。用uptime类服务监控HTTP状态码和响应内容,一旦发现跳转立即报警。Google Search Console里也盯着“安全问题”报告,被标记为恶意软件或钓鱼站会影响搜索排名。最后,改完所有密码,包括服务器SSH、数据库、CMS后台、域名账户,别留后门。
网站劫持这事,七成靠预防,三成靠应急。平时关掉不必要的端口,CMS和插件保持更新,备份别只放服务器上。真被劫持了,先断网保留现场,再按DNS、服务器、传输链路一层层排查。别急着重装系统,有时候问题根本不在你机器上。