近來,網絡上的SQL Injection 漏洞利用攻擊,JS腳本,HTML腳本攻擊似乎逾演逾烈。陸續的很多站點都被此類攻擊所困擾,並非像主機漏洞那樣可以當即修復,來自於WEB的攻擊方式使我們在防范或者是修復上都帶來了很大的不便。HOOO…… 一個站長最大的痛苦莫過於此。自己的密碼如何如何強壯卻始終被攻擊者得到,但如何才能做到真正意義上的安全呢?第一,別把密碼和你的生活聯系起來;第二,Supermaster的PWD最好只有你自己知道;第三,絕對要完善好你的網站程序。然而怎樣才能完善,這將是我們此文的最終目的。
安全防護,如何做到安全防護?想要防護就要知道對方是如何進行攻擊。有很多文章都在寫如何攻下某站點,其實其攻擊的途徑也不過是以下幾種:
1. 簡單的腳本攻擊
此類攻擊應該屬於無聊搗亂吧。比如****:alert(); </table>等等,由於程序上過濾的不嚴密,使攻擊者既得不到什麼可用的,但又使的他可以進行搗亂的目的。以目前很多站點的免費服務,或者是自身站點的程序上也是有過濾不嚴密的問題。
2. 危險的腳本攻擊
這類腳本攻擊已經過度到可以竊取管理員或者是其他用戶信息的程度上了。比如大家都知道的cookies竊取,利用腳本對客戶端進行本地的寫操作等等。
3. Sql Injection 漏洞攻擊
可以說,這個攻擊方式是從動網論壇和BBSXP開始的。利用SQL特殊字符過濾的不嚴密,而對數據庫進行跨表查詢的攻擊。比如:
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
得到了管理員的密碼也就意味著已經控制的整站,雖然不一定能得到主機的權限,但也為這一步做了很大的鋪墊。類似的SQL Injection攻擊的方式方法很多,對不同的文件過濾不嚴密所采取的查詢方式也不同。所以說想做好一個完整的字符過濾程序不下一凡功夫是不可能的。
4. 遠程注入攻擊
某站點的所謂的過濾只是在提交表格頁上進行簡單的JS過濾。對於一般的用戶來說,你大可不必防范;對早有預謀的攻擊者來說,這樣的過濾似乎根本沒作用。我們常說的POST攻擊就是其中一例。通過遠程提交非法的信息以達到攻擊目的。
通過上面的攻擊方法的介紹,我們大致的了解了攻擊者的攻擊途徑,下面我們就開始重點的介紹,如何有效的防范腳本攻擊!
讓我們還是從最簡單的開始:
l 防范腳本攻擊
JS腳本 和HTML腳本攻擊的防范其實很簡單:server.HTMLEncode(Str)完事。當然你還不要大叫,怎麼可能?你讓我把全站類似<%=uid%>都加過濾我還不累死?為了方便的過濾,我們只需要將HTML腳本和JS腳本中的幾個關鍵字符過濾掉就可以了:程序體(1)如下:
‘以下是過濾函數
<%
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), "<BR> ")
CHK = fqyString
end function
%>
‘以下是應用實例
<%=CHK(Username)%>
Username=CHK(replace(request(“username”),”’”,””))
使用Include把函數寫在公有頁面上,這樣效率是最好的。 123456下一頁閱讀全文