如何使用JavaScript校验域名跳转方案阻止恶意域名镜像?
代码防护效果验证
第一段防嵌套代码
if (parent.frames.length > 0) { parent.location.href = self.document.location }
- 这段代码仅用于禁止你的页面被其他站点通过iframe嵌套展示,和你当前遇到的整站同步镜像场景完全无关,无法解决你的问题。
第二段域名校验跳转代码
var domain = "mysiteurl"; var redirect = "http://google.com"; if( (location.hostname != domain) && (location.hostname != "www."+domain) ) { location.href = redirect; }
- 逻辑本身是通顺的:只要访问域名不是你预设的主域名或带www前缀的主域名,就会触发跳转。但完全无法应对你当前的镜像场景,你标注的问题已经命中了核心缺陷:镜像站同步代码时会自动把你明文写的
mysiteurl替换成自己的域名,替换后校验逻辑会判定镜像站域名是合法域名,不会触发跳转。
优化方案
如果要继续使用JS方案实现防护,核心是要规避镜像站的自动字符串替换规则,不要明文写出你的站点域名:
- 拆分拼接域名字符串,比如:
// 把你的域名拆成多段拼接,避免被自动替换规则识别 const domainSeg1 = 'mysite' const domainSeg2 = 'url' const validDomain = domainSeg1 + domainSeg2 const jumpTarget = '你自定义的跳转地址' if (location.hostname !== validDomain && location.hostname !== `www.${validDomain}`) { location.href = jumpTarget }
- 增加CSS暗桩校验:在你的页面中加入一个隐藏的专属DOM节点,只有你本站的CSS会给这个节点设置特殊的属性值(比如自定义data属性、固定的隐藏样式属性),JS检测到该属性不符合预期就触发跳转,镜像站修改CSS配色后会触发该规则。
纯前端JS方案无法做到100%防护,若镜像站人工分析你的JS逻辑可以手动破解,有条件建议配合服务端Host头校验、静态资源防盗链等规则共同使用。
内容的提问来源于stack exchange,提问作者danniee
相关产品推荐
相关产品推荐

