经常进行代码开发的网友,一定会用到js代码的编写,有关如何加密JS脚本的方法,网上也说了不少,比如使用Encode等加密方式,但此类加密方法却特别容易被人反加密,笔者经过多次实践发现,将JS代码写入到一个ASP文件中,然后在网页里调用,只要加密这个JS文件不让非授权用户查看,就可以一劳永逸;纵所周知,在网页中是可以使用:
< script src="文件名.后缀名" >< /script >
来调用脚本的,其实,这个脚本文件,其格式可以是:gif、jpg、asp、php等等甚至任何可被读取的文件,下面,笔者就以一段ASP代码的形式,和网友一起讨论下如何使用ASP来限制用户访问js脚本文件;
比如,我们需要将以下代码加密访问:
document.write(' 我是电脑迷 ')
授权访问加密可以使用两种方式,一种是使用HTTP路径判断,该方法比较通俗,使用HTTP_REFERER获取当前url,然后判断用户是否在当前URL地址,以达到授权访问,但这种方式可以使用Telnet伪造URL破解,另外一种方式是使用cookies验证,以下是引用Nantiange
BLOG 中的部分代码片段:
1、
global.asa
Sub Session_OnStart
Session("auth") = False
End Sub
global.asa定义了一个auth会话变量,该变量用于验证请求JavaScript源文件的页面起源是否合法。这里选择使用会话变量的原因在于它用起来比较方便。
2、
copycode.asp
< % Session("auth") = True
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
% >
程序把auth会话变量设置成了“true”,它表示请求.js文件的页面应该被信任。接下来的几个Response调用是防止浏览器缓存该页面。
3、
js.asp
< %
IF Session("auth") = True THEN
Response.ContentType = "application/x-javascript"
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session("auth") = False
% >
document.write('我是电脑迷')
< %ELSE% >
< !--该代码为54cfan.com编写-- >
< %END IF% >
程序首先检查会话变量auth,看看请求的起源是否合法。如是,则关闭浏览器缓存,重新设置会话变量,然后向浏览器发送JavaScript代码。如果对js的请求不是来自可靠的起源,会话变量auth是false,程序只发送一个带有版权声明的空白页面。
因此,我们只需要将代码2编写在一个公共文件中,如 copycode.asp 在需要受保护的页面使用以下代码:
< script src="copycode.asp" >< /script >
然后将受保护的JS文件另存为ASP文件,在ASP起始位置加上:
< %
IF Session("auth") = True THEN
Response.ContentType = "application/x-javascript"
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
Session("auth") = False
% >
结尾加上:
< %ELSE% >
< !--这些代码受版权保护。所有权利保留-- >
< %END IF% >
使用:
< script src="JS.asp" >< /script >
调用,就可以起到非常好的保护效果,当用户直接访问该JS文件(ASP文件js.asp)时,会直接显示版权空白页,而用户访问授权的正规页也不会缓存该JS代码(缓存在本地后可以在本地查看该js文件),同时也不会干预该JS代码的功能
另外,该方式也可以用于加密Ajax的JS代码,甚至可以采用混合加密方式(Encode加密+HTTP加密+授权加密)以提高加密强度