论文部分内容阅读
摘要:ASP Access是很多中小型动态网站所采用的建设方案,该文介绍了 ASP Access建站方案的选择,分析了该方案下 Access数据库及 ASP 网页设计过程中存在的常见安全隐患,给出了相应的防范措施和解决方案。
关键词:ASP;Access数据库;网站安全性
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)26-5854-04
随着网络对人们生活的影响日趋多元,交互性好、用户参与度高的动态网站成为主流需求,此外,动态网站的管理非常简单,几乎都是通过数据库来管理,只要通过操作数据库就能够实现对网站的维护,所以,目前的绝大多数网站都是动态网站。
1 ASP Access网站建设方案选择
目前,比较常用的WEB服务器软件有IIS和Apache,IIS支持ASP,运行在Windows环境下,普及性好;Apache支持PHP、JSP、CGI,可运行于多种平台。在网页编程语言方面,ASP技术简单易学,适合开发中小型网站;PHP技术开源,适于对版权要求高的网站;JSP技术安全性高,开发成本也较大,适于开发一些如银行金融系统等大型电子商务网站。
ASP是微软推出的一种基于脚本的网络编程语言,可以创建组合HTML页面、脚本命令和Active X组件的动态、交互式WEB应用程序,代码易学,编程环境简单,开发周期短,数据库存取方便。Access作为微软Office软件包的组成部分,普及性强,界面友好,操作简单。使用ASP Access技术建设的网站移植性极强,移植时几乎不需任何附加操作即可实现,对于租用虚拟空间的中小型网站来说,是首选的建设方案。
2 ASP的安全性策略
ASP脚本是一系列按特定语法(目前支持VBscript和JScript两种脚本语言)编写的,与标准HTML页面混合在一起的脚本所构成的文本格式的文件。基于ASP技术的网站的工作方式可以描述为:当客户端用户使用WEB浏览器通过INTERNET来访问基于ASP脚本的应用时,WEB浏览器将向WEB服务器发出HTTP请求,WEB服务器分析、判断出该请求是ASP脚本的应用后,自动通过ISAPI接口调用ASP脚本的解释运行引擎(ASP.DLL)。ASP.DLL将从文件系统或内部缓冲区获取指定的ASP脚本文件,接着就进行语法分析并解释执行,处理结果将形成HTML格式的内容,通过WEB服务器“原路”返回给WEB浏览器,由WEB浏览器在客户端形成最终的结果呈现。
由此可见,ASP运行在服务器端,从浏览器上所看到的网页内容是在服务器上经过解释生成后传送过来的,浏览器不用负责对脚本进行处理,也无法得到支持其页面内容的脚本命令,并且,在服务器端没有实际的页面存在和出现,任何网页都是根据用户的需求来动态的实时生成和运行的,在用户访问结束后就自动消除。这样,既维护了开发人员的版权,系统的访问和运行安全性也可以得到保障。
另外,IIS支持虚拟目录,在服务器端建立虚拟目录可以隐藏有关站点目录结构的重要信息。首先,在浏览器中,客户通过选择“查看源代码”,就能获取页面的文件路径信息,如果在WEB页中使用物理路径,将暴露有关站点目录的重要信息,导致系统受到攻击。其次,只要两台机器具有相同的虚拟目录,就可以在不对页面代码做任何改动的情况下,将WEB页面从一台机器上移到另一台机器。还有,当WEB页面放置于虚拟目录下后,可以对目录设置不同的属性,如:Read、Excute、Script。Read表示将目录内容从IIS传递到浏览器。Excute可以使在该目录内执行可执行的文件。当需要使用ASP时,就必须将存放.asp文件的目录设置为“Excute(执行)”。建议在设置WEB站点时,将HTML文件同ASP文件分开放置在不同的目录下,然后将HTML子目录设置为“读”,将ASP子目录设置为“执行”,这样不仅方便了对WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序内容被客户或黑客所访问。
3 ASP Access的安全隐患及防范措施
ASP Access解决方案的安全隐患主要来源于脚本安全隐患、数据库安全隐患、权限管理隐患和木马漏洞隐患等方面。
3.1脚本安全隐患及处理方法
3.1.1 源代码的安全
ASP采用明文方式编写,是解释性语言,源代码的安全性明显低于编译语言,非法用户进入站点就可以获得源代码,甚至获取数据库中的所有信息(包括系统机密信息),还可能篡改库中信息,造成系统严重损坏;有些ASP编辑工具如UltraEdit在创建或修改一个ASP文件时,会自动生成一个以bak为扩展名的备份文件,此文件若被下载,同样会造成ASP源文件的泄露;对于租用服务器的用户,由于管理问题,也可以造成源代码泄露;有些软件甚至可以直接通过浏览器下载ASP代码。
为有效防止ASP源代码的泄露,可以对源文件进行加密,主要加密方法有两种:
1)采用“脚本最小化”原则,将重要的脚本部分使用组件技术将编程逻辑封装在DLL文件中;
2)使用微软提供的Script Encode对ASP页面进行加密。
使用组件技术需要对每段代码进行组件化,工作量较大;使用Script Encode只加密ASP代码,Html仍有很好的编辑性,可以使用网页编辑工具继续修改完善,操作比较简单,可以批量加密,实际操作中,推荐使用该种方法。
此外,上传程序之前要仔细检查,删除不必要的文档,特别是对以BAK为后缀的文件要格外小心。
3.1.2用户身份验证
ASP代码利用表单实现与用户的交互,相应的请求会反映在浏览器的地址栏中,如果不做安全设置,对地址栏中的内容稍加处理就会绕过验证直接进入页面。例如:若在页面设计时未作验证,浏览器中输入“……/page.asp?x=1”即可进入满足“x=1”的页面。所以,必须采取措施避免此类事故的发生。 为防止未经注册的用户绕过注册页面直接进入系统,ASP提供了Session对象,用以存储特定用户的Session信息,它在请求的整个生命周期中都有效,即使用户从一个WEB页面调到另一个WEB页面,该信息依然存在。利用Session对象记录用户的访问路径,进而实现页面访问控制。相关的程序代码如下:
<%
’读取用户输入的账号和密码
username=Request (“username”)
password =Request (“password”)
’检查username及password是否正确
If username<> “username” 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
% >
这样进入页面时,用户必须已经输入正确的用户名及密码,否则自动跳转到login. asp页面,要求用户输入用户名和密码。
3.1.3特殊字符攻击
输入框是黑客利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏,如果该输入框涉及数据查询,他们会利用特殊查询语句,得到更多的数据库数据,甚至表的全部,因此必须对输入框进行过滤。
例如上述密码验证,如果没有对接受的变量进行过滤直接带入数据库判断查询时,会造成SQL语句的逻辑问题。例如:
username=request("username")
password=request("password")
sql = "select * from user where username=’"
关键词:ASP;Access数据库;网站安全性
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)26-5854-04
随着网络对人们生活的影响日趋多元,交互性好、用户参与度高的动态网站成为主流需求,此外,动态网站的管理非常简单,几乎都是通过数据库来管理,只要通过操作数据库就能够实现对网站的维护,所以,目前的绝大多数网站都是动态网站。
1 ASP Access网站建设方案选择
目前,比较常用的WEB服务器软件有IIS和Apache,IIS支持ASP,运行在Windows环境下,普及性好;Apache支持PHP、JSP、CGI,可运行于多种平台。在网页编程语言方面,ASP技术简单易学,适合开发中小型网站;PHP技术开源,适于对版权要求高的网站;JSP技术安全性高,开发成本也较大,适于开发一些如银行金融系统等大型电子商务网站。
ASP是微软推出的一种基于脚本的网络编程语言,可以创建组合HTML页面、脚本命令和Active X组件的动态、交互式WEB应用程序,代码易学,编程环境简单,开发周期短,数据库存取方便。Access作为微软Office软件包的组成部分,普及性强,界面友好,操作简单。使用ASP Access技术建设的网站移植性极强,移植时几乎不需任何附加操作即可实现,对于租用虚拟空间的中小型网站来说,是首选的建设方案。
2 ASP的安全性策略
ASP脚本是一系列按特定语法(目前支持VBscript和JScript两种脚本语言)编写的,与标准HTML页面混合在一起的脚本所构成的文本格式的文件。基于ASP技术的网站的工作方式可以描述为:当客户端用户使用WEB浏览器通过INTERNET来访问基于ASP脚本的应用时,WEB浏览器将向WEB服务器发出HTTP请求,WEB服务器分析、判断出该请求是ASP脚本的应用后,自动通过ISAPI接口调用ASP脚本的解释运行引擎(ASP.DLL)。ASP.DLL将从文件系统或内部缓冲区获取指定的ASP脚本文件,接着就进行语法分析并解释执行,处理结果将形成HTML格式的内容,通过WEB服务器“原路”返回给WEB浏览器,由WEB浏览器在客户端形成最终的结果呈现。
由此可见,ASP运行在服务器端,从浏览器上所看到的网页内容是在服务器上经过解释生成后传送过来的,浏览器不用负责对脚本进行处理,也无法得到支持其页面内容的脚本命令,并且,在服务器端没有实际的页面存在和出现,任何网页都是根据用户的需求来动态的实时生成和运行的,在用户访问结束后就自动消除。这样,既维护了开发人员的版权,系统的访问和运行安全性也可以得到保障。
另外,IIS支持虚拟目录,在服务器端建立虚拟目录可以隐藏有关站点目录结构的重要信息。首先,在浏览器中,客户通过选择“查看源代码”,就能获取页面的文件路径信息,如果在WEB页中使用物理路径,将暴露有关站点目录的重要信息,导致系统受到攻击。其次,只要两台机器具有相同的虚拟目录,就可以在不对页面代码做任何改动的情况下,将WEB页面从一台机器上移到另一台机器。还有,当WEB页面放置于虚拟目录下后,可以对目录设置不同的属性,如:Read、Excute、Script。Read表示将目录内容从IIS传递到浏览器。Excute可以使在该目录内执行可执行的文件。当需要使用ASP时,就必须将存放.asp文件的目录设置为“Excute(执行)”。建议在设置WEB站点时,将HTML文件同ASP文件分开放置在不同的目录下,然后将HTML子目录设置为“读”,将ASP子目录设置为“执行”,这样不仅方便了对WEB的管理,而且最重要的提高了ASP程序的安全性,防止了程序内容被客户或黑客所访问。
3 ASP Access的安全隐患及防范措施
ASP Access解决方案的安全隐患主要来源于脚本安全隐患、数据库安全隐患、权限管理隐患和木马漏洞隐患等方面。
3.1脚本安全隐患及处理方法
3.1.1 源代码的安全
ASP采用明文方式编写,是解释性语言,源代码的安全性明显低于编译语言,非法用户进入站点就可以获得源代码,甚至获取数据库中的所有信息(包括系统机密信息),还可能篡改库中信息,造成系统严重损坏;有些ASP编辑工具如UltraEdit在创建或修改一个ASP文件时,会自动生成一个以bak为扩展名的备份文件,此文件若被下载,同样会造成ASP源文件的泄露;对于租用服务器的用户,由于管理问题,也可以造成源代码泄露;有些软件甚至可以直接通过浏览器下载ASP代码。
为有效防止ASP源代码的泄露,可以对源文件进行加密,主要加密方法有两种:
1)采用“脚本最小化”原则,将重要的脚本部分使用组件技术将编程逻辑封装在DLL文件中;
2)使用微软提供的Script Encode对ASP页面进行加密。
使用组件技术需要对每段代码进行组件化,工作量较大;使用Script Encode只加密ASP代码,Html仍有很好的编辑性,可以使用网页编辑工具继续修改完善,操作比较简单,可以批量加密,实际操作中,推荐使用该种方法。
此外,上传程序之前要仔细检查,删除不必要的文档,特别是对以BAK为后缀的文件要格外小心。
3.1.2用户身份验证
ASP代码利用表单实现与用户的交互,相应的请求会反映在浏览器的地址栏中,如果不做安全设置,对地址栏中的内容稍加处理就会绕过验证直接进入页面。例如:若在页面设计时未作验证,浏览器中输入“……/page.asp?x=1”即可进入满足“x=1”的页面。所以,必须采取措施避免此类事故的发生。 为防止未经注册的用户绕过注册页面直接进入系统,ASP提供了Session对象,用以存储特定用户的Session信息,它在请求的整个生命周期中都有效,即使用户从一个WEB页面调到另一个WEB页面,该信息依然存在。利用Session对象记录用户的访问路径,进而实现页面访问控制。相关的程序代码如下:
<%
’读取用户输入的账号和密码
username=Request (“username”)
password =Request (“password”)
’检查username及password是否正确
If username<> “username” 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
% >
这样进入页面时,用户必须已经输入正确的用户名及密码,否则自动跳转到login. asp页面,要求用户输入用户名和密码。
3.1.3特殊字符攻击
输入框是黑客利用的一个目标,他们可以通过输入脚本语言等对用户客户端造成损坏,如果该输入框涉及数据查询,他们会利用特殊查询语句,得到更多的数据库数据,甚至表的全部,因此必须对输入框进行过滤。
例如上述密码验证,如果没有对接受的变量进行过滤直接带入数据库判断查询时,会造成SQL语句的逻辑问题。例如:
username=request("username")
password=request("password")
sql = "select * from user where username=’"