《最新ASP+Access网站安全解决方案汇总.doc》由会员分享,可在线阅读,更多相关《最新ASP+Access网站安全解决方案汇总.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateASP+Access网站安全解决方案汇总ASP+Access网站安全解决方案汇总由于前段时间忙于找工作,很久都没有给黑防写稿了,现在工作有着落了,继续来支持黑防。本文我将就以ASP+Access为基础构建的网站可能存在的各种安全问题进行汇总讲解,给大家一个宏观上的认识。 攻击方法 在黑客学习过程中,我们很容易发现,国内80%的网站几乎使用的都是ASP,而小站的数目远远
2、多于大型网站。对于小站,若是动态网站,国内普遍采用ASPAccess结构,由于使用者数量众多,具有针对性,这里我们就来详细研究一下ASPAccess网站安全的解决方案。 要建设一个安全的站,我们不能不了解目前针对ASPAccess网站的主流攻击手段,时下的攻击方法有XSS跨站、SQL注入、Cookie欺骗、%5C暴库、上传漏洞等。下面我们就针对这些问题做出相应对策。 防范措施 1)上传漏洞 对于上传漏洞,一般的程序员都能做到在前台避免ASP、ASA、CER等类型的文件上传,所以对于前台的问题,这里不再赘述。 2)XSS跨站 针对XSS跨站,最大的作用就是HTML注入和获取Cookie。我想,更
3、多的人是利用它来获取Cookie,取得Cookie后,目的只有一个,就是看网站是否有漏洞,得以让攻击方通过欺骗的方式进入后台。对于这种攻击方法,最好的防范措施就是把服务器端的验证改为Session。 3)%5C暴库 解决方案一:并不是所有的网站都存在%5C暴库的问题,对于这个问题,我们可以加入ON ERROR RESUME NEXT语句,让程序出错时仍继续向下执行,这样,数据库会相对安全。比如原来的conn.asp的文件内容如下: Response.buffer=true Const conndata=mydata/%$!%25#%23&%78data(+.asp 设置数据库路径 Const
4、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&%78data(+.asp 设置数据库路径 Const backd
5、ata=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 经过这样的设置后,就可以有效防止这种方法的攻击。 我们再假设对方通过另外的途径获得了我们的数据库,想下载它,那我们怎么防止对方下载呢? 有些朋友可能会认为,把数据库改成一个复杂的
6、名字,如%$!%25#%23&%78data(+.asp就可以防下载了。其实,这样跟本就做不到防下载的目的,假如你的网站网址: 如果再作点调整,将数据库加入防下载表,那么迅雷此时就无能为力了。我们首先建立一个表NotDown,设制类型为“备注”,然后在其中加入后,再将其类型设制为“OLE 对象”,如图1和图2所示。此时若在浏览器中下载数据库,将会出现如下所示的错误: Microsoft VBScript 编译器错误 错误 800a03f6 缺少 End /iisHelp/common/500-100.asp,行242 Microsoft VBScript 编译器错误 错误 800a040e l
7、oop 语句缺少 do /data/%$!%25#%23&%78data(+.asp,行227 Loop 同样,在迅雷和其它软件中也无法下载,这就是解决方案一。 解决方案二:将数据库的地址设在非网站目录下,假如你网站的路径为“C:Inetpubwwwroot”,那么我们改数据库放于d:data%$!%25#%23&%78data(+.asp,conn.asp下,修改后的代码如下: Response.buffer=true Const conndata=d:data%$!%25#%23&%78data(+.asp 设置数据库路径 Const backdata=d:data#数据库备份#kycpa
8、nswpuzg1ok.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、U
9、pdate等字符,但是由于代码太多,很有可能忽略掉其中某些未经处理的外部数据。对此,我们可以换个角度来考虑。 我们可以想想,不管是SQL注入还是%5C暴库,其目的都是为了获取网站后台用户名和管理员密码。假如我们的密码是MD5加密的,那么对方将尝试进行暴力破解。如果把MD5加密算法作点修改,加密后,其密码散列将发生变化,使暴力破解失效。如果再用我们修改后的MD5加密算法对密匙进行二次MD5加密,安全性必将大大提高。 下面我们就一起来修改MD5加密算法,其方法很简单。一份原MD5加密49至53行(16位加密)的代码如下: RShift = (lValue And &H7FFFFFFE) m_l2P
10、ower(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”, 网站上可以轻松破解,如图3所示。修改后,我们再次对“a”加密,得到散列“8016a044f35128b8”,现在我
11、们再次 由此我们可以看出,暴力破解“a”已经失效。这样操作后,一个字母a都破解不出来了,要是我们对a进行二次、三次MD5加密,想想结果会是什么?破解的人别想得到结果!不过前提是对方不知道你修改的MD5算法,否则根据你修改的算法再编写工具,暴力破解是完全可行的。所以,你要保证你的MD5.asp安全,千万不要在程序上出现一个像新云网站管理系统downfile.asp中的下载任意文件的漏洞,不然,就别想着安全了。 对于上面的方法,在不过滤任何字符的情况下也可以算是安全的,让旁注者去破解吧。如果真要做得完全不过滤,还要注意一个地方,就是登录页login.asp。我们可以把用户名和密码都改为MD5的加密
12、密码,然后把加密后的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 很明显,上面的代码存在注入。在不过滤的情况下,我
13、们可以做如下的修改。 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加密,加密后已变成“4556995b
14、8f421800”。 经过上面几种方法的防范之后,现在还有惟一的一个问题,就是防溯雪之类软件的暴力破解。虽然说一个字母a经过我们修改的MD5加密,让针对MD5密匙破解的程序已失效,但是如果你后台用户名和密码就用一个a,用溯雪几秒钟就能破解进入后台。 像溯雪这类POST和GET的攻击,我们可以这样修改代码,让Session来处理(这里不采用Cookie,因为Cookie很容易被伪造)。 dim t1 if session(times)=3 then response.write(alert(登录次数超过限制,不允许再尝试暴力破解);this.location.href=index.asp;) R
15、esponse.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 (alert(登陆失败);”)response.write (”al
16、ert(你还有&t1&次机会); history.back();”) end if 改为以上代码后,只要连续提交次数超过3次,系统将自动转到首页,这样就有效的防范了溯雪之类的软件攻击,当然,我们还可以编个稍微复杂点的,直接封锁攻击者的IP。需要注意的是,以上的方法只对ASP+Access网站有效。 总结 我们可以想象,攻击者不管是通过SQL注入、XSS跨站、%5C暴库,其直接目的就是为了得到管理员的用户名和密码进入后台,然后通过上传漏洞,或备份数据库之类的方法得到一个WebShell。如果我们的MD5是无法破解的,只要我们程序不存在Cookie之类的欺骗和下载任意文件的漏洞,攻击者前面作的很多事都将会是徒劳的。网站管理员千万要记住,密码是敏感的,可别被社会工程学给害了-