凌晨两点,手机屏幕突然亮了。被跳同事发来一条消息:“你官网怎么跳到博彩页面了?网站”我点开链接,浏览器加载了半秒,被跳然后“唰”地一下——满屏的网站骰子、荷官、被跳充值按钮。网站关掉,被跳重开,网站正常了。被跳再关掉,网站再重开,被跳又跳了。网站那一刻后背发凉,被跳比咖啡泼在键盘上还让人清醒。网站
这就是典型的网站被跳转。不是服务器挂了,也不是DNS被污染,而是有人在你网站里埋了东西。最常见的是JS脚本注入。攻击者拿到权限后,往页面模板里塞一段混淆过的代码,判断访问来源、设备类型甚至时间段,再决定跳不跳。
注意那个navigator.userAgent判断。PC端用户被跳,手机端正常。为什么?因为搜索引擎爬虫大多伪装成手机UA。攻击者不想让百度、Google发现,只想收割真实流量。这种手法叫“UA cloaking”,跳转是结果,cloaking才是手段。
我第一次遇到这种情况是在2019年。一个客户的企业站,每天两三百IP,突然流量暴涨到八千,来源全是“直接访问”。他高兴了三天,第四天网站被微信拉黑。我上去一看,index.php 底部多了一行 eval($_POST['x'])。后门。攻击者通过这个后门随时改代码,今天跳博彩,明天跳色情,后天可能直接挂马。
怎么发现的?其实有痕迹。用 curl -I 看响应头,正常页面返回200,被跳转的页面有时返回302,有时返回200但body里藏着meta refresh。更隐蔽的用JS跳,查看源代码才能看到。还有个笨办法:浏览器禁用JavaScript,如果页面正常了,那问题就在JS里。
清理跳转分三步。第一步,找到注入点。对比原始备份和当前文件,用 diff -r 扫一遍,重点看 .js、.php、.html。第二步,删掉恶意代码。别只删跳转那行,要查同目录下有没有其他后门文件,比如 1.php、shell.php 这种。第三步,改密码。数据库、FTP、SSH、后台,全改。攻击者能进来一次,就能进来第二次。
但很多人只做第一步。删了跳转代码,以为没事了。结果三天后又跳。为什么?后门还在。我见过最狠的一个后门,藏在图片的EXIF信息里,用 exiftool 才能看到。还有藏在 .htaccess 里的,用 RewriteRule 做跳转,服务器层面就给你劫持了,文件里干干净净。
预防比清理重要。几个点:后台路径别用 /admin,改个复杂的;文件权限设成644,目录755,别给777;装个WAF,云锁、安全狗都行,至少能拦一批扫描器;定期备份,备份文件别放在web目录下,否则连备份一起被改。还有,别用那些来路不明的“破解版”CMS,里面塞后门是常规操作。
去年有个做外贸的朋友中招。网站跳转到仿冒的PayPal登录页,客户输入账号密码全被截走。他损失了四万多美金。后来查日志,攻击者是从一个两年前没更新的插件漏洞进来的。那个插件叫“Simple Backup”,早就不维护了。他忘了删。
网站被跳转这件事,本质是权限被偷了。跳转只是症状,不是病根。病根是服务器里有人留了钥匙。你换锁、清人、装监控,才算完。光把跳转页面关掉,等于发烧了只吃退烧药,炎症还在。
现在我看到 eval、base64_decode、gzinflate 这些函数出现在非预期位置,都会多看一眼。有时候半夜收到告警,爬起来连服务器,一边敲命令一边骂。技术这行,安全是底线,不是选修课。