浅谈ASP与Access的安全隐患及防范_第1页
浅谈ASP与Access的安全隐患及防范_第2页
浅谈ASP与Access的安全隐患及防范_第3页
浅谈ASP与Access的安全隐患及防范_第4页
浅谈ASP与Access的安全隐患及防范_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、浅谈ASP与Access的安全隐患及防范湖北省沙市中学 康 庄摘 要:随着网络的发展,动态、交互的网络技术使用的越来越多,网络数据库应用越来越广泛。ASP和ACCESS由于具有操作简单、界面友好等特点,成为许多中小型网上应用系统的首选方案。它为我们带来便捷的同时,引发的数据安全问题也越来越严峻。如何解决数据的安全隐患和防范数据被盗成为一个越来越严重的问题,本文给出本人的一点经验,希望能够给读者带来的思考。关键词:网络,ASP,ACCESS,安全隐患和防范随着Internet的发展,Web技术日新月异,们已经不再满足于静态HTML技术,更多的是要求动态、交互的网络技术。继通用网关接口(CGI)之

2、后,微软推出的IIS+ASP(Active Server Pages)作为一种典型的服务器端网页设计技术,被广泛地应用在网上银行、电子商务、搜索引擎等各种互联网应用中。同时Access数据库作为微软推出的以标准JET为引擎的桌面型数据库系统,由于具有操作简单、界面友好等特点,具有较大的用户群体。因此ASPAccess成为许多中小型网上应用系统的首选方案。但ASPAccess解决方案在为我们带来便捷的同时,也带来了不容忽视的安全问题。(一)ASP与Access数据库安全隐患分析ASPAccess解决方案的主要安全隐患来自Access数据库的安全性,其次在于ASP网页设计过程中的安全漏洞。1、Ac

3、cess数据库的存储隐患,数据库可能被下载。在ASPAccess应用系统中,如果获得或者猜到Access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。例如:对于网上书店的Access数据库,人们一般命名为book.mdb、store.mdb等,而存储的路径一般为“URL/database”或干脆放在根目录(“URL/”)下。这样,只要在浏览器地址栏中敲入地址:“URL/database/store.mdb”,就可以轻易地把store.mdb下载到本地的机器中。2、Access数据库的解密隐患由于Access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系

4、统通过将用户输入的密码与某一固定密钥(例如: Access 97为86 FB EC 37 5D 44 9C FA C6 5E 28 E6 13)进行异或来形成一个加密串,并将其存储在.mdb文件中从地址“H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因此,可以轻松地编制解密程序,用这一密钥与.mdb文件中的加密串进行第二次异或操作,一个几十行的小程序就可以轻松地获得任何Access数据库的密码,网络上也有很多这种类型的解密程序使用。由此可见,无论是否设置了数据库密码,只要数据库被下载,其信息就没有任何安全性可言了。3、源代码的安全隐患由于ASP程序采用的是非编译性语言,

5、这大大降低了程序源代码的安全性。任何人只要进入站点,就可以获得源代码,从而造成ASP应用程序源代码的泄露。4、程序设计中的安全隐患 ASP代码利用表单(form)实现与用户交互的功能,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页面。因此,在设计验证或注册页面时,必须采取特殊措施来避免此类问题的发生。(二)对于数据库的安全性防范由于Access数据库加密机制过于简单,因此,如何有效地防止Access数据库被下载,就成了提高ASPAc

6、cess解决方案安全性的重中之重。对于如何防范数据库被下载,我可以提供以下一些方法供参考:1、非常规命名法防止数据库被找到的简便方法是为Access数据库文件起一个复杂的非常规名字,并把它存放在多层目录下。例如,对于网上书店的数据库文件,不要简单地命名为“book.mdb”或“books.mdb”等等,而是要起个古怪的名字,例如:gcnhg312asdfj.mdb,再把它放在如./sdfv43hwer4d/xzvgfy7e/hwsd57jdt 之类的没有规律的深层目录下,这样,对于一些通过猜的方式得到Access数据库文件名的非法访问方法起到了有效的阻止作用。2、不单纯的改mdb为asp我曾经

7、和朋友试验过一次,把data.mdb文件改名为data.asp文件后放在wwwroot目录里。然后在IE中输入data.asp路径后,发现IE显示一片空白,右键-察看源文件,跳出记事本,将内容另存为.mdb文件 ,用ACCESS打开,发现需要密码,也就是说至少文件头被破坏;然后用Flashget试验下载data.asp文件,并另存为data.mdb文件,发现用ACCESS打开完好无损!所以,说不能单纯的改后缀名就行了,必须先处理。首先,用notepad新建一个内容为 % 的 文本文件,随便起个名字存档;接着,用Access打开您的数据库文件,新建一个表,在设计视图中创建一个新表,字段名任意,数

8、据类型为ole对象,表保存名称任意,然后添加一个记录,选择插入-对象-由文件创建,选择之前建立的文本文件,如果操作正确的话,应该可以看到一个新的名为包的记录。3.数据库名前加# 3、把数据库文件前名加上#、然后修改数据库连接文件(如conn.asp)中的数据库地址。原理是下载的时候只能识别#号前名的部分,对于后面的自动去掉,比如你要下载:/date/# 123.mdb(假设存在的话)。无论是IE还是FLASHGET等下到的都是/date/index.htm(index.asp、default.jsp等,也就是你在IIS中设置的首页文档)。 另外在数据库文件名中保留一些空格也起到类似作用,由于H

9、TTP协议对地址解析的特殊性,空格会被编码为%,如http :/date/123 ;456.mdb,下载的时http:/www. /date/123 %456.mdb。而我们的目录就根本没有123%456.mdb这个文件,所以下载也是无效的这样的修改后,即使你暴露了数据库地址,一般情况下别人也是无法下载! 4、加密数据库使用Access数据库的加密密码,虽然它很容易破解,但已胜于没有。5、将数据库放在WEB目录外或将数据库连接文件放到其他虚拟目录下 假如你的WEB目录是e:webroot,可以把数据库放到e:data这个文件夹里,在e:webroot里的数据库连接页中修改数据库连接地址为:./

10、data/数据库名 的形式,这样数据库可以正常调用,但是无法下载的,因 为它不在WEB目录里!但这个方法一般也不适合购买虚拟空间的用户。6、使用ODBC数据源在ASP程序设计中,如果有条件,应尽量使用ODBC数据源,不要把数据库名直接写在程序中,否则,数据库名将随ASP源代码的失密而一同失密。例如使用以下语句连接:DBPath=Server.MapPath(“./sdfv43hwer4d/xzvgfy7e/hwsd57jdt/gcnhg312asdfj.mdb ”)conn.Open “driver=Microsoft Access Driver (.mdb);dbq=” DBPath这实际上

11、就是又把文件目录和文件名告诉了别人,可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,数据库也很容易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了。例如:conn.open “ODBCDSN名” 不过这样是比较烦的,目 录移动的话又要重新设置数据源了。7、添加数据库名的如MDB的扩展映射 这个方法就是通过修改IIS设置来实现,适合有IIS控制权的朋友,不适合购买虚拟主机用户(除非管理员已经设置了)。只要修改一处,整个站点的数据库都可以防止被下载。无须修改代码即使暴露目标地址也可以防止下载。在IIS属性主目录配置映射应用程序扩展那里添加.mdb文件的应用解析。注意这

12、里的选择的D LL(或EXE等)似乎也不是任意的,选择不当,这个MDB文件还是可以被下载的, 注意最好不要选择选择asp.dll等。你可以自己多试下。 这样修改后下载数据库如: HYPERLINK / /asdas.mdb就出现(404或50 0等错误)(三)解决程序设计中的安全问题大多数人都认为网站只要加了登录密码就只能正常进入了。而请您看下面的验证语句: sql=select uname,pwd from uinfo where sql=sql &uname=&request.form(uname)& sql=sql & and pwd=&request.form(pwd)& rs.ope

13、n 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 如

14、果用户名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 错误

15、的用户名/密码! end if end if这就是说程序设计上要严谨。要注意SQL注入攻击,类似被加上OR 1 =1 。(四)对ASP页面进行安全性加密为有效地防止ASP源代码泄露,可以对ASP页面进行加密。一般有两种方法对ASP页面进行加密。一种是使用组件技术将编程逻辑封装入DLL之中;另一种是使用微软的Script Encoder对ASP页面进行加密。笔者认为,使用组件技术存在的主要问题是每段代码均需组件化,操作比较烦琐,工作量较大;而使用Script Encoder对ASP页面进行加密,操作简单、收效良好。Script Encoder方法具有许多优点:1、HTML仍具有很好的可编辑性。S

16、cript 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:是否在.

17、asp文件的顶部添加Language指令;l:defLanguag指定缺省的脚本语言;e:defExtension 指定待加密文件的扩展名。3、可以批量加密文件。使用Script Encoder可以对当前目录中的所有的ASP 文件进行加密,并把加密后的文件统一输出到相应的目录中。例如:screnc .asp c:temp4、Script Encoder是免费软件。该加密软件可以从微软网站下载:/scripting/vbscript/download/x86/sce10en.exe。下载后,运行安装即可。(五)利用Session对象进行注册验证为防止未经注册的用户绕过注册界面直接进入应用系统,可

18、以采用Session对象进行注册验证。Session对象最大的优点是可以把某用户的信息保留下来,让后续的网页读取。例如,要可以设计一个登录界面,只有用户名输入框,密码输入框,提交按钮。设计中假设合法用户提交成功后系统启动checkuser.asp?page=1页面;不合法用户提交成功后系统启动checkuser.asp?page=0页面。如果不采用Session对象进行注册验证,则用户在浏览器中敲入“URL/ checkuser.asp?page=1”即可绕过注册界面,直接进入系统。而利用Session对象可以有效阻止这一情况的发生。相关的程序代码如下: 读取用户输入的账号和密码UserID = Request(“UserID”)Password = Reques

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论