论文部分内容阅读
1 引言
随着Internet的发展,Web技术日新月异,人们已经不再满足于静态HTML技术,更多的是要求动态、交互的网络技术。继通用网关接口(CGI)之后,微软推出的IIS+ASP的解决方案作为一种典型的服务器端网页设计技术,被广泛应用在网上银行、电子商务、网上调查、网上查询、BBS、搜索引擎等各种互联网应用中。与此同时,以Microsoft的桌面数据库Access和网络数据库SQL Server为代表的数据库系统,由于具有操作简单、界面友好等特点,具有较大的用户群体。就国内现状来看,大多数网站使用的脚本语言,用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%,由于开发者代码编写的过程考虑不够周全,往往忽略程序代码的安全性,而使程序脚本被注入也成为必然。
2 安全隐患分析
2.1源代码安全性隐患
由于ASP程序采用非编译性语言,大大降低了程序源代码的安全性。如果黑客侵入站点,就可以获得ASP源代码;同时对于租用服务器的用户,因个别服务器出租商的职业道德问题,也会造成ASP应用程序源代码泄露。
2.2被忽视的注册验证问题
ASP代码使用表单实现交互,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“...page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页面。因此,在验证或注册页面中,必须采取特殊措施来避免此类问题的产生。
2.3 SQL注入攻击
所谓SQL注入(SQL Injection),就是利用某些WEB应用程序对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交一段特殊的数据库查询代码,根据程序返回的结果,达到收集程序、数据库及服务器的信息,获取想得到而通过正常途径无法得到的资料,使整个网站服务器失控甚至对网站进行破坏性攻击的目的。
程序存在SQL注入,追其原因,是因为代码或者编码的不完善。但说到底,是程序员的惰性。代码的不完善,往往是因为在程序编写的过程中,没有考虑到代码的健壮性及安全性的结果。
当然,程序运行环境的先天缺陷也是人为的,这种现象无法完全杜绝避免。从攻击者的角度来看,使用SQL注入能够避免绝大多数防火墙的防御,不留攻击痕迹,攻击手法多种多样,因此才会导致SQL注入攻击手段的兴起。
3 提高网站安全性的方法
3.1对ASP页面进行加密
为有效地防止ASP源代码泄露,可以对ASP页面进行加密。我们曾采用两种方法对ASP页面进行加密:一是使用组件技术将编程逻辑封装入DLL之中;二是使用微软的Script Encoder对ASP页面进行加密。使用组件技术存在的主要问题是每段代码均需组件化,操作比较繁琐,工作量较大。而使用Encoder对ASP页面进行加密,操作简单、收效良好。Script Encoder的运行程序是SCRENC.EXE,使用方法是:
SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
其中:/s 是屏蔽屏幕输出;/f 指定输出文件是否覆盖同名输入文件;/xl 指是否在.asp文件的顶部添加@Language指令;/l defLanguag指定缺省的脚本语言; /e defExtension 指定待加密文件的扩展名。
3.2 注册验证和加密
为防止未经注册的用户绕过注册界面直接进入应用系统,我们采用Session对象进行注册验证。例如:我们制作了下面的注册页面。
设计要求:注册成功后系统启动hrmis.asp?page=1页面。假设不采用Session对象进行注册验证,则用户在浏览器中敲入“URL/hrmis.asp?page=1”即可绕过注册界面,直接进入系统。
在此,利用Session对象进行注册验证:
“hrmis" Or Password "password" Then
Response.Write “账号错误!”
Response.End
End If
’将Session 对象设置为通过验证状态
Session("Passed") = True
%>
进入应用程序后,首先进行验证。
程序员要做的另一件事是给用户密码加密,一般用MD5加密较好。MD5没有反向算法,不能解密,人家即使知道经加密后存在数据库里的像乱码一样的密码,他也没办法知道原始密码。
3.3检验敏感字符/字符串
有些程序员采取针对一些敏感的字符串,主要是对SQL命令或关键字进行处理,把它们从客户端提交的信息中找到、删除,并把剩余的信息默认为安全信息写入数据库。虽然在一定程度上有效,但有“治标不治本”的嫌疑,举例来说明其弱点,当客户端的输入为“…ccmdmcmdd…”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是“…cmd…”。新的攻击方式正在被不断发现,只要允许服务端程序使用这些提交信息,就总有受到攻击的可能。可见这个方法是不健全的,稍加变化即可躲过检查。
其实,最好的方法就是一旦检测到敏感字符/字符串,只要把它们屏蔽,并针对数据库的操作即行中止。
3.4屏蔽出错信息
精心配置IIS,打造一个安全Web服务器是一项科学严谨的工作,事关网络安全之首要,也是服务器管理员的神圣职责,具体做法请参见有关资料。针对防范SQL注入要做的主要是把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,即http 500错误,再小心设置数据库用户权限。这样人家就无法入侵了。首先把500:100这个错误的默认提示页面
C:\ WINDOWS\ Help\ iisHelp\ common
500-100.asp
改成
C:\ WINDOW \Help \iisHelp \Common
500.htm。
4 结束语
网络攻击是安全领域的新事物,但发展快危害大,而且经常被一些网站开发或网页设计人员所忽视。近年来,给网站的稳定运行带来了很大的影响,我们提高安全意识,在设计开发和网站运行的过程中随时注意查堵网站安全漏洞,在很大程度上提高网站运行的安全性。
参考文献
[1]周天思,孙明丽,庞娅娟.ASP开发技术大全[M].人民邮电出版社,2007.
[2]薛小龙.ASP典型系统实战与解析[M].北京:电子工业出版社,2007.
[3]张友生,米安然.计算机病毒与木马程序剖析[M].北京科海电子出版社,2003.
随着Internet的发展,Web技术日新月异,人们已经不再满足于静态HTML技术,更多的是要求动态、交互的网络技术。继通用网关接口(CGI)之后,微软推出的IIS+ASP的解决方案作为一种典型的服务器端网页设计技术,被广泛应用在网上银行、电子商务、网上调查、网上查询、BBS、搜索引擎等各种互联网应用中。与此同时,以Microsoft的桌面数据库Access和网络数据库SQL Server为代表的数据库系统,由于具有操作简单、界面友好等特点,具有较大的用户群体。就国内现状来看,大多数网站使用的脚本语言,用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%,由于开发者代码编写的过程考虑不够周全,往往忽略程序代码的安全性,而使程序脚本被注入也成为必然。
2 安全隐患分析
2.1源代码安全性隐患
由于ASP程序采用非编译性语言,大大降低了程序源代码的安全性。如果黑客侵入站点,就可以获得ASP源代码;同时对于租用服务器的用户,因个别服务器出租商的职业道德问题,也会造成ASP应用程序源代码泄露。
2.2被忽视的注册验证问题
ASP代码使用表单实现交互,而相应的内容会反映在浏览器的地址栏中,如果不采用适当的安全措施,只要记下这些内容,就可以绕过验证直接进入某一页面。例如在浏览器中敲入“...page.asp?x=1”,即可不经过表单页面直接进入满足“x=1”条件的页面。因此,在验证或注册页面中,必须采取特殊措施来避免此类问题的产生。
2.3 SQL注入攻击
所谓SQL注入(SQL Injection),就是利用某些WEB应用程序对用户输入数据的合法性检测不严或不检测的特点,故意从客户端提交一段特殊的数据库查询代码,根据程序返回的结果,达到收集程序、数据库及服务器的信息,获取想得到而通过正常途径无法得到的资料,使整个网站服务器失控甚至对网站进行破坏性攻击的目的。
程序存在SQL注入,追其原因,是因为代码或者编码的不完善。但说到底,是程序员的惰性。代码的不完善,往往是因为在程序编写的过程中,没有考虑到代码的健壮性及安全性的结果。
当然,程序运行环境的先天缺陷也是人为的,这种现象无法完全杜绝避免。从攻击者的角度来看,使用SQL注入能够避免绝大多数防火墙的防御,不留攻击痕迹,攻击手法多种多样,因此才会导致SQL注入攻击手段的兴起。
3 提高网站安全性的方法
3.1对ASP页面进行加密
为有效地防止ASP源代码泄露,可以对ASP页面进行加密。我们曾采用两种方法对ASP页面进行加密:一是使用组件技术将编程逻辑封装入DLL之中;二是使用微软的Script Encoder对ASP页面进行加密。使用组件技术存在的主要问题是每段代码均需组件化,操作比较繁琐,工作量较大。而使用Encoder对ASP页面进行加密,操作简单、收效良好。Script Encoder的运行程序是SCRENC.EXE,使用方法是:
SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] inputfile outputfile
其中:/s 是屏蔽屏幕输出;/f 指定输出文件是否覆盖同名输入文件;/xl 指是否在.asp文件的顶部添加@Language指令;/l defLanguag指定缺省的脚本语言; /e defExtension 指定待加密文件的扩展名。
3.2 注册验证和加密
为防止未经注册的用户绕过注册界面直接进入应用系统,我们采用Session对象进行注册验证。例如:我们制作了下面的注册页面。
设计要求:注册成功后系统启动hrmis.asp?page=1页面。假设不采用Session对象进行注册验证,则用户在浏览器中敲入“URL/hrmis.asp?page=1”即可绕过注册界面,直接进入系统。
在此,利用Session对象进行注册验证:
“hrmis" Or Password "password" Then
Response.Write “账号错误!”
Response.End
End If
’将Session 对象设置为通过验证状态
Session("Passed") = True
%>
进入应用程序后,首先进行验证。
程序员要做的另一件事是给用户密码加密,一般用MD5加密较好。MD5没有反向算法,不能解密,人家即使知道经加密后存在数据库里的像乱码一样的密码,他也没办法知道原始密码。
3.3检验敏感字符/字符串
有些程序员采取针对一些敏感的字符串,主要是对SQL命令或关键字进行处理,把它们从客户端提交的信息中找到、删除,并把剩余的信息默认为安全信息写入数据库。虽然在一定程度上有效,但有“治标不治本”的嫌疑,举例来说明其弱点,当客户端的输入为“…ccmdmcmdd…”时,在对敏感字符串“cmd”替换删除以后,剩下的字符正好是“…cmd…”。新的攻击方式正在被不断发现,只要允许服务端程序使用这些提交信息,就总有受到攻击的可能。可见这个方法是不健全的,稍加变化即可躲过检查。
其实,最好的方法就是一旦检测到敏感字符/字符串,只要把它们屏蔽,并针对数据库的操作即行中止。
3.4屏蔽出错信息
精心配置IIS,打造一个安全Web服务器是一项科学严谨的工作,事关网络安全之首要,也是服务器管理员的神圣职责,具体做法请参见有关资料。针对防范SQL注入要做的主要是把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,即http 500错误,再小心设置数据库用户权限。这样人家就无法入侵了。首先把500:100这个错误的默认提示页面
C:\ WINDOWS\ Help\ iisHelp\ common
500-100.asp
改成
C:\ WINDOW \Help \iisHelp \Common
500.htm。
4 结束语
网络攻击是安全领域的新事物,但发展快危害大,而且经常被一些网站开发或网页设计人员所忽视。近年来,给网站的稳定运行带来了很大的影响,我们提高安全意识,在设计开发和网站运行的过程中随时注意查堵网站安全漏洞,在很大程度上提高网站运行的安全性。
参考文献
[1]周天思,孙明丽,庞娅娟.ASP开发技术大全[M].人民邮电出版社,2007.
[2]薛小龙.ASP典型系统实战与解析[M].北京:电子工业出版社,2007.
[3]张友生,米安然.计算机病毒与木马程序剖析[M].北京科海电子出版社,2003.