巧用ASP技术保护DHTML源代码

巧用ASP技术保护DHTML源代码

DHTML使得我们能够开发出功能强大的Web应用客户端,它具有跨浏览器兼容、可交互和可移植等特点。它的缺点是用户能 够直接查看Javas cript代码。本文介绍如何运用ASP技术保护DHTML代码,防止有人窃取你的DHTML代码。 传统保护技术 众所周知,Web本质上是一种不安全的媒介。当用户访问Web应用或者打开Web页面时,所有客户端的代码(HTML, Javas cript源文件以及CSS样式)一般都要到客户端缓冲区。用户只需点击一下“查看源文件”就可以查看、分析和复 制这些代码。 MSDN摘录了Wrox《Instant Javas cript》一书的部分内容,它指出了保护Javas cript代码的几种方法,具体请参见这 里。 客户端Javas cript代码保护方法主要可以分成如下几类: a)Microsoft的方法:Microsoft通过发布Windows s cript Engine Version 5.0来解决客户端源代码保护问题。源代码通 过一个ActiveX层编码(不是加密)。请参见s cript Encoding with the Microsoft s cript Engine Version 5.0。 这种方法的缺点是经过编码的代码只有IE 5.0+才能解码,而且他们坦率承认编码过程并非简单易行。如果你使用的是其他 浏览器(包括IE浏览器的早期版本),你就不能通过浏览器访问脚本代码。 b)模糊代码(Code Obfuscation):一些共享软件,比如Jammer以及JMyth,企图通过让代码变得难于阅读、让变量名字 变得杂乱去防止有人偷窃Javas cript代码。这种方法的缺点在于,任何有决心的程序员都能够用全局搜索和替换工具轻松 地打破这种保护,因为这只需把那些含义模糊的变量名字改成含义明确的变量名字即可。关于JAMMER的更多说明,请参见 这里。 c)加密:有许多方案、工具能够有效地加密Javas cript代码。加密客户端Javas cript代码最主要的问题在于用来解密的脚 本代码往往很容易取得,导致对代码实施反向工程非常容易。显然,这种方法不能阻止任何认真的程序员获取源代码。虽 然我们可以用Java作为加密和解密过程的中间工具,但遗憾的是,Applet会给Web页面增加不必要的额外负荷,而且它会因 为浏览器所用Java虚拟机版本的不同而无法正常运行。相对而言,DHTML却意味着快速、小巧、通用和可移植。 一种新方法 在试验WML(Wireless Markup Language)时,我想到了一种保护客户端源代码的新方法。在基于ASP的WML页面中,服务器 端代码会有如下内容:  < % Response.ContentType = "text/vnd.wap.wml" % > < ?xml version="1.0" encoding="iso-8859-1"? > < !DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml" > < wml > ......  可以看到,我们首先发送了一个WML头,使得无线浏览器认为该ASP页面实际上是一个WML页面。这种技术同样可以用来保护 Javas cript源文件(.js文件)。 Netscape随着Javas cript 1.2的发布引入了对Javas cript源文件的支持。大多数支持该版本Javas cript的浏览器都支持 Javas cript源文件(Internet Explorer 3.0+,Netscape 3.0+以及Opera 5.0)。动态HTML(DHTML)由Javas cript和CSS 混合构成。CSS样式使得开发者能够自由地在浏览器窗口中表现各种页面元素,而Javas cript则提供了控制浏览器本身的必 要功能。Javas cript是DHTML的关键组成部分。 下面我们通过例子来说明这种新的DHTML源代码保护方法。这个例子涉及三个文件:index.asp,js.asp以及global.asa。 global.asa定义了一个auth会话变量,该变量用于验证请求Javas cript源文件的页面起源是否合法。这里选择使用会话变 量的原因在于它用起来比较方便。  global.asa  Sub Session_OnStart Session("auth") = False End Sub  我曾经试过用HTTP_REFERER系统变量来验证发出请求的页面起源是否合法,后来发现这个变量可以通过telnet伪造,而且 某些浏览器未能在运行时正确地显示出HTTP_REFERER变量。  index.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" % > < html > < head > < title >测试页面< /title > < s cript language="Javas cript" type="text/javas cript" SRC="js.asp" >< /s cript > < /head > < body > < s cript language="Javas cript" >test();< /s cript > < br > < a href="index.asp" >reload< /a > < /body > < /html >  下面我们来分析一下index.asp。首先,程序把auth会话变量设置成了“true”,它表示请求.js文件的页面应该被信任。 接下来的几个Response调用防止浏览器缓存index.asp页面。 一般地,在HTML文件中调用Javas cript源文件的语法如下:  < s cript language="Javas cript" src="yours cript.js" >< /s cript >  但在本例中,我们调用的却是一个ASP页面而不是Javas cript源文件:  < s cript language="Javas cript" type="text/javas cript" SRC="js.asp" >< /s cript >  如果要遮掩应用正在请求ASP页面这一事实,你可以把js.asp改名为index.asp(或者default.asp),然后把这个文件放到 单独的目录之中,比如“/js/”,此时上面这行代码就改为:  < s cript language="Javas cript" type="text/javas cript" SRC="/js/" >< /s cript >  这几乎能够迷惑任何企图获取Javas cript源文件的人了。不过,请不要忘记在IIS服务器配置中正确地设置默认页面文件的 名字。  js.asp  < % IF Session("auth") = True THEN Response.ContentType = "application/x-javas cript" Response.Expires = 0 Response.Expiresabsolute = Now() - 1 Response.AddHeader "pragma","no-cache" Response.AddHeader "cache-control","private" Response.CacheControl = "no-cache" Session("auth")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值