asp+access构建下Web网站的安全防范

2018 年 4 月 5 日3000

摘 要:针对asp+access架构的网站在非专业化开发过程中所出现的access数据库的主要安全问题和asp代码漏洞分析研究,并从access数据库存储、解密的安全性和asp页面安全性等方面提出相应的安全防范对策。

关键词:asp+access架构 网站 安全

很多中小型的学校和企事业单位各部门的绝大部门的web网站都是使用asp+access构建方案,并且很大一部分都是因为经费短缺的问题而由非专业人员进行开发,因此开发过程中存在着巨大安全隐患,包括access数据库被攻击者非法下载、篡改。access数据库中有大量各部门的数据,防止access数据库被非法下载显得极其重要。通过分析研究,提供一些access数据库文件的安全防范对策。

一、asp+access的安全隐患access数据库的安全性,其次在于asp网页设计过程中的安全漏洞。

1.access数据库的存储隐患

在asp+access系统中,如果获得或者猜到access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。例如:有些数据库,直接就命名为data.mdb、qwer.mdb等,而存储的文件夹名就是“database”、“data”或干脆放在根目录。这样,只要在浏览器地址栏中敲入地址:"URL/database/data.mdb",就可以轻易地把data.mdb下载到本地的机器中。

2.access数据库的解密隐患

access数据库的加密机制非常简单,所以即使数据库设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串,并将其存储在*.mdb文件中从地址"&H42"开始的区域内。由于异或操作的特点是"经过两次异或就恢复

原值",因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻松地得到Access数据库的密码。基于这种原理,可以很容易地编制出解密程序。

3.源代码的安全隐患

由于ASP程序采用的是非编译性语言,这大大降低了程序源代码的安全性。任何人只要进入站点,就可以获得源代码,从而造成ASP应用程序源代码的泄露。

二、针对asp+access的安全隐患的一些对策:

1.非常规命名法

防止数据库被找到,最简单的方法就是是access数据库文件起一个比较复杂的名字,并把它存放在多层目录下。例如:sdgeqw55.mdb,再把它放在如./asdfyy7/agh/ihbr44之类的深层目录下,或者把数据库改为sdgeqw55.asp sdgeqw55.asa等。这样,对于一些通过猜的方式得到Access数据库文件名的非法访问方法起到了有效的阻止作用。

在ASP程序设计中,应尽量使用ODBC数据源,不要把数据库名直接写在程序中,否则,数据库名将随ASP源代码的失密而一同失密。例如:

  DBPath=Server.MapPath(“./asdhh6/

  ./asdfyy7/agh/ihbr44/sdgeqw55.mdb”)

  conn.Open“driver={Microsoft Access Driver

(*.mdb)};dbq=”&DBPath

可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,数据库也很容易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了:

  conn.open“ODBC-DSN名”

2.扩展名改为asp。这种作法是比较专业但也是很安全的也是现在比较流行的作法,但是现在许多的人只是作了一半,只是将数据名改成ASP而以,这样的话直接用FlashGet之类的下载工具一样可以将数据库下载:在数据库内创建一个字段,名称随意,类型是OLE对象,内容设置为单字节型的"。这段代码运行完之后将会在数据库内生成一个nodownload表,表内字段是notdown。如果数据库内已有同名的数据表存在请将代码内的nodownload改成自己想要的数据表名即可。

3.扩展名改为asa。这种方式的真谛是利用IIS对ASA文件的保护,从而使得数据库文件不能从URL上直接请求下载,但是这种方式被误解成只要将文件后缀改成ASA就可以了。要知道IIS只是对global.asa这个文件名有请求保护,所以这种方式只能将数据库名设置为global.asa,而且要注意的是,设置成global.asa之后最好不要将其放在主机或虚拟目录的根目录里,不然会被IIS当然正常的global.asa文件进行尝试运行的。

4.可以批量加密文件。使用Script Encoder可以对当前目录中的所有的ASP文件进行加密,并把加密后的文件统一输出到相应的目录中。例如:

screnc*.asp c:\web

5.不过要在ASP程序中的connection对象的open方法中增加PWD的参数即可,例如:

param="driver={Microsoft Access Driver(*.mdb)};Pwd=yfdsfs"

param=param&";dbq="&server.mappath("employer1.mdb")

conn.open param

这样即使他人得到了employer1.mdb文件,没有密码他是无法看到employer1.mdb的。

参考文献:

[1]Access数据库管理与开发案例训练教程。电子工业出版社

[2]Access项目案例导航。科学出版社

[3]数据库原理与应用(Access)。清华大学出版社

[4]ASP.Access数据库开发与实例。清华大学出版社

0 0