打开浏览器,网站输入自家域名,劫持页面却跳到了一个博彩网站。处理这种事我遇到过三次,网站两次是劫持客户的站,一次是处理我自己的博客。第一次碰到时确实慌,网站以为服务器被黑了,劫持后来查多了才发现,处理网站劫持的网站花样比想象中多,处理方式也完全不同。劫持
先搞清楚劫持发生在哪一层。处理最常见的网站是DNS劫持,域名解析被改到了别人的劫持IP上。你ping一下域名,处理看看返回的IP是不是你服务器的。如果不是,登录域名注册商后台,检查DNS记录有没有被改动。我那次博客被劫持,就是域名商的账号密码太简单,被人撞库进去改了A记录。改回来,顺手开启两步验证,十分钟搞定。
还有一种更隐蔽的,叫ARP劫持或本地劫持。服务器本身没问题,DNS也对,但局域网里有人冒充网关,把你的流量引到别处。这种情况通常出现在公共WiFi或机房内网。判断方法很简单:用手机4G网络访问网站,如果正常,连WiFi就跳转,那基本就是本地网络的问题。换网络或者找网管查ARP表,能解决。
最麻烦的是服务器端被入侵。攻击者拿到webshell,直接在代码里插入跳转脚本。这种劫持往往有选择性——比如只对从百度来的流量跳转,直接访问反而正常。我帮一个客户排查时,发现index.php里被插了一行base64编码的JS,解码后是一段判断referer的代码。清理不难,难的是找到入口。查访问日志,看哪个文件被上传,通常是一个老旧插件或上传接口没做校验。删掉后门,更新所有程序,改掉数据库和FTP密码,再装个WAF,才算收尾。
浏览器劫持也值得提一句。用户装了恶意扩展或中了流氓软件,打开任何网站都弹广告。这种跟你服务器无关,但用户会以为是你网站的问题。遇到投诉,先让用户用无痕模式访问,如果正常,那就是他本地浏览器的问题。建议他检查扩展程序,用杀毒软件扫一遍。
处理劫持的顺序很重要。别一上来就重装系统,先定位。用不同网络、不同设备、不同浏览器分别测试,缩小范围。查DNS、查服务器文件、查访问日志,三步走完基本能确定原因。我见过有人一发现被劫持就急着重装服务器,结果DNS记录没改,重装完照样跳转,白忙活。
预防比处理省心。域名商账号开两步验证,服务器密码用随机生成的强密码,程序保持最新版本,上传目录禁止执行脚本。这几条做到,能挡掉九成以上的劫持。剩下的就看运气和响应速度了。我自己的博客现在每天自动备份数据库,一旦发现异常,直接回滚,损失控制在一天以内。
网站劫持不是单一问题,它可能是网络层、服务器层、甚至用户端的毛病。别慌,按层次排查,总能找到那个出问题的环节。