
| 出版日期:2000-01-10 总期号:891 本年期号:03 |
|
保护asp脚本的源代码
陈耀光、温卫红 active server page(简称asp)技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效率。但由于asp脚本是采用明文(plain text)方式来编写的,所以应用开发商辛辛苦苦开发出来的asp应用程序,一旦发布到运行环境中去后,就很难确保这些“源代码”不会被有意或无意地“流传”出去,无法实现对知识产权的保障。这样就产生了如何有效地保护开发出来的asp脚本源代码的需求。本文将就如何有效地保护开发出来的asp脚本的源代码的思路和方法进行了基本的分析和展示。 ■asp的运行机制■ 我们先来分析一下asp的运行机制:首先,asp脚本是一系列按特定语法(目前支持vbscript和jscript两种脚本语言)编写的、与标准html页面混合在一起的脚本所构成的文本格式的文件。当客户端的最终用户用web浏览器通过internet/intranet来访问基于asp脚本的应用时,web浏览器将向web服务器发出http/https请求。web服务器分析、判断出该请求是asp脚本的应用后,自动通过isapi接口调用asp脚本的解释运行引擎(asp.dll)。asp.dll将从文件系统或内部缓冲区获取指定的asp脚本文件,接着就进行语法分析并解释执行。最终的处理结果将形成html格式的内容,通过web服务器“原路”返回给web浏览器,由web浏览器在客户端形成最终的结果呈现。这样就完成了一次完整的asp脚本调用。若干个有机的asp脚本调用就组成了一个完整的asp脚本应用。 ■思路与方法■ 根据asp脚本的原理,我们就可以提出以下几种保护asp脚本源代码的思路: 1)“脚本最小化”:即asp文件中只编写尽可能少的源代码,实现商业逻辑的脚本部分被封装到一个com/dcom组件,并在asp脚本中创建该组件,进而调用相应的方法(method)即可。应用开发者在动手开发asp脚本应用之前就可按此思路来开发,或直接用asp脚本快速开发出原型系统后,针对需要保护、加密的重要的部分脚本用com/dcom组件来重新开发、实现并替换。 2)“脚本加密”:即asp脚本仍直接按源代码方式进行开发,但在发布到运行环境之前将脚本进行加密处理,只把加密后的密文脚本发布出去。要实现这种方法,就要在asp.dll读取脚本这个环节加入密文还原的处理。 实现这种思路的方法主要有两种:方法一是自行开发一个isapi的iis过滤(filter)模块,在asp.dll之前钩连(hook)对asp脚本文件的读取,以便把从文件系统读出的密文还原成asp.dll可以解释的明文;方法二就是直接由asp.dll提供对asp脚本加密处理的支持。微软在新版本的vbscript.dll和jscript.dll中提供这种称为microsoft script encode技术的支持。这样,无论是客户端的vbscript或jscript(包括wsh脚本等),还是服务器端的vbscript或jscript(即asp脚本)都可以支持加密处理。 microsoft script encode技术具体的实现思路包括以下两个方面:一是加密过程,通过提供一个实用程序对包含asp脚本源代码的文本文件进行扫描,找出其中标记为“〈script language=″vbscript″〉”或“〈script language=″jscript″〉”的脚本部分,进行加密处理并替换为密文后,将该标志相应地改为“〈script language=″vbscript.encode″〉”或“〈script language=″jscript.encode″〉”;二是还原过程,ie浏览器或asp.dll等执行脚本时是统一通过vbscript.dll或jscript.dll来进行解释执行的,所以它们都能同时地、透明地支持明文和密文的脚本! 总之,如果采用第一种思路,要么就自行在开发过程中遵照进行,要么可以考虑选择自动转换成visual basic编译代码的通用的、实用工具;采用第二种思路的话,要么就自行开发iis isapi过滤模块,要么可以考虑直接采用microsoft script encoder软件。 ■实例■ 从微软公司站点免费下载到sce10en.exe(英文版)或sce10chs.exe(简体中文版)之后,直接运行之即可完成安装过程。安装完毕之后,将生成一个screnc.exe可执行文件,这是一个运行在dos prompt的命令行工具。 假设我们现在有如下的一个asp脚本文件要进行加密:
我们可以在dos prompt下运行screnc-l vbscript aa.asp bb.asp〈enter〉来生成包含密文asp脚本的新文件bb.asp,其中的运行参数-l vbscript是用来显式指明是vbscript语法。 加密后的结果如下:
这里大家可能已经注意到了,所有的英文字符,只要是在“〈%”和“%〉”之内的,不管是否是注解,都变成了不可阅读的密文了,但中文却没有进行变换?!不过,这一点对其可用性来说应该还是可以接受的。 |
|||||||||||||||||