当前位置:首页 > 热点

防劫持网站

去年冬天,防劫一位做独立博客的持网朋友发现自己的域名被解析到了一个博彩页面。他查了DNS记录,防劫A记录被人改成了境外IP。持网域名注册商那边没开两步验证,防劫密码还是持网三年前那套。黑客撞库进来,防劫五分钟就完成了劫持。持网这事不新鲜,防劫但每次听到都让人后背发凉——你的持网网站,可能正在替别人打工。防劫

网站劫持的持网路子比多数人想的要多。DNS劫持只是防劫其中一种,还有HTTP劫持、持网BGP劫持、防劫ARP欺骗,甚至通过运营商层面的流量劫持往页面里塞广告。2018年GitHub遭遇的那次BGP劫持,攻击者把流量引到自己的服务器上,签了一张假的TLS证书,差点就骗过了浏览器。普通站长碰不上这种国家级操作,但小规模的DNS篡改和HTTP注入,每天都在发生。

说回我那个朋友。他后来复盘,发现注册商后台的登录日志里有来自乌克兰IP的访问记录。他用的密码是“域名+年份”的组合,在某个泄露库里能查到相似格式。黑客没用什么高级工具,就是写了个脚本批量试。两步验证没开,等于门没锁。

防劫持的第一道防线其实特别朴素:把域名注册商、DNS服务商、服务器面板的密码全部换成独立随机串,再开上TOTP两步验证。别用短信验证码,SIM卡能被克隆。Google Authenticator或者1Password这类工具生成的六位码,成本低,效果好。我自己的域名在Cloudflare托管DNS,开了强制两步验证,每次登录都要输动态码。麻烦吗?有点。但比网站被挂马强。

DNS层面还有一层保护叫DNSSEC。它给DNS记录加了数字签名,解析服务器能验证返回结果是不是被篡改过。Cloudflare和不少注册商都支持一键开启。不过这玩意儿有个坑:配置错了会导致域名直接解析失败。开之前先在测试域名上跑一遍,确认链路通了再上生产环境。

HTTPS是另一道锁。全站强制HTTPS,加上HSTS头,浏览器就会拒绝降级到HTTP的连接。HTTP劫持通常发生在明文传输阶段,攻击者往响应里插一段JS,你的页面就多了个弹窗广告。上了HSTS之后,浏览器直接不走HTTP了,运营商想插也插不进去。Let's Encrypt的证书免费,自动续期脚本网上一抓一大把,没理由不上。

服务器这边,SSH别用密码登录,换成密钥对。22端口改掉,或者干脆只允许特定IP访问。Web目录的权限设成755,文件644,别给777。听起来像老生常谈,但很多被挂马的站,查到最后就是某个上传目录权限太宽,被人传了个webshell进去。

监控也得跟上。我给自己几个站配了UptimeRobot,五分钟一次HTTP检查。如果返回内容里出现了“casino”“viagra”这类关键词,立刻发邮件告警。DNS记录也监控,用DNSMonitor或者自己写个脚本定时dig一下,发现A记录变了就报警。这些工具花不了几个钱,但能让你在网站被彻底搞臭之前动手。

说个真实案例。有个做外贸独立站的朋友,某天发现Google搜索结果里他的站点标题变成了“Cheap Viagra Online”。查了一圈,是WordPress的某个插件有漏洞,被人注入了恶意脚本。他装了Wordfence,开了防火墙规则,又用Sucuri扫了一遍,清掉后门文件。前后折腾了三天。如果一开始就限制插件安装权限,并且定期扫描文件完整性,这事本可以避免。

防劫持没有一劳永逸的方案。攻击面在变,手法在升级。但把基础工作做扎实——强密码、两步验证、HTTPS、DNSSEC、权限最小化、定期监控——能挡掉九成以上的自动化攻击。剩下那一成,得靠你自己盯着日志,保持警惕。网站跟房子一样,门窗锁好了,贼自然去撬隔壁那家。

分享到: