安全防護(hù) 腳本攻擊防范策略完全篇
發(fā)布日期:2022-01-28 19:55 | 文章來源:源碼中國
網(wǎng)絡(luò)上的SQL Injection 漏洞利用攻擊,JS腳本,HTML腳本攻擊似乎逾演逾烈。陸續(xù)的很多站點都被此類攻擊所困擾,并非像主機(jī)漏洞那樣可以當(dāng)即修復(fù),來自于WEB的攻擊方式使我們在防范或者是修復(fù)上都帶來了很大的不便。一個站長最大的痛苦莫過于此。自己的密碼如何如何強(qiáng)壯卻始終被攻擊者得到,但如何才能做到真正意義上的安全呢?第一,別把密碼和你的生活聯(lián)系起來;第二,Supermaster的PWD最好只有你自己知道;第三,絕對要完善好你的網(wǎng)站程序。然而怎樣才能完善,這將是我們此文的最終目的?! “踩雷o(hù),如何做到安全防護(hù)?想要防護(hù)就要知道對方是如何進(jìn)行攻擊。有很多文章都在寫如何攻下某站點,其實其攻擊的途徑也不過是以下幾種:
1. 簡單的腳本攻擊
此類攻擊應(yīng)該屬于無聊搗亂吧。比如****:alert(); [/table]等等,由于程序上過濾的不嚴(yán)密,使攻擊者既得不到什么可用的,但又使的他可以進(jìn)行搗亂的目的。以目前很多站點的免費(fèi)服務(wù),或者是自身站點的程序上也是有過濾不嚴(yán)密的問題。
2. 危險的腳本攻擊
這類腳本攻擊已經(jīng)過度到可以竊取管理員或者是其他用戶信息的程度上了。比如大家都知道的cookies竊取,利用腳本對客戶端進(jìn)行本地的寫操作等等。
3. Sql Injection 漏洞攻擊
可以說,這個攻擊方式是從動網(wǎng)論壇和BBSXP開始的。利用SQL特殊字符過濾的不嚴(yán)密,而對數(shù)據(jù)庫進(jìn)行跨表查詢的攻擊。比如:
http://127.0.0.1/forum/showuser.asp?id=999 and 1=1
http://127.0.0.1/forum/showuser.asp?id=999 and 1=2
http://127.0.0.1/forum/showuser.asp?id=999 and 0(select count(*) from admin)
http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp_'+
'cmdshell' exec @a 'dir c:'---&aid=9
得到了管理員的密碼也就意味著已經(jīng)控制的整站,雖然不一定能得到主機(jī)的權(quán)限,但也為這一步做了很大的鋪墊。類似的SQL Injection攻擊的方式方法很多,對不同的文件過濾不嚴(yán)密所采取的查詢方式也不同。所以說想做好一個完整的字符過濾程序不下一凡功夫是不可能的。
4. 遠(yuǎn)程注入攻擊
某站點的所謂的過濾只是在提交表格頁上進(jìn)行簡單的JS過濾。對于一般的用戶來說,你大可不必防范;對早有預(yù)謀的攻擊者來說,這樣的過濾似乎根本沒作用。我們常說的POST攻擊就是其中一例。通過遠(yuǎn)程提交非法的信息以達(dá)到攻擊目的。
通過上面的攻擊方法的介紹,我們大致的了解了攻擊者的攻擊途徑,下面我們就開始重點的介紹,如何有效的防范腳本攻擊!
讓我們還是從最簡單的開始:
防范腳本攻擊
JS腳本 和HTML腳本攻擊的防范其實很簡單:server.HTMLEncode(Str)完事。當(dāng)然你還不要大叫,怎么可能?你讓我把全站類似都加過濾我還不累死?為了方便的過濾,我們只需要將HTML腳本和JS腳本中的幾個關(guān)鍵字符過濾掉就可以了:程序體(1)如下:
'以下是過濾函數(shù)
<%
function CHK(fqyString)
fqyString = replace(fqyString, ">", ">")
fqyString = replace(fqyString, "<", "<")
fqyString = replace(fqyString, "&#", "&")
fqyString = Replace(fqyString, CHR(32), " ")
fqyString = Replace(fqyString, CHR(9), " ")
fqyString = Replace(fqyString, CHR(34), """)
fqyString = Replace(fqyString, CHR(39), "'")
fqyString = Replace(fqyString, CHR(13), "")
fqyString = Replace(fqyString, CHR(10) & CHR(10), "</P><P> ")
fqyString = Replace(fqyString, CHR(10), "
")
CHK = fqyString
end function
%>
'以下是應(yīng)用實例
<%=CHK(Username)%>
Username=CHK(replace(request("username"),"'",""))
使用Include把函數(shù)寫在公有頁面上,這樣效率是最好的。
程序體(1)
另外,值得我們注意的是,很多站點在用戶注冊,或者是用戶資料修改的頁面上也缺少腳本的過濾,或者是只在其中之一進(jìn)行過濾,注冊進(jìn)入后修改資料仍然可以進(jìn)行腳本攻擊。對用戶提交的數(shù)據(jù)進(jìn)行檢測和過濾,程序體(2) 如下:
'以下是過濾函數(shù)
If Instr(request("username"),"=")>0 or
Instr(request("username"),"%")>0 or
Instr(request("username"),chr(32))>0 or
Instr(request("username"),"?")>0 or
Instr(request("username"),"&")>0 or
Instr(request("username"),";")>0 or
Instr(request("username"),",")>0 or
Instr(request("username"),"'")>0 or
Instr(request("username"),"?")>0 or
Instr(request("username"),chr(34))>0 or
Instr(request("username"),chr(9))>0 or
Instr(request("username")," ")>0 or
Instr(request("username"),"$")>0 or
Instr(request("username"),">")>0 or
Instr(request("username"),""
Bword(3)="16 then
Response.write " 你要做什么?"
Response.end
End if
程序體(7)
為什么我們這里以及過濾了單引號,怎么還要再次取一個長度限制呢?不多說了,看看4ngel的文章先8 then ' 為什么取長度上面程序中已經(jīng)說明
response.write ""
response.end
else
If request("id")"" then '取不為空則是為了防止一些程序頁中會出現(xiàn)空值情況,如果不在這里做判斷,程序會校驗出錯.
If IsNumeric(request("id"))=False then ' 風(fēng)清揚(yáng)修改 ID數(shù)據(jù)監(jiān)控程式
response.write ""
response.end
end if
end if
end if
程序體(8)
由于我個人的編程習(xí)慣,我喜歡將所有的數(shù)據(jù)檢驗程序全部保留到整站的公用程序中,比如:conn.asp啦,只需要寫一次就可以修復(fù)全站的問題.
說到這里,我提一點關(guān)于攻擊的問題,就是跑用戶密碼或者是用戶名,一般常用的就是
....../show.asp?id=1 and 0(select count(*) from admin where id=3 and left(username,1)='a')
這樣去一個一個嘗試,當(dāng)然我們不能在這里提什么Perl程序去跑密碼,程序是別人寫,要自己知道原理.這里我只是想給個比較方便的辦法就是取ASC碼范圍.這個要比單獨(dú)跑要快很多.不論是是字母,數(shù)字,漢字,特殊字符,他們總會有對應(yīng)的ASC碼,用以下辦法:
....../show.asp?id=1 and 0(select count(*) from admin where id=3 and asc(right(left(username
e,3),1)) between 1 and 10000) 剩下的就隨你了,一般的從97到122就可以啦,字母嘛,很快D.呵呵,有人想用mid 函數(shù)當(dāng)然也是不錯 asc(mid(username,2,1)) between 1 and 10000 也成.
如何更加有效的防止SQL注入攻擊?我們將在下面的文章中具體提到!
防范遠(yuǎn)程注入攻擊
這類攻擊在以前應(yīng)該是比較常見的攻擊方式,比如POST攻擊,攻擊者可以隨便的改變要提交的數(shù)據(jù)值已達(dá)到攻擊目的.又如:COOKIES 的偽造,這一點更值得引起程序編寫者或站長的注意,不要使用COOKIES來做為用戶驗證的方式,否則你和把鑰匙留給賊是同一個道理.
比如:
If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd")
="fqy#e3i5.com" then
........more.........
End if
我想各位站長或者是喜好寫程序的朋友千萬別出這類錯誤,真的是不可饒恕.偽造COOKIES 都多少年了,你還用這樣的就不能怪別人跑你的密碼.涉及到用戶密碼或者是用戶登陸時,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一個信息,SessionID,它的隨機(jī)值是64位的,要猜解它,不可能.例:
if not (rs.BOF or rs.eof) then
login="true"
Session("username"&sessionID) = Username
Session("password"& sessionID) = Password
'Response.cookies("username")= Username
'Response.cookies("Password")= Password
下面我們來談?wù)勅绾畏婪哆h(yuǎn)程注入攻擊,一般的攻擊都是將單表提交文件拖到本地,將Form ACTION="chk.asp" 指向你服務(wù)器中處理數(shù)據(jù)的文件即可.如果你全部的數(shù)據(jù)過濾都在單表頁上,那么恭喜你,你將已經(jīng)被腳本攻擊了.
怎么才能制止這樣的遠(yuǎn)程攻擊?好辦,請看代碼如下: 程序體(9)
'個人感覺上面的代碼過濾不是很好,有一些外部提交竟然還能堂堂正正的進(jìn)來,于是再寫一個.
'這個是過濾效果很好,建議使用.
if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then
response.write "處理 URL 時服務(wù)器上出錯。
如果您是在用任何手段攻擊服務(wù)器,那你應(yīng)該慶幸,你的所有操作已經(jīng)被服務(wù)器記錄,我們會第一時間通知公安局與國家安全部門來調(diào)查你的IP. "
response.end
end if
程序體(9)
本以為這樣就萬事大吉了,在表格頁上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越來什么.你別忘了,攻擊者可以突破sql注入攻擊時輸入框長度的限制.寫一個SOCKET程序改變HTTP_REFERER?我不會。網(wǎng)上發(fā)表了這樣一篇文章:
------------len.reg-----------------
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\擴(kuò)展(&E)]
@="C:\Documents and Settings\Administrator\桌面\len.htm"
"contexts"=dword:00000004
-----------end----------------------
-----------len.htm------------------
<script language=vbs>
set srcevent = external.menuarguments.event
set doc=external.menuarguments.document
set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )
if ele.type ="text" or ele.type="password" then
ele.maxlength=200
ele.size=200
end if
</script>
----------end-----------------------
用法:先把len.reg導(dǎo)入注冊表(注意文件路徑)
然后把len.htm拷到注冊表中指定的地方.
打開網(wǎng)頁,光標(biāo)放在要改變長度的輸入框上點右鍵,看多了一個叫擴(kuò)展的選項了吧
單擊搞定! 后記:同樣的也就可以對付那些限制輸入內(nèi)容的腳本了.
怎么辦?我們的限制被饒過了,所有的努力都白費(fèi)了?不,舉起你de鍵盤,說不。讓我們繼續(xù)回到腳本字符的過濾吧,他們所進(jìn)行的注入無非就是進(jìn)行腳本攻擊。我們把所有的精力全都用到ACTION以后的頁面吧,在chk.asp頁中,我們將非法的字符全部過濾掉,結(jié)果如何?我們只在前面虛晃一槍,叫他們?nèi)ジ淖员戆桑?dāng)他們改完才會發(fā)現(xiàn),他們所做的都是那么的徒勞。
ASP木馬
已經(jīng)講到這里了,再提醒各位論壇站長一句,小心你們的文件上傳:為什么論壇程序被攻破后主機(jī)也隨之被攻擊者占據(jù)。原因就在......對!ASP木馬!一個絕對可惡的東西。病毒么?非也.把個文件隨便放到你論壇的程序中,您老找去吧。不吐血才怪哦。如何才能防止ASP木馬被上傳到服務(wù)器呢?方法很簡單,如果你的論壇支持文件上傳,請設(shè)定好你要上傳的文件格式,我不贊成使用可更改的文件格式,直接從程序上鎖定,只有圖象文件格式,和壓縮文件就完全可以,多給自己留點方便也就多給攻擊者留點方便。怎么判斷格式,我這里收集了一個,也改出了一個,大家可以看一下: 程序體(10)
'判斷文件類型是否合格
Private Function CheckFileExt (fileEXT)
dim Forumupload
Forumupload="gif,jpg,bmp,jpeg"
Forumupload=split(Forumupload,",")
for i=0 to ubound(Forumupload)
if lcase(fileEXT)=lcase(trim(Forumupload(i))) then
CheckFileExt=true
exit Function
else
CheckFileExt=false
end if
next
End Function
'驗證文件內(nèi)容的合法性
set MyFile = server.CreateObject ("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile (sFile, 1) ' 讀取文本文件
sTextAll = lcase(MyText.ReadAll): MyText.close
'判斷用戶文件中的危險操作
sStr ="8|.getfolder|.createfolder|.deletefolder|.createdirectory|
.deletedirectory"
sStr = sStr & "|.saveas|wscript.shell|script.encode"
sNoString = split(sStr,"|")
for i = 1 to sNoString(0)
if instr(sTextAll, sNoString(i)) <> 0 then
sFile = Upl.Path & sFileSave: fs.DeleteFile sFile
Response.write "<center>
<big>"& sFileSave &"文件中含有與操作目錄等有關(guān)的命令"&_
"
<font color=red>"& mid(sNoString(i),2) &"</font>,為了安全原因,<b>不能上傳。<b>"&_
"</big></center></html>"
Response.end
end if
next
程序體(10)
把他們加到你的上傳程序里做一次驗證,那么你的上傳程序安全性將會大大提高.
什么?你還不放心?拿出殺手锏,請你的虛擬主機(jī)服務(wù)商來幫忙吧。登陸到服務(wù)器,將PROG ID 中的"shell.application"項和"shell.application.1"項改名或刪除。再將"WSCRIPT.SHELL"項和"WSCRIPT.SHELL.1"這兩項都要改名或刪除。呵呵,我可大膽的說,國內(nèi)可能近半以上的虛擬主機(jī)都沒改過。只能慶幸你們的用戶很合作,否則......我刪,我刪,我刪刪刪......
小結(jié)
如何更好的達(dá)到防范SQL Injection的攻擊?這里我個人給推薦幾個辦法,第一,免費(fèi)程序不要真的就免費(fèi)用,既然你可以共享原碼,那么攻擊者一樣可以分析代碼。如果有能力的站長最好還是更改一下數(shù)據(jù)庫表名,字段名,只修改關(guān)鍵的admin, username, password就可以了,比如forum_upasswd 這樣的字段名誰能猜到?如果你猜到了,最好趕快去買彩票吧,特等獎不是你還會有誰呢?另外,一般站點的關(guān)鍵就在于管理員的密碼,很好的保護(hù)好你的管理員密碼那是至關(guān)重要的,至少10位的數(shù)字字母組合。另外加上現(xiàn)在大多數(shù)站點程序都會使用MD5來加密用戶密碼,加上你密碼的強(qiáng)壯性,那樣你站點的安全性就大大的提高了。即使出現(xiàn)了SQL Injection漏洞,攻擊者也不可能馬上拿下你的站點。
1. 簡單的腳本攻擊
此類攻擊應(yīng)該屬于無聊搗亂吧。比如****:alert(); [/table]等等,由于程序上過濾的不嚴(yán)密,使攻擊者既得不到什么可用的,但又使的他可以進(jìn)行搗亂的目的。以目前很多站點的免費(fèi)服務(wù),或者是自身站點的程序上也是有過濾不嚴(yán)密的問題。
2. 危險的腳本攻擊
這類腳本攻擊已經(jīng)過度到可以竊取管理員或者是其他用戶信息的程度上了。比如大家都知道的cookies竊取,利用腳本對客戶端進(jìn)行本地的寫操作等等。
3. Sql Injection 漏洞攻擊
可以說,這個攻擊方式是從動網(wǎng)論壇和BBSXP開始的。利用SQL特殊字符過濾的不嚴(yán)密,而對數(shù)據(jù)庫進(jìn)行跨表查詢的攻擊。比如:
復(fù)制代碼
代碼如下:http://127.0.0.1/forum/showuser.asp?id=999 and 1=1
http://127.0.0.1/forum/showuser.asp?id=999 and 1=2
http://127.0.0.1/forum/showuser.asp?id=999 and 0(select count(*) from admin)
http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp_'+
'cmdshell' exec @a 'dir c:'---&aid=9
得到了管理員的密碼也就意味著已經(jīng)控制的整站,雖然不一定能得到主機(jī)的權(quán)限,但也為這一步做了很大的鋪墊。類似的SQL Injection攻擊的方式方法很多,對不同的文件過濾不嚴(yán)密所采取的查詢方式也不同。所以說想做好一個完整的字符過濾程序不下一凡功夫是不可能的。
4. 遠(yuǎn)程注入攻擊
某站點的所謂的過濾只是在提交表格頁上進(jìn)行簡單的JS過濾。對于一般的用戶來說,你大可不必防范;對早有預(yù)謀的攻擊者來說,這樣的過濾似乎根本沒作用。我們常說的POST攻擊就是其中一例。通過遠(yuǎn)程提交非法的信息以達(dá)到攻擊目的。
通過上面的攻擊方法的介紹,我們大致的了解了攻擊者的攻擊途徑,下面我們就開始重點的介紹,如何有效的防范腳本攻擊!
讓我們還是從最簡單的開始:
防范腳本攻擊
JS腳本 和HTML腳本攻擊的防范其實很簡單:server.HTMLEncode(Str)完事。當(dāng)然你還不要大叫,怎么可能?你讓我把全站類似都加過濾我還不累死?為了方便的過濾,我們只需要將HTML腳本和JS腳本中的幾個關(guān)鍵字符過濾掉就可以了:程序體(1)如下:
復(fù)制代碼
代碼如下:'以下是過濾函數(shù)
<%
function CHK(fqyString)
fqyString = replace(fqyString, ">", ">")
fqyString = replace(fqyString, "<", "<")
fqyString = replace(fqyString, "&#", "&")
fqyString = Replace(fqyString, CHR(32), " ")
fqyString = Replace(fqyString, CHR(9), " ")
fqyString = Replace(fqyString, CHR(34), """)
fqyString = Replace(fqyString, CHR(39), "'")
fqyString = Replace(fqyString, CHR(13), "")
fqyString = Replace(fqyString, CHR(10) & CHR(10), "</P><P> ")
fqyString = Replace(fqyString, CHR(10), "
")
CHK = fqyString
end function
%>
'以下是應(yīng)用實例
<%=CHK(Username)%>
Username=CHK(replace(request("username"),"'",""))
使用Include把函數(shù)寫在公有頁面上,這樣效率是最好的。
程序體(1)
另外,值得我們注意的是,很多站點在用戶注冊,或者是用戶資料修改的頁面上也缺少腳本的過濾,或者是只在其中之一進(jìn)行過濾,注冊進(jìn)入后修改資料仍然可以進(jìn)行腳本攻擊。對用戶提交的數(shù)據(jù)進(jìn)行檢測和過濾,程序體(2) 如下:
復(fù)制代碼
代碼如下:'以下是過濾函數(shù)
If Instr(request("username"),"=")>0 or
Instr(request("username"),"%")>0 or
Instr(request("username"),chr(32))>0 or
Instr(request("username"),"?")>0 or
Instr(request("username"),"&")>0 or
Instr(request("username"),";")>0 or
Instr(request("username"),",")>0 or
Instr(request("username"),"'")>0 or
Instr(request("username"),"?")>0 or
Instr(request("username"),chr(34))>0 or
Instr(request("username"),chr(9))>0 or
Instr(request("username")," ")>0 or
Instr(request("username"),"$")>0 or
Instr(request("username"),">")>0 or
Instr(request("username"),""
Bword(3)="16 then
Response.write " 你要做什么?"
Response.end
End if
程序體(7)
為什么我們這里以及過濾了單引號,怎么還要再次取一個長度限制呢?不多說了,看看4ngel的文章先8 then ' 為什么取長度上面程序中已經(jīng)說明
復(fù)制代碼
代碼如下:response.write ""
response.end
else
If request("id")"" then '取不為空則是為了防止一些程序頁中會出現(xiàn)空值情況,如果不在這里做判斷,程序會校驗出錯.
If IsNumeric(request("id"))=False then ' 風(fēng)清揚(yáng)修改 ID數(shù)據(jù)監(jiān)控程式
response.write ""
response.end
end if
end if
end if
程序體(8)
由于我個人的編程習(xí)慣,我喜歡將所有的數(shù)據(jù)檢驗程序全部保留到整站的公用程序中,比如:conn.asp啦,只需要寫一次就可以修復(fù)全站的問題.
說到這里,我提一點關(guān)于攻擊的問題,就是跑用戶密碼或者是用戶名,一般常用的就是
....../show.asp?id=1 and 0(select count(*) from admin where id=3 and left(username,1)='a')
這樣去一個一個嘗試,當(dāng)然我們不能在這里提什么Perl程序去跑密碼,程序是別人寫,要自己知道原理.這里我只是想給個比較方便的辦法就是取ASC碼范圍.這個要比單獨(dú)跑要快很多.不論是是字母,數(shù)字,漢字,特殊字符,他們總會有對應(yīng)的ASC碼,用以下辦法:
....../show.asp?id=1 and 0(select count(*) from admin where id=3 and asc(right(left(username
e,3),1)) between 1 and 10000) 剩下的就隨你了,一般的從97到122就可以啦,字母嘛,很快D.呵呵,有人想用mid 函數(shù)當(dāng)然也是不錯 asc(mid(username,2,1)) between 1 and 10000 也成.
如何更加有效的防止SQL注入攻擊?我們將在下面的文章中具體提到!
防范遠(yuǎn)程注入攻擊
這類攻擊在以前應(yīng)該是比較常見的攻擊方式,比如POST攻擊,攻擊者可以隨便的改變要提交的數(shù)據(jù)值已達(dá)到攻擊目的.又如:COOKIES 的偽造,這一點更值得引起程序編寫者或站長的注意,不要使用COOKIES來做為用戶驗證的方式,否則你和把鑰匙留給賊是同一個道理.
比如:
If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd")
="fqy#e3i5.com" then
........more.........
End if
我想各位站長或者是喜好寫程序的朋友千萬別出這類錯誤,真的是不可饒恕.偽造COOKIES 都多少年了,你還用這樣的就不能怪別人跑你的密碼.涉及到用戶密碼或者是用戶登陸時,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一個信息,SessionID,它的隨機(jī)值是64位的,要猜解它,不可能.例:
if not (rs.BOF or rs.eof) then
login="true"
Session("username"&sessionID) = Username
Session("password"& sessionID) = Password
'Response.cookies("username")= Username
'Response.cookies("Password")= Password
下面我們來談?wù)勅绾畏婪哆h(yuǎn)程注入攻擊,一般的攻擊都是將單表提交文件拖到本地,將Form ACTION="chk.asp" 指向你服務(wù)器中處理數(shù)據(jù)的文件即可.如果你全部的數(shù)據(jù)過濾都在單表頁上,那么恭喜你,你將已經(jīng)被腳本攻擊了.
怎么才能制止這樣的遠(yuǎn)程攻擊?好辦,請看代碼如下: 程序體(9)
'個人感覺上面的代碼過濾不是很好,有一些外部提交竟然還能堂堂正正的進(jìn)來,于是再寫一個.
'這個是過濾效果很好,建議使用.
復(fù)制代碼
代碼如下:if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then
response.write "處理 URL 時服務(wù)器上出錯。
如果您是在用任何手段攻擊服務(wù)器,那你應(yīng)該慶幸,你的所有操作已經(jīng)被服務(wù)器記錄,我們會第一時間通知公安局與國家安全部門來調(diào)查你的IP. "
response.end
end if
程序體(9)
本以為這樣就萬事大吉了,在表格頁上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越來什么.你別忘了,攻擊者可以突破sql注入攻擊時輸入框長度的限制.寫一個SOCKET程序改變HTTP_REFERER?我不會。網(wǎng)上發(fā)表了這樣一篇文章:
復(fù)制代碼
代碼如下:------------len.reg-----------------
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\擴(kuò)展(&E)]
@="C:\Documents and Settings\Administrator\桌面\len.htm"
"contexts"=dword:00000004
-----------end----------------------
-----------len.htm------------------
<script language=vbs>
set srcevent = external.menuarguments.event
set doc=external.menuarguments.document
set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )
if ele.type ="text" or ele.type="password" then
ele.maxlength=200
ele.size=200
end if
</script>
----------end-----------------------
用法:先把len.reg導(dǎo)入注冊表(注意文件路徑)
然后把len.htm拷到注冊表中指定的地方.
打開網(wǎng)頁,光標(biāo)放在要改變長度的輸入框上點右鍵,看多了一個叫擴(kuò)展的選項了吧
單擊搞定! 后記:同樣的也就可以對付那些限制輸入內(nèi)容的腳本了.
怎么辦?我們的限制被饒過了,所有的努力都白費(fèi)了?不,舉起你de鍵盤,說不。讓我們繼續(xù)回到腳本字符的過濾吧,他們所進(jìn)行的注入無非就是進(jìn)行腳本攻擊。我們把所有的精力全都用到ACTION以后的頁面吧,在chk.asp頁中,我們將非法的字符全部過濾掉,結(jié)果如何?我們只在前面虛晃一槍,叫他們?nèi)ジ淖员戆桑?dāng)他們改完才會發(fā)現(xiàn),他們所做的都是那么的徒勞。
ASP木馬
已經(jīng)講到這里了,再提醒各位論壇站長一句,小心你們的文件上傳:為什么論壇程序被攻破后主機(jī)也隨之被攻擊者占據(jù)。原因就在......對!ASP木馬!一個絕對可惡的東西。病毒么?非也.把個文件隨便放到你論壇的程序中,您老找去吧。不吐血才怪哦。如何才能防止ASP木馬被上傳到服務(wù)器呢?方法很簡單,如果你的論壇支持文件上傳,請設(shè)定好你要上傳的文件格式,我不贊成使用可更改的文件格式,直接從程序上鎖定,只有圖象文件格式,和壓縮文件就完全可以,多給自己留點方便也就多給攻擊者留點方便。怎么判斷格式,我這里收集了一個,也改出了一個,大家可以看一下: 程序體(10)
復(fù)制代碼
代碼如下:'判斷文件類型是否合格
Private Function CheckFileExt (fileEXT)
dim Forumupload
Forumupload="gif,jpg,bmp,jpeg"
Forumupload=split(Forumupload,",")
for i=0 to ubound(Forumupload)
if lcase(fileEXT)=lcase(trim(Forumupload(i))) then
CheckFileExt=true
exit Function
else
CheckFileExt=false
end if
next
End Function
'驗證文件內(nèi)容的合法性
set MyFile = server.CreateObject ("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile (sFile, 1) ' 讀取文本文件
sTextAll = lcase(MyText.ReadAll): MyText.close
'判斷用戶文件中的危險操作
sStr ="8|.getfolder|.createfolder|.deletefolder|.createdirectory|
.deletedirectory"
sStr = sStr & "|.saveas|wscript.shell|script.encode"
sNoString = split(sStr,"|")
for i = 1 to sNoString(0)
if instr(sTextAll, sNoString(i)) <> 0 then
sFile = Upl.Path & sFileSave: fs.DeleteFile sFile
Response.write "<center>
<big>"& sFileSave &"文件中含有與操作目錄等有關(guān)的命令"&_
"
<font color=red>"& mid(sNoString(i),2) &"</font>,為了安全原因,<b>不能上傳。<b>"&_
"</big></center></html>"
Response.end
end if
next
程序體(10)
把他們加到你的上傳程序里做一次驗證,那么你的上傳程序安全性將會大大提高.
什么?你還不放心?拿出殺手锏,請你的虛擬主機(jī)服務(wù)商來幫忙吧。登陸到服務(wù)器,將PROG ID 中的"shell.application"項和"shell.application.1"項改名或刪除。再將"WSCRIPT.SHELL"項和"WSCRIPT.SHELL.1"這兩項都要改名或刪除。呵呵,我可大膽的說,國內(nèi)可能近半以上的虛擬主機(jī)都沒改過。只能慶幸你們的用戶很合作,否則......我刪,我刪,我刪刪刪......
小結(jié)
如何更好的達(dá)到防范SQL Injection的攻擊?這里我個人給推薦幾個辦法,第一,免費(fèi)程序不要真的就免費(fèi)用,既然你可以共享原碼,那么攻擊者一樣可以分析代碼。如果有能力的站長最好還是更改一下數(shù)據(jù)庫表名,字段名,只修改關(guān)鍵的admin, username, password就可以了,比如forum_upasswd 這樣的字段名誰能猜到?如果你猜到了,最好趕快去買彩票吧,特等獎不是你還會有誰呢?另外,一般站點的關(guān)鍵就在于管理員的密碼,很好的保護(hù)好你的管理員密碼那是至關(guān)重要的,至少10位的數(shù)字字母組合。另外加上現(xiàn)在大多數(shù)站點程序都會使用MD5來加密用戶密碼,加上你密碼的強(qiáng)壯性,那樣你站點的安全性就大大的提高了。即使出現(xiàn)了SQL Injection漏洞,攻擊者也不可能馬上拿下你的站點。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章