浅谈ASP数据库漏洞和网络安全防御的解决对策
摘要:目前,用于网页设计的开发工具很多,而ASP (ActiveServer Pages)作为一种典型的服务器端网页设计技术,它将脚本、超文本和强大的数据库访问功能融合在一起,集简单性、高效性和易扩展性于一身。本案就以ASP+ACCESS为例,浅谈数据库漏洞和网络安全防御的解决对策。
关键词:ASP 网络安全 防御对策
0 引言
随着网络技术和网络规模的不断发展以及电子教育类门户的兴起,许多大学院校都建立了自己的教育类门户网站,针对网络和计算机系统的攻击已经屡见不鲜,在构建网站的时候,都会考虑网络安全问题,对于网络安全的投入较大,如使用防火墙、入侵检测、大学院校防病毒等安全产品,但网站还是有被攻击,甚至完全被控制的可能。ASP (ActiveServer Pages)作为一种典型的服务器端网页设计技术,它将脚本、超文本和强大的数据库访问功能融合在一起,集简单性、高效性和易扩展性于一身。本案就以ASP+ACCESS为例,浅谈数据库漏洞和网络安全防御的解决对策。
1 安全问题分析
关键词:ASP 网络安全 防御对策
0 引言
随着网络技术和网络规模的不断发展以及电子教育类门户的兴起,许多大学院校都建立了自己的教育类门户网站,针对网络和计算机系统的攻击已经屡见不鲜,在构建网站的时候,都会考虑网络安全问题,对于网络安全的投入较大,如使用防火墙、入侵检测、大学院校防病毒等安全产品,但网站还是有被攻击,甚至完全被控制的可能。ASP (ActiveServer Pages)作为一种典型的服务器端网页设计技术,它将脚本、超文本和强大的数据库访问功能融合在一起,集简单性、高效性和易扩展性于一身。本案就以ASP+ACCESS为例,浅谈数据库漏洞和网络安全防御的解决对策。
1 安全问题分析
ASP+Access解决方案的主要安全隐患来自Access数据库的安全性和ASP网页设计过程中的安全漏洞。在ASP+Access网站中,如果获得或者猜到Access数据库的存储路径和数据库名,则该数据库就可以被下载到本地。
Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。设置密码后的数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串,并将其存储在*.mdb文件从地址“&H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻而易举地得到数据库的密码。
ASP程序采用的是非编译性语言即用明文方式来编写的,这大大降低了程序源代码的安全性。
2 安全防范策略
2.1 非常规命名 提高数据库的安全性,就要避免包含文件和Access数据库文件被下载,并防止下载地址泄露,过滤变量输入中的非法字符和改造危险的SQL语句,对数据库内容和数据库联接字符串加密,将数据库连接文件放到其他虚拟目录下。
如使用虚拟主机,Access数据库就命名为#文件名.asp,并且建一个临时表,表中有一字段
Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。设置密码后的数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串,并将其存储在*.mdb文件从地址“&H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”,因此,用这一密钥与*.mdb文件中的加密串进行第二次异或操作,就可以轻而易举地得到数据库的密码。
ASP程序采用的是非编译性语言即用明文方式来编写的,这大大降低了程序源代码的安全性。
2 安全防范策略
2.1 非常规命名 提高数据库的安全性,就要避免包含文件和Access数据库文件被下载,并防止下载地址泄露,过滤变量输入中的非法字符和改造危险的SQL语句,对数据库内容和数据库联接字符串加密,将数据库连接文件放到其他虚拟目录下。
如使用虚拟主机,Access数据库就命名为#文件名.asp,并且建一个临时表,表中有一字段
OLE对象输入<%或%>等字符,IIS就会按ASP语法来解析,然后就会报告500错误ASP代码,让ASP不能被正确的解释。在数据库名前加上#,这样,如碰到此类SQL查询语句:“select* from d:\web\data\#data.asp.admin”,系统会提示出错,因为#在SQL语法中有表示日期的作用,语法出错也就不会去执行查询条件了。
如使用托管主机并且拥有主机权限,数据库应放到IIS以外的目录下。在IIS中,将数据库属性设置文件不可以读取。如Web目录在d:\web\Website目录下,那么就把数据库保存在d:\web\data目录下。asp 源代码
2.2 使用ODBC数据源 如果源代码失密后,数据库也将随ASP源代码的失密而一同失密。如果使用ODBC数据源,就能有效地解决这样的问题。所以,在ASP程序设计中,应尽量使用ODBC数据源,不要把数据库名直接写在程序中,例如:DBPath = Server.MapPath(“cmddb.mdb”),conn.Open driver={Microsoft Access Driver(*.mdb)};dbq=&DBPath,万一泄漏了源程序,那么Access数据库的名字就一览无余,因此要在ODBC中设置数据源,在程序中这样写: conn.open“ODBC-DSNname”。
2.3 Session对象进行注册验证 为防止未经注册的用户绕过注册界面直接进入应用系统,可以采用Session对象进行注册验证。Session对象是ASP为克服HTTP的无状态性而引入的
如使用托管主机并且拥有主机权限,数据库应放到IIS以外的目录下。在IIS中,将数据库属性设置文件不可以读取。如Web目录在d:\web\Website目录下,那么就把数据库保存在d:\web\data目录下。asp 源代码
2.2 使用ODBC数据源 如果源代码失密后,数据库也将随ASP源代码的失密而一同失密。如果使用ODBC数据源,就能有效地解决这样的问题。所以,在ASP程序设计中,应尽量使用ODBC数据源,不要把数据库名直接写在程序中,例如:DBPath = Server.MapPath(“cmddb.mdb”),conn.Open driver={Microsoft Access Driver(*.mdb)};dbq=&DBPath,万一泄漏了源程序,那么Access数据库的名字就一览无余,因此要在ODBC中设置数据源,在程序中这样写: conn.open“ODBC-DSNname”。
2.3 Session对象进行注册验证 为防止未经注册的用户绕过注册界面直接进入应用系统,可以采用Session对象进行注册验证。Session对象是ASP为克服HTTP的无状态性而引入的
一个服务端对象,可方便地用来保存客户的个性资料。Session对象的值保存在服务器方,各个客户的Session对象互相独立。Session对象最大的优点是可以把某用户的信息保留下来,让后续的网页读取。但一般的注册页面,设计要求用户注册成功后系统启动“scmis.asp? s=1”页面。如果不采用Session对象进行注册验证,则用户在浏览器中键入“URL/ scmis.asp? s=1”即可绕过注册界面,直接进入系统。利用Session对象可以有效阻止这一情况的发生。
相关的程序代码如下:
<%
'读取用户输入的用户名和密码
UserID = Request(“UserID”)
Password = Request(“Password”)
'检查UserID及Password是否正确(实际程序可能会比
较复杂)
If UserID <>“scmis”Or Password <>“password”
Then
相关的程序代码如下:
<%
'读取用户输入的用户名和密码
UserID = Request(“UserID”)
Password = Request(“Password”)
'检查UserID及Password是否正确(实际程序可能会比
较复杂)
If UserID <>“scmis”Or Password <>“password”
Then
Response.Write“用户名或密码错误!”
Response.End
End If
'将Session对象设置为通过验证状态
Session(“Passed”) = True
%>
进入应用程序后,首先进行验证:
<%
'如果未通过验证,返回Login状态
If Not Session(“Passed”) Then
Response.Redirect“Login.asp”
End If
%>
2.4 止ASP源代码的非法访问
2.4.1 对目录设置不同的属性 为了有效地防止ASP源代码泄露,在设置Web站点时,将HT
Response.End
End If
'将Session对象设置为通过验证状态
Session(“Passed”) = True
%>
进入应用程序后,首先进行验证:
<%
'如果未通过验证,返回Login状态
If Not Session(“Passed”) Then
Response.Redirect“Login.asp”
End If
%>
2.4 止ASP源代码的非法访问
2.4.1 对目录设置不同的属性 为了有效地防止ASP源代码泄露,在设置Web站点时,将HT
ML文件同ASP文件分开放置在不同的目录下,然后将HTML子目录设置为“读(Read)”,将ASP子目录设置为“执行(Execute)”,这不仅方便了对Web的管理,而且最重要的是提高了ASP程序的安全性,防止了程序内容被客户所访问。
2.4.2 对ASP页面进行加密 为防止ASP源代码的非法访问,可以对ASP页面进行加密。一般有两种方法对ASP页面进行加密。一种是使用组件技术将编程逻辑封装入DLL之中;另一种是使用微软的Script Encoder对ASP页面进行加密。使用Script Encoders可以对当前目录中的所有的ASP文件进行加密,并把加密后的文件统一输出到相应的目录中。Script Encoder只加密在HTML页面中嵌入的ASP代码,其他部分仍保持不变,仍然可以使用常用网页编辑工具对HTML部分进行修改、完善,只是不能对ASP加密部分进行修改,否则将导致文件失效。
Script Encoder的运行程序是,格式如下:screnc[/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfileoutputfile ,其中参数:s:屏蔽屏幕输出;f:指定输出文件是否覆盖同名输入文件;xl:是否在.asp文件的顶部添加@Language指令;l:defLanguag指定缺省的脚本语言;e:defExtension指定待加密文件的扩展名。
通过对ASP+Acecss网页应用系统安全性的研究,我们可以更好地防范校园网络站点的非
2.4.2 对ASP页面进行加密 为防止ASP源代码的非法访问,可以对ASP页面进行加密。一般有两种方法对ASP页面进行加密。一种是使用组件技术将编程逻辑封装入DLL之中;另一种是使用微软的Script Encoder对ASP页面进行加密。使用Script Encoders可以对当前目录中的所有的ASP文件进行加密,并把加密后的文件统一输出到相应的目录中。Script Encoder只加密在HTML页面中嵌入的ASP代码,其他部分仍保持不变,仍然可以使用常用网页编辑工具对HTML部分进行修改、完善,只是不能对ASP加密部分进行修改,否则将导致文件失效。
Script Encoder的运行程序是,格式如下:screnc[/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfileoutputfile ,其中参数:s:屏蔽屏幕输出;f:指定输出文件是否覆盖同名输入文件;xl:是否在.asp文件的顶部添加@Language指令;l:defLanguag指定缺省的脚本语言;e:defExtension指定待加密文件的扩展名。
通过对ASP+Acecss网页应用系统安全性的研究,我们可以更好地防范校园网络站点的非
法入侵,解决数据库的非法下载以及密码被修改等问题,对于Web站点的安全性,还应该对Web服务器进行设置和管理,如设置用户名、密码、权限,设置IP地址限制等,对限制系统的非法入侵,保证站点的安全,提供必要的保障。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论