| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 604 人关注过本帖
标题:保护ASP脚本源代码
取消只看楼主 加入收藏
tml327
Rank: 1
等 级:新手上路
帖 子:510
专家分:0
注 册:2007-10-30
收藏
 问题点数:0 回复次数:1 
保护ASP脚本源代码
所谓"web源代码",指的是客户端的诸如HTML, javascript之类的东东,当你辛辛苦苦写出来一个web应用程序时,可能希望自己 作为全球最大的软件商,微软公司也意识到了脚本的知识产权保护问题,因此在ie5以上的版本里加入了对编码脚本的支持,这里
http://www.haodf.net/networksecurity/encrypt/200610/181465.html



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:ackiis est.asp c:ackiis estenc.asp

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


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


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

●将 ASP中的关键功能制作成动态链接库,部分隐藏 ASP脚本源代码

在 VB 6.0中建立一个 ActiveX dll工程(设置工程名: Example,类名: GerRec)。在菜单中选择“工程”,然后选择引用“ Microsoft Active Server Pages Object Library”和“ Microsoft ActiveX Data Object 2.0 Library”。输入如下代码:

Private MyScriptingContext As ScriptingContext

Private MyApplication As Application

Private MyRequest As Request

Private MyResponse As Response

Private MyServer As Server

Private MySession As Session

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)

Set MyScriptingContext = PassedScriptingContext

Set MyApplication = MyScriptingContext.Application

Set MyRequest = MyScriptingContext.Request

Set MyResponse = MyScriptingContext.Response

Set MyServer = MyScriptingContext.Server

Set MySession = MyScriptingContext.Session

End Sub

Public Sub OnEndPage()

Set MyScriptingContext = Nothing

Set MyApplication = Nothing

Set MyRequest = Nothing

Set MyResponse = Nothing

Set MyServer = Nothing

Set MySession = Nothing

End Sub

Public Sub SayTitle(strTitle as string)

MyResponse.Write strTitle

......

End Sub

Public Function GetRecSqlOleDb(strSql As String) As Recordset

’利用 OLEDB打开一个 SQL7.0数据库,返回数据记录

Dim myCnn As Connection

Dim mySet As Recordset

Dim strConnstring As String

Set myCnn = New ADODB.Connection

Set mySet = New ADODB.Recordset

strConnstring=“ Provider=SQLOLEDB.1;Password=1234567;”&“ Persist Security Info=True;User ID=sa;”&“ Initial Catalog=vlog;”&“ Data Source=hplh3;Connect Timeout=15”

myCnn.ConnectionString = strConnstring

myCnn.Open

mySet.ActiveConnection = myCnn

mySet.Open strSql

Set GetRecSqlOleDb = mySet

End Function

编译生成 Example.dll,然后在 InterDev中插入如下代码:

<%

dim MyRec

Set ObjReference=Server.CreateObject

(“ Example.GerRec” )

set MyRec=Server.CreateObject(“ ADODB.Recordset” )

Set MyRec=objReference.GetRecSqlOleDb(“ select* from catalog” )

Response.Write MyRec.fields(0)

% >
在 Client端访问这个 ASP文件将显示第一条记录的第一个字段内容。该例子通过动态链接库将对数据库的访问隐藏起来,即使有人得到了 ASP源代码,他也不可能通过 ASP源代码得到数据库的用户名和口令,从理论上讲,所有的 ASP源代码都可以用 dll来实现。
搜索更多相关主题的帖子: ASP 代码 
2007-11-12 13:02
tml327
Rank: 1
等 级:新手上路
帖 子:510
专家分:0
注 册:2007-10-30
收藏
得分:0 
我没想到更好的办法,改怎么办呢?

轻狂如我,心伤谁知!
2007-11-12 18:04
快速回复:保护ASP脚本源代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023024 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved