当前位置: 首页 > 图文教程 > 网络编程 > ASP > 关于asp+access的安全问题分析

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 中的 关于asp+access的安全问题分析


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 70 ::
收藏到网摘: n/a

众所周知,asp+access最大的安全隐患在于access数据库可以被别人
下载,而现在提供的很多asp空间都是只支持access数据库,这样一来,
asp+access的安全问题就显得很突出了。
1.Access数据库的存储隐患
在ASP+Access应用系统中,如果获得或者猜到Access数据库的存储路
径和数据库名,则该数据库就可以被下载到本地。
2.Access数据库的解密隐患
由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,
解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行
异或来形成一个加密串,并将其存储在*.mdb文件中从地址“&H42”开
始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因
此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻
松地得到Access数据库的密码。基于这种原理,可以很容易地编制出解密
程序。
由此可见,无论是否设置了数据库密码,只要数据库被下载,其信息就没有任何安全性可言了。
3.程序设计中的安全隐患  
ASP代码利用表单(form)实现与用户交互的功能,而相应的内容会反
映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内
容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“……
page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页
面。因此,在设计验证或注册页面时,必须采取特殊措施来避免此类问题
的发生。
==========
解决方案
==========
提高数据库的安全性
由于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方法具有许多优点:
⑴.HTML仍具有很好的可编辑性。Script Encoder只加密在HTML页面中
嵌入的ASP代码,其他部分仍保持不变,这就使得我们仍然可以使用
FrontPage或Dreamweaver等常用网页编辑工具对HTML部分进行修改、完
善,只是不能对ASP加密部分进行修改,否则将导致文件失效。
⑵.操作简单。只要掌握几个命令行参数即可。Script Encoder的运行
程序是screnc.exe,其使用方法如下:
screnc [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
其中的参数含义如下:
s:屏蔽屏幕输出;
f:指定输出文件是否覆盖同名输入文件;
xl:是否在.asp文件的顶部添加@Language指令;
l:defLanguag指定缺省的脚本语言;
e:defExtension 指定待加密文件的扩展名。
⑶.可以批量加密文件。使用Script Encoder可以对当前目录中的所有
的ASP 文件进行加密,并把加密后的文件统一输出到相应的目录中。例
如:
screnc *.asp c:\temp
⑷. Script Encoder是免费软件。该加密软件可以从微软网站下载:
http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下载后,运行安装即可。
利用Session对象进行注册验证
为防止未经注册的用户绕过注册界面直接进入应用系统,可以采用Session对象进行注册验证。Session对象最大的优点是可以把某用户的信息保留下来,让后续的网页读取。
3.改数据库扩展名
你也可以将数据库的扩展名改为.asp,当然在定位数据库的时候也要
用类似database.asp的文件名,这样数据库不会被轻易的下载,而数据
还可以正常的读出写入。
4.向数据库内加错误的asp代码
如果以为做完第3项以后就万事大吉了那就错了,虽然数据库的扩展名
变成了.asp,但是当对方猜到了你的数据库路径以后还是可以下载的,只
不过慢了一些,对方可以等页面完全打开以后“另存为”就可以了。要解
决这个问题可以载数据库内添加错误的asp代码。你可以先建立一个隐藏
表,表内只有一列,并且插入这样一行:
这样一来对方打开数据库的页面时就只会出现asp脚本的错误信息,而不
会下载你的数据库了。
5.对于程序设计中隐患的解决一例
大多数人都认为网站只要加了登录密码就无法正常进入了。而请您看下
面的验证语句:
sql="select uname,pwd from uinfo where "
sql=sql&"uname='"&request.form("uname")&"'"
sql=sql&" and pwd='"&request.form("pwd")&"'"
rs.open sql,conn,1,1
if rs.eof or rs.bof then
response.write "对不起,错误的用户名/密码!"
else
response.write "登录成功!"
end if
可能已经有读者看出来了这段代码是十分危险的,只要对方知道用户名就
可以登录,你可以在密码框里输入“' or '1'='1”就可以了,其原理很
简单,就是利用了sql查询语句,大家注意,用此方法提交以后的sql语句
变成了:(如果用户名为administrator)
select uname,pwd from uinfo where uname='administrator' and pwd='' or '1'='1'
如果用户名administrator存在的话那么这个记录是可以被选出来的,之
后当然就是可以正常登录了。
解决方案:
sql="select uname,pwd from uinfo where "
sql=sql&"uname='"&request.form("uname")&"'"
rs.open sql,conn,1,1
if rs.eof or rs.bof then
response.write "对不起,本站没有此用户!"
else
if rs.fields("pwd")=trim(request.form("pwd")) then
response.write "登录成功!"
else
response.write "错误的用户名/密码!"
end if
end if