ASP+Access网站安全解决方案汇总

本文我将就以ASP+Access为基础构建的网站可能存在的各种安全问题进行汇总讲解,给大家一个宏观上的认识。 攻击方法 在黑客学习过程中,我们很容易发现,国内80%的网站几乎使用的都是ASP,而小站的数目远远多于大型网站。对于小站,若是动态网站,国内普遍采

本文我将就以ASP+Access为基础构建的网站可能存在的各种安全问题进行汇总讲解,给大家一个宏观上的认识。 

攻击方法 
在黑客学习过程中,我们很容易发现,国内80%的网站几乎使用的都是ASP,而小站的数目远远多于大型网站。对于小站,若是动态网站,国内普遍采用ASP+Access结构,由于使用者数量众多,具有针对性,这里我们就来详细研究一下ASP+Access网站安全的解决方案。 
要建设一个安全的站,我们不能不了解目前针对ASP+Access网站的主流攻击手段,时下的攻击方法有XSS跨站、SQL注入、Cookie欺骗、%5C暴库、上传漏洞等。下面我们就针对这些问题做出相应对策。 
防范措施 
1)上传漏洞 
对于上传漏洞,一般的程序员都能做到在前台避免ASP、ASA、CER等类型的文件上传,所以对于前台的问题,这里不再赘述。 
2)XSS跨站 
针对XSS跨站,最大的作用就是HTML注入和获取Cookie。我想,更多的人是利用它来获取Cookie,取得Cookie后,目的只有一个,就是看网站是否有漏洞,得以让攻击方通过欺骗的方式进入后台。对于这种攻击方法,最好的防范措施就是把服务器端的验证改为Session。 
3)%5C暴库 
解决方案一:并不是所有的网站都存在%5C暴库的问题,对于这个问题,我们可以加入ON ERROR RESUME NEXT语句,让程序出错时仍继续向下执行,这样,数据库会相对安全。比如原来的conn.asp的文件内容如下: 
Response.buffer=true 
Const conndata=mydata/^%$!%25#%23&%78@data(+.asp 
'设置数据库路径 
Const backdata="mydata/#数据库备份#kycpanswpuzg1ok.asp" 
'设置数据库备份路径 
mydata="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(conndata) 
Set conn=Server.CreateObject("ADODB.Connection") 
conn.Open mydata 

为了防止暴库,我们改为如下的形式: 

Response.buffer=true 
Const conndata=mydata/^%$!%25#%23&%78@data(+.asp 
'设置数据库路径 
Const backdata="mydata/#数据库备份#kycpanswpuzg1ok.asp" 
'设置数据库备份路径 
On Error Resume Next 
mydata="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(conndata) 
Set conn=Server.CreateObject("ADODB.Connection") 
conn.Open mydata 

经过这样的设置后,就可以有效防止这种方法的攻击。 
我们再假设对方通过另外的途径获得了我们的数据库,想下载它,那我们怎么防止对方下载呢? 
有些朋友可能会认为,把数据库改成一个复杂的名字,如^%$!%25#%23&%78@data(+.asp就可以防下载了。其实,这样跟本就做不到防下载的目的,假如你的网站网址http://321cc.cn/data/^%$!%25#%23&%78@data(+.asp,把此地址直接复制到浏览器上,的确不能下载,但是经过URL编码后呢?我们只要把^%$!%25#%23&%78@data(+.asp用URLENCODE转换一下,得到%5E%25%24%21%2525%23%2523%26%2578%40data%28%2B%2Easp,再把完整的URLhttp://321cc.cn/data/%5E%25%24%21%2525%23%2523%26%2578%40data%28%2B%2Easp复制到迅雷,即可下载成功。 
如果再作点调整,将数据库加入防下载表,那么迅雷此时就无能为力了。我们首先建立一个表NotDown,设制类型为“备注”,然后在其中加入<% loop %>后,再将其类型设制为“OLE 对象”,如图1和图2所示。此时若在浏览器中下载数据库,将会出现如下所示的错误: 

 

 

Microsoft VBScript 编译器错误 错误 '800a03f6' 
缺少 'End' 
/iisHelp/common/500-100.asp,行242 
Microsoft VBScript 编译器错误 错误 '800a040e' 
'loop' 语句缺少 'do' 
/data/^%$!%25#%23&%78@data(+.asp,行227 
Loop 

同样,在迅雷和其它软件中也无法下载,这就是解决方案一。 
解决方案二:将数据库的地址设在非网站目录下,假如你网站的路径为“C:\Inetpub\wwwroot”,那么我们改数据库放于d:\data\^%$!%25#%23&%78@data(+.asp,conn.asp下,修改后的代码如下: 

Response.buffer=true 
Const conndata="d:\data\^%$!%25#%23&%78@data(+.asp" 
'设置数据库路径 
Const backdata="d:\data\#数据库备份#kycpanswpuzg1ok.asp" 
'设置数据库备份路径 
On Error Resume Next 
mydata="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&conndata 
Set conn=Server.CreateObject("ADODB.Connection") 
conn.Open mydata 

这样相对于前面的方法而言,更为安全,因为数据库已不能通过HTTP下载了。 

4)SQL注入 
     现在SQL注入很厉害,一个大型网站,由于文件众多,出现SQL注入漏洞也是情有可原的。现在多数人想到的办法是过滤掉危险的字符,如“‘”、“()”、“<>”以及Select、Update等字符,但是由于代码太多,很有可能忽略掉其中某些未经处理的外部数据。对此,我们可以换个角度来考虑。 
     我们可以想想,不管是SQL注入还是%5C暴库,其目的都是为了获取网站后台用户名和管理员密码。假如我们的密码是MD5加密的,那么对方将尝试进行暴力破解。如果把MD5加密算法作点修改,加密后,其密码散列将发生变化,使暴力破解失效。如果再用我们修改后的MD5加密算法对密匙进行二次MD5加密,安全性必将大大提高。 
下面我们就一起来修改MD5加密算法,其方法很简单。一份原MD5加密49至53行(16位加密)的代码如下: 
     RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) 

     If (lValue And &H80000000) Then 
         RShift = (RShift or (&H40000000 \ m_l2Power(iShiftBits - 1))) 
     End If 

注意RShift = (lValue And &H7FFFFFFE)这部分,我们只要将H7FFFFFFE稍微作点修改,暴力破解就失效了,比如我们修改为H7FB9DFAE。在作修改前,我们用原MD5算法加密“a”得到散列“c0f1b6a831c399e2”,http://www.cmd5.com网站上可以轻松破解,如图3所示。修改后,我们再次对“a”加密,得到散列“8016a044f35128b8”,现在我们再次 

 
     
     由此我们可以看出,暴力破解“a”已经失效。这样操作后,一个字母a都破解不出来了,要是我们对a进行二次、三次MD5加密,想想结果会是什么?破解的人别想得到结果!不过前提是对方不知道你修改的MD5算法,否则根据你修改的算法再编写工具,暴力破解是完全可行的。所以,你要保证你的MD5.asp安全,千万不要在程序上出现一个像新云网站管理系统downfile.asp中的下载任意文件的漏洞,不然,就别想着安全了。 
     对于上面的方法,在不过滤任何字符的情况下也可以算是安全的,让旁注者去破解吧。如果真要做得完全不过滤,还要注意一个地方,就是登录页login.asp。我们可以把用户名和密码都改为MD5的加密密码,然后把加密后的MD5和数据库中的MD5作比较。这样,绝对不可能直接利用’or’=’or’进行后台猜解的。比如我们原来的登录验证代码如下: 
sql=”select user,pwd from admin where uname=’”&request(“user”)&”’ and pwd=’”&request(“pwd”)&”’” 
conn.execute(sql) 
if not rs.eof and not rs.bof then 
response.redirect “manage.asp” 
else 
response.write “登陆失败” 
end if 

很明显,上面的代码存在注入。在不过滤的情况下,我们可以做如下的修改。 

sql=”select user,pwd from admin where uname=’”&md5(request(“user”))&”’ and pwd=’”&md5(request(“pwd”))&”’” 
conn.execute(sql) 
if not rs.eof and not rs.bof then 
response.redirect “manage.asp” 
else 
response.write “登陆失败” 
end if 

注意,原数据库中的用户名和密码都是经过MD5加密了的。现在就不存在注入了,因为’or’=’or’会被我们修改了的MD5加密,加密后已变成“4556995b8f421800”。 
经过上面几种方法的防范之后,现在还有惟一的一个问题,就是防溯雪之类软件的暴力破解。虽然说一个字母a经过我们修改的MD5加密,让针对MD5密匙破解的程序已失效,但是如果你后台用户名和密码就用一个a,用溯雪几秒钟就能破解进入后台。 
像溯雪这类POST和GET的攻击,我们可以这样修改代码,让Session来处理(这里不采用Cookie,因为Cookie很容易被伪造)。 

dim t1 
if session("times")>=3 then 
response.write("<script>alert('登录次数超过限制,不允许再尝试暴力破解');this.location.href='index.asp';</script>") 
Response.End 
sql=”select user,pwd from admin where uname=’”&md5(request(“user”))&”’ and pwd=’”&md5(request(“pwd”))&”’” 
conn.execute(sql) 
if not rs.eof and not rs.bof then 
response.redirect “manage.asp” 
else 
session("times")=session("times")+1 
t1=3-session("times") 
response.write ("<script>alert('登陆失败');</script>”) 
response.write (”<script>alert('你还有"&t1&"次机会'); history.back();”) 
end if 

改为以上代码后,只要连续提交次数超过3次,系统将自动转到首页,这样就有效的防范了溯雪之类的软件攻击,当然,我们还可以编个稍微复杂点的,直接封锁攻击者的IP。需要注意的是,以上的方法只对ASP+Access网站有效。 

总结 
我们可以想象,攻击者不管是通过SQL注入、XSS跨站、%5C暴库,其直接目的就是为了得到管理员的用户名和密码进入后台,然后通过上传漏洞,或备份数据库之类的方法得到一个WebShell。如果我们的MD5是无法破解的,只要我们程序不存在Cookie之类的欺骗和下载任意文件的漏洞,攻击者前面作的很多事都将会是徒劳的。网站管理员千万要记住,密码是敏感的,可别被社会工程学给害了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
asp.net编程思想,面向对象的编程思想在ASP.NET中的运用,在ASP.NET中面向对象的编程思想-NET教程,面向对象编程,面向对象的编程思想在ASP.NET中的运用b,Duwamish 7.0 结构分为四个逻辑层: • Web 层 Web 层为客户端提供对应用程序的访问。这一层是作为 Duwamish.sln 解决方案文件中的 Web 项目实现的。Web 层由 ASP .NET Web 窗体和代码隐藏文件组成。Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理。 • 业务外观层 业务外观层为 Web 层提供处理帐户、类别浏览和购书的界面。这一层是作为 Duwamish.sln 解决方案文件中的 BusinessFacade 项目实现的。业务外观层用作隔离层,它将用户界面与各种业务功能的实现隔离开来。除了低级系统和支持功能之外,对数据库服务器的所有调用都是通过此程序集进行的。 • 业务规则层 业务规则层是作为 Duwamish.sln 解决方案文件中的 BusinessRules 项目实现的,它包含各种业务规则和逻辑的实现。业务规则完成如客户帐户和书籍订单的验证这样的任务。 • 数据访问层 数据访问层为业务规则层提供数据服务。这一层是作为 Duwamish.sln 解决方案文件中的 DataAccess 项目实现的。 注意 有关 Duwamish 7.0 Visual Studio .NET 解决方案文件的进一步信息,请参阅Solution File and Environment Settings。 除了上述四个逻辑层外,Duwamish 7.0 还包含封装在 Duwamish.sln 解决方案文件中的 Common 项目内的共享函数。Common 层包含用于在各层间传递信息的数据集。Common 项目还包含 Duwamish.sln 解决方案文件中的 SystemFramework 项目内的应用程序配置和跟踪类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值