保护ASP脚本源代码

2012 年 12 月 15 日3790

ASP是基于 Server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在 Server端直接运行,并且它支持多用户、多线程,在 Web开发中得到了广泛的应用。

但是,因为 ASP脚本是纯文本格式,所以恶意者通过源代码可以很容易地看到原本不该看到的页面内容。例如, ASP源代码中通常有系统数据库的连接用户名和口令,恶意者利用此用户名和口令可以轻松地查看数据库中的所有信息(包括系统机密信息),还可能篡改库中信息,造成系统严重损坏。因此,保护 ASP脚本的源代码显得非常重要。

保护 ASP脚本源代码通常可采用 3种方式:第一种方式是对访问用户进行限制,禁止非法用户访问;第二种方式是对 Server端环境进行处理,提高系统的健壮性;第三种方式是对源代码进行加工,隐藏或部分隐藏脚本源代码。这 3种方式互为补充,有效设置可以提高脚本源代码的安全性。下面简单介绍这 3种方式的实现方法。

限制访问用户

所谓限制访问用户是指只有授权的用户才能访问系统的 ASP脚本。这主要有两种实现方法:第一种方法是通过 SSL( Secure Socket Layer)方法, Server端向 Client端发放证书(可以利用免费证书管理软件), Client端将证书添加到浏览器中,只有拥有合法证书的用户才能与 Server端建立链接,从而访问系统。这种方法不需要编程,安全性较高,但证书的下发比较麻烦。另一种方法是通过常用的验证用户名、口令方法,用户登录时必须首先输入用户名和口令,只有合法的用户名和口令才能访问系统。这种方法安全性稍低,编程比较简单。而且在实现时需要注意:不能简单地在登录窗口进行判别,因为如果用户知道了登录窗口下一步链接的文件名,可以直接在地址栏输入该文件名而绕过登录窗口。编程时可以在除登录窗口文件外的每个文件的开头检查 Request(“ HTTP_REFERENCE“)项的 IP地址,看其是否是由系统内部的文件跳转而来,如不是则跳转到登录窗口。代码如下:

<%

dim iValid

iValid=instr(Request(“ HTTP_REFERENCE“),

“ http://131.252.88.71“)

if iValid= 0 then

Response.Redirect“ login.asp

end if

......

% >

对 Server端进行处理

对 Server端进行处理主要有 3种方法:

●对系统权限进行设置

对 Server端设置详细的安全权限,除了系统管理员,尽量降低用户的存取权限;删除不必要的共享,包括打印机的共享;关闭匿名服务等一些不必要的功能;对 ASP源代码的目录设置详尽的访问权限,关闭“读”权限。

●经常下载安全补丁

一些恶意者经常利用系统的安全缺陷得到 ASP脚本的源代码。例如,利用 ::$ DATA可以得到 ASP脚本的源代码,或利用 Windows NT的一些安全缺陷可以登录到系统,查看系统的目录和文件,所以需要经常下载并安装微软公司提供的安全补丁。

●尽量不要在系统中下载、安装不必要的软件

一些下载软件带有“后门”,会将脚本源代码泄露。例如,微软有一个专门查看 ASP脚本源代码的程序 code.asp,如果把它放到 Web服务器上,别人可以很容易地查看 ASP脚本源代码(网上有不少类似免费软件)。

处理 ASP脚本源代码

对 ASP脚本源代码进行处理主要有两种方法:

●对 ASP脚本源代码进行加密

利用微软的 Windows Script Encoder,可以对 ASP脚本源代码进行加密。不过客户端加密后,只有 IE 5才能执行;服务器端脚本加密后,只有服务器上安装有 Script Engine 5才能执行。

Windows Script Encoder是一个简单的命令行加密工具,可以利用它加密 ASP脚本的源代码。加密后,无论 Server端和 Client端都无法读懂加密后的信息,如果改动加密后的信息,脚本就无法正常运行,从而有效地保护了 ASP脚本源代码。

例如 ASP文件 Test.asp中有如下一条语句:


<%

Response.Write“ 123456”

% >


在 DOS方式下运行加密命令 : screnc c:\backiis\test.asp c:\backiis\testenc.asp

在 testenc.asp中保存加密后代码,代码如下:


<%# @~ ^IQAAAA==7@# @& 7“+ kwW/? ? MkO+ ,Jq+ 2c*+ E@# @& YQcAAA==^#~ @% >


将 test.asp文件保存到另外一台机器上, Client端可以正常访问 testenc.asp(访问是透明的,就像访问 test.asp一样 ),但无论 Server端和 Client端都无法查看 test.asp脚本源代码。

0 0