随着Internet的发展,Web技术日新月异。继通用网关接口(CGI)之后,“ASP”(Active Server Pages)作为一种典型的服务器端网页设计技术,广泛应用于网上银行、电子商务、搜索引擎等互联网应用。同时Access作为微软推出的标准
数据库JET由于操作简单、界面友好等特点,为发动机的桌面数据库系统具有较大的用户群。因此ASP+Access成为许多中小型网上应用系统的首选方案。但ASP+Access解决方案不仅给我们带来了便利,也带来了不可忽视的安全问题。
ASP+Access的安全隐患ASP+Access解决方案的主要安全隐患来自Access其次是数据库的安全性ASP网页设计过程中的安全漏洞。
1.Access存储数据库的隐患
在ASP+Access如果在应用系统中获得或猜测Access数据库的存储路径和数据库名称可以下载到本地。比如网上书店Access人们通常把数据库命名为book.mdb、store.mdb等等,存储路径一般为URL/database或者干脆放在根目录(URL/”)下。这样,只需在浏览器地址栏中敲入地址:URL/database/store.mdb,可以轻松把握store.mdb下载到本地机器。目前腾佑的
虚拟主机已经做出了相应的限制,不允许*.mdb文件的下载。
2.Access解密数据库的隐患
由于Access数据库的加密机制非常简单,即使数据库设置了密码,也很容易解密。该数据库系统将用户输入的密码与固定密钥不同或形成加密串,并存储在*中.mdb&文件中的地址H42开始区域。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串可以通过第二次异或操作轻松获得Access数据库密码。基于这一原理,解密程序可以很容易地编制。
由此可见,无论数据库密码是否设置,只要数据库下载,其信息都不安全。
3.源代码的安全隐患
由于ASP程序采用非编译语言,大大降低了程序源代码的安全性。任何人只要进入网站就可以获得源代码,导致ASP泄露应用程序源代码。 4.程序设计中的安全隐患
ASP代码使用表单(form)实现与用户互动的功能,相应的内容将反映在浏览器的地址栏中。如果不采取适当的安全措施,您可以绕过验证直接进入页面。例如,在浏览器中敲入……page.asp?x=1不用表单页面就可以直接进入满足x=条件页面。因此,在设计验证或注册页面时,必须采取特殊措施避免此类问题。
由于数据库安全性的提高,数据库安全性的提高Access因此,如何有效防止数据库加密机制过于简单Access下载数据库已经成为一种改进ASP+Access解决方案安全的重中之重。 1.非常规命名法
防止数据库被发现的简单方法是Access数据库文件有一个复杂的非常规名称,并存储在多层目录中。例如,对于在线书店的数据库文件,不要简单地命名为book.mdb”或“store.mdb而是要起一个非常规的名字,比如:
faq19jhsvzbal.mdb,再把它放进去./akkjj16t/kjhgb661/acd/avccx55 等深度目录。这样,对于一些通过猜测获得的方法Access非法访问数据库文件名的方法起到了有效的防止作用。
2.使用ODBC数据源
在ASP程序设计中,应尽量使用ODBC数据源,不要在程序中直接写数据库名,否则数据库名将跟随ASP源代码一起失密。
DBPath = Server.MapPath(“./akkjj16t/
kjhgb661/acd/avccx55/faq19jhsvzbal.mdb ”)
conn.Open “driver={Microsoft Access Driver (*.mdb)};dbq=” & DBPath
可见,即使数据库据库的名称很奇怪,隐藏的目录也很深,ASP数据库在源代码失密后也很容易下载。如果使用ODBC数据源,不会有这样的问题:
conn.open “ODBC-DSN名”
对ASP有效防止页面加密ASP源代码泄露,是的ASP加密页面。一般有两种方法是对的ASP加密页面。一是利用组件技术包装编程逻辑DLL其中;另一种是使用微软Script Encoder对ASP加密页面。作者认为,使用组件技术的主要问题是每个代码都需要组件化,操作繁琐,工作量大;使用Script Encoder对ASP加密页面,操作简单,效果好。
Script Encoder该方法有许多优点:
1.HTML可编辑性仍然很好。Script Encoder只加密在HTML嵌入页面ASP代码和其他部分保持不变,这使得我们仍然可以使用它们FrontPage或Dreamweaver常用的网页编辑工具等HTML修改和改进部分只是不能ASP修改加密部件,否则文件将失效。
2.操作简单。只需掌握几个命令行参数即可。Script Encoder操作程序是screnc.exe,使用方法如下:
screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
参数含义如下:
s:屏幕输出;
f:指定输出文件是否覆盖同名输入文件;
xl:是否在.asp添加文件顶部@Language指令;
l:defLanguag指定缺失的脚本语言;
e:defExtension 指定待加密文件的扩展名。
3.可批量加密文件。Script Encoder当前目录中的所有可用ASP 加密文件,并将加密的文件统一输出到相应的目录中。
screnc *.asp c:emp
利用Session对象进行登记验证
为防止未注册用户绕过注册界面直接进入应用系统,可使用Session对象进行登记验证。Session对象最大的优点是可以保留用户的信息,让后续的网页读取。例如,设计注册页面如图1所示。
设计要求用户注册成功后系统启动hrmis.asp?page=1页。如果不使用Session对象进行注册验证,用户在浏览器中敲入URL/hrmis.asp?page=1绕过注册界面,直接进入系统。Session对象可以有效地防止这种情况。相关程序代码如下:
<%
' 读取用户输入的帐户和密码
UserID = Request(“UserID”)
Password = Request(“Password”)
' 检查UserID 及Password 是否正确(实际程序可能比较复杂)
If UserID <>“hrmis” Or Password <>
“password” Then
Response.Write 账号错了!
Response.End
End If
'将Session 对象设置为验证状态
Session(“Passed”) = True
%>
进入应用程序后,首先验证:
<%
如果验证失败,返回Login状态
If Not Session(“Passed”) Then
Response.Redirect “login.htm”
End If
%>