chaihongjun.me

保护网站不被仿造的方法,禁止本地加载

  在查看一个网站时候,尝试本地仿站,发现首页就无法加载,通过审查元素发现页面HTML元素的body不显示,但是本地源代码可以正常显示,经验判断是网站的JS文件一定是做了什么动作,判断域名不是网站域名而不显示body,也就是不显示网页内容。


QQ截图20151113091027.jpg


  整个网站的加载就两条JS文件,一个是Jquery库文件,一个是index.min.js文件,显然对于“防盗版”的控制就在index.min.js 文件中,为了验证这个想法,初步试探,将这个文件从首页的引用中注释掉。 

QQ截图20151113091342.jpg


页面停留在这里了,说明内容的加载确实是那个文件控制,打开那个JS文件,发现有压缩,通过格式化之后,发现有很多的功能模块,通篇的搜索相关的域名未发现有内容,继续查看,看到有eval字符,说明之后的JS内容被加密了,于是将eval起始的代码做解密,解压以及解密格式化完成之后,在JS文件的末端发现了一段代码:

function authentication() {      <!-- 看名称是授权方法 -->
	var suffix = "com",       <!-- 定义一个内容是com的字符串 -->  
		count = 1,        <!-- 定义一个值是1的变量 -->
		dot = ".";        <!-- 定义一个字符值为“.” -->
	var d = (count + 999).toString() + "zhu" + dot + suffix; 
	if (window.location.host.indexOf(d) < 0) {
		$("body").remove();
		return false
	}
	return true
}

以上代码的核心部分是:

var d = (count + 999).toString() + "zhu" + dot + suffix; 
	if (window.location.host.indexOf(d) < 0) {
		$("body").remove();
		return false
	}

具体分析:

var d = (count + 999).toString() + "zhu" + dot + suffix;

1+999转化成字符串"1000",再与字符串"zhu",字符".",以及字符串"com" 串联起变成一个新的字符串"1000zhu.com"并复制给变量d

if (window.location.host.indexOf(d) < 0)
               $("body").remove();
		return false
	}

判断当前访问主机域名,如果不是"1000zhu.com"开头的host地址,则把body元素移出,并返回错误值。这个思路正好与猜想的一致:不是在以"1000zhu.com"为域名的主机打开的页面浏览器就不加载页面的body元素,也就不显示页面内容。这个是一个判断方法,那么在找一下这个方法在哪里使用,经过搜索发现一段代码:

var pageIndex = 0,
	preloadCount = 0;
var loopPlayback = false,
	stopSwitch = true;
var videoSwiper, casesSwiper, qualitySwiper, aboutSwiper;
$(function() {
	var m = document.location.href.toLowerCase().match(/#p(\d+)$/);
	if (m != null) pageIndex = m[1] - 1;
	if (!authentication()) return;    <!-- 执行授权方法,检查一下域名  -->
	preload()
});

显然 

$(function()

表示的是页面文档加载完,应该就做点什么了,用的是Jquery语法。这段代码意思是页面加载完毕之后,执行一些初始化的语句,以及我们发现的授权检查。因此只要将这个授权检查注释忽略,即可顺利看到页面。

通过这个案例分析,我们也可以模仿其思路来保护我们自己的网站:

  1. 引用Jquery库,然后在自定义JS文件中引入授权函数方法:

$(function() {
	if (!authentication()) return;    <!-- 执行授权方法,检查一下域名  -->
});

2.在JS文件写入授权文件方法体,依据实际情况,假设域名是2015hk.com:

function authentication() {      
	var suffix = "com",      
		count = 5,        
		dot = ".";        
	var d = (count + 2010).toString() + "hongzhuang" + dot + suffix; 
	if (window.location.host.indexOf(d) < 0) {
		$("body").remove();
		return false
	}
	return true
}



知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»