八大法則杜絕ASP網(wǎng)站漏洞入侵
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
[p]如何更好的達(dá)到防范黑客攻擊,本人提一下個(gè)人意見(jiàn)!第一,免費(fèi)程序不要真的就免費(fèi)用,既然你可以共享原碼,那么攻擊者一樣可以分析代碼。如果在細(xì)節(jié)上注意防范,那樣你站點(diǎn)的安全性就大大的提高了。即使出現(xiàn)了sql injection這樣的漏洞,攻擊者也不可能馬上拿下你的站點(diǎn)。由于asp的方便易用,越來(lái)越多的網(wǎng)站后臺(tái)程序都使用asp腳本語(yǔ)言。但是,由于asp本身存在一些安全漏洞,稍不小心就會(huì)給黑客提供可乘之機(jī)。事實(shí)上,安全不僅是網(wǎng)管的事,編程人員也必須在某些安全細(xì)節(jié)上注意,養(yǎng)成良好的安全習(xí)慣,否則會(huì)給自己的網(wǎng)站帶來(lái)巨大的安全隱患。目前,大多數(shù)網(wǎng)站上的asp程序有這樣那樣的安全漏洞,但如果編寫(xiě)程序的時(shí)候注意一點(diǎn)的話(huà),還是可以避免的。[/p]
[p]1、用戶(hù)名與口令被破解 [/p] [p]攻擊原理:用戶(hù)名與口令,往往是黑客們最感興趣的東西,如果被通過(guò)某種方式看到源代碼,后果是嚴(yán)重的。防范技巧:涉及用戶(hù)名與口令的程序最好封裝在服務(wù)器端,盡量少在asp文件里出現(xiàn),涉及與數(shù)據(jù)庫(kù)連接的用戶(hù)名與口令應(yīng)給予最小的權(quán)限。出現(xiàn)次數(shù)多的用戶(hù)名與口令可以寫(xiě)在一個(gè)位置比較隱蔽的包含文件中。如果涉及與數(shù)據(jù)庫(kù)連接,在理想狀態(tài)下只給它以執(zhí)行存儲(chǔ)過(guò)程的權(quán)限,千萬(wàn)不要直接給予該用戶(hù)修改、插入、刪除記錄的權(quán)限?! /p] [p]2、驗(yàn)證被繞過(guò)[/p] [p]攻擊原理:現(xiàn)在需要經(jīng)過(guò)驗(yàn)證的asp程序大多是在頁(yè)面頭部加一個(gè)判斷語(yǔ)句,但這還不夠,有可能被黑客繞過(guò)驗(yàn)證直接進(jìn)入。[/p] [p]防范技巧:需要經(jīng)過(guò)驗(yàn)證的asp頁(yè)面,可跟蹤上一個(gè)頁(yè)面的文件名,只有從上一頁(yè)面轉(zhuǎn)進(jìn)來(lái)的會(huì)話(huà)才能讀取這個(gè)頁(yè)面。[/p] [p]3、inc文件泄露問(wèn)題[/p] [p]攻擊原理:當(dāng)存在asp的主頁(yè)正在制作且沒(méi)有進(jìn)行最后調(diào)試完成以前,可以被某些搜索引擎機(jī)動(dòng)追加為搜索對(duì)象。如果這時(shí)候有人利用搜索引擎對(duì)這些網(wǎng)頁(yè)進(jìn)行查找,會(huì)得到有關(guān)文件的定位,并能在瀏覽器中查看到數(shù)據(jù)庫(kù)地點(diǎn)和結(jié)構(gòu)的細(xì)節(jié),并以此揭示完整的源代碼?!/p] [p]防范技巧:程序員應(yīng)該在網(wǎng)頁(yè)發(fā)布前對(duì)它進(jìn)行徹底的調(diào)試;安全專(zhuān)家則需要加固asp文件以便外部的用戶(hù)不能看到它們。首先對(duì).inc文件內(nèi)容進(jìn)行加密,其次也可以使用.asp文件代替.inc文件使用戶(hù)無(wú)法從瀏覽器直接觀(guān)看文件的源代碼。inc文件的文件名不要使用系統(tǒng)默認(rèn)的或者有特殊含義容易被用戶(hù)猜測(cè)到的名稱(chēng),盡量使用無(wú)規(guī)則的英文字母?! /p] [p]4、自動(dòng)備份被下載攻擊原理:在有些編輯asp程序的工具中,當(dāng)創(chuàng)建或者修改一個(gè)asp文件時(shí),編輯器自動(dòng)創(chuàng)建一個(gè)備份文件,比如:ultraedit就會(huì)備份一個(gè).bak文件,如你創(chuàng)建或者修改了some.asp,編輯器會(huì)自動(dòng)生成一個(gè)叫some.asp.bak文件,如果你沒(méi)有刪除這個(gè)bak文件,攻擊者可以直接下載some.asp.bak文件,這樣some.asp的源程序就會(huì)被下載。[/p] [p]防范技巧:上傳程序之前要仔細(xì)檢查,刪除不必要的文檔。對(duì)以bak為后綴的文件要特別小心。[/p] [p]5、特殊字符[/p] [p]攻擊原理:輸入框是黑客利用的一個(gè)目標(biāo),他們可以通過(guò)輸入腳本語(yǔ)言等對(duì)用戶(hù)客戶(hù)端造成損壞;如果該輸入框涉及數(shù)據(jù)查詢(xún),他們會(huì)利用特殊查詢(xún)語(yǔ)句,得到更多的數(shù)據(jù)庫(kù)數(shù)據(jù),甚至表的全部。因此必須對(duì)輸入框進(jìn)行過(guò)濾。但如果為了提高效率僅在客戶(hù)端進(jìn)行輸入合法性檢查,仍有可能被繞過(guò)。[/p] [p]防范技巧:在處理類(lèi)似留言板、bbs等輸入框的asp程序中,最好屏蔽掉html、javascript、vbscript語(yǔ)句,如無(wú)特殊要求,可以限定只允許輸入字母與數(shù)字,屏蔽掉特殊字符。同時(shí)對(duì)輸入字符的長(zhǎng)度進(jìn)行限制。而且不但要在客戶(hù)端進(jìn)行輸入合法性檢查,同時(shí)要在服務(wù)器端程序中進(jìn)行類(lèi)似檢查。[/p] [p]6、數(shù)據(jù)庫(kù)下載漏洞[/p] [p]攻擊原理:在用access做后臺(tái)數(shù)據(jù)庫(kù)時(shí),如果有人通過(guò)各種方法知道或者猜到了服務(wù)器的access數(shù)據(jù)庫(kù)的路徑和數(shù)據(jù)庫(kù)名稱(chēng),那么他也能夠下載這個(gè)access數(shù)據(jù)庫(kù)文件,這是非常危險(xiǎn)的。[/p] [p]防范技巧:[/p] [p](1)為你的數(shù)據(jù)庫(kù)文件名稱(chēng)起個(gè)復(fù)雜的非常規(guī)的名字,并把它放在幾層目錄下。所謂 “非常規(guī)”, 打個(gè)比方說(shuō),比如有個(gè)數(shù)據(jù)庫(kù)要保存的是有關(guān)書(shū)籍的信息, 可不要給它起個(gè)“book.mdb”的名字,而要起個(gè)怪怪的名稱(chēng),比如d34ksfslf.mdb, 并把它放在如./kdslf/i44/studi/的幾層目錄下,這樣黑客要想通過(guò)猜的方式得到你的access數(shù)據(jù)庫(kù)文件就難上加難了。[/p] [p](2)不要把數(shù)據(jù)庫(kù)名寫(xiě)在程序中。有些人喜歡把dsn寫(xiě)在程序中,比如:[/p] [p][/p]dbpath = server.mappath(“cmddb.mdb”) conn.open “driver={microsoft access driver (*.mdb)};dbq=” & dbpath [p] [/p] [p]假如萬(wàn)一給人拿到了源程序,你的access數(shù)據(jù)庫(kù)的名字就一覽無(wú)余了。因此建議你在odbc里設(shè)置數(shù)據(jù)源,再在程序中這樣寫(xiě):[/p] [p] [/p] conn.open“shujiyuan” [p] [/p] [p] [/p] [p](3)使用access來(lái)為數(shù)據(jù)庫(kù)文件編碼及加密。首先在“工具→安全→加密/解密數(shù)據(jù)庫(kù)”中選取數(shù)據(jù)庫(kù)(如:employer.mdb),然后按確定,接著會(huì)出現(xiàn)“數(shù)據(jù)庫(kù)加密后另存為”的窗口,可存為:[/p] [p] [/p] “employer1.mdb” [p] [/p] [p]要注意的是,以上的動(dòng)作并不是對(duì)數(shù)據(jù)庫(kù)設(shè)置密碼,而只是對(duì)數(shù)據(jù)庫(kù)文件加以編碼,目的是為了防止他人使用別的工具來(lái)查看數(shù)據(jù)庫(kù)文件的內(nèi)容。接下來(lái)我們?yōu)閿?shù)據(jù)庫(kù)加密,首先打開(kāi)經(jīng)過(guò)編碼了的 employer1.mdb,在打開(kāi)時(shí),選擇“獨(dú)占”方式。然后選取功能表的“工具→安全→設(shè)置數(shù)據(jù)庫(kù)密碼”,接著輸入密碼即可。這樣即使他人得到了employer1.mdb文件,沒(méi)有密碼他也是無(wú)法看到 employer1.mdb中的內(nèi)容。[/p] [p][b]7、防范遠(yuǎn)程注入攻擊[/b][/p] [p]這類(lèi)攻擊在以前應(yīng)該是比較常見(jiàn)的攻擊方式,比如post攻擊,攻擊者可以隨便的改變要提交的數(shù)據(jù)值已達(dá)到攻擊目的。又如:cookies 的偽造,這一點(diǎn)更值得引起程序編寫(xiě)者或站長(zhǎng)的注意,不要使用cookies來(lái)做為用戶(hù)驗(yàn)證的方式,否則你和把鑰匙留給賊是同一個(gè)道理。[/p] [p]比如:[/p] [p] [/p] if trim(request. cookies ("uname"))="fqy" and request.cookies("upwd") =”fqy#e3i5.com” then ……..more……… end if [p] [/p] [p]我想各位站長(zhǎng)或者是喜好寫(xiě)程序的朋友千萬(wàn)別出這類(lèi)錯(cuò)誤,真的是不可饒恕。偽造cookies 都多少年了,你還用這樣的就不能怪別人跑你的密碼。涉及到用戶(hù)密碼或者是用戶(hù)登陸時(shí),你最好使用session 它才是最安全的。如果要使用cookies就在你的cookies上多加一個(gè)信息,sessionid,它的隨機(jī)值是64位的,要猜解它,不可能。例:[/p] [p] [/p] 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 [p] [/p] [p]下面我們來(lái)談?wù)勅绾畏婪哆h(yuǎn)程注入攻擊,一般的攻擊都是將單表提交文件拖到本地,將form action=”chk.asp” 指向你服務(wù)器中處理數(shù)據(jù)的文件即可.如果你全部的數(shù)據(jù)過(guò)濾都在單表頁(yè)上,那么恭喜你,你將已經(jīng)被腳本攻擊了.怎么才能制止這樣的遠(yuǎn)程攻擊?好辦,請(qǐng)看代碼如下:程序體(9)[/p] [p] [/p] <% server_v1=cstr(request.servervariables("http_referer")) server_v2=cstr(request.servervariables("server_name")) if mid(server_v1,8,len(server_v2))<>server_v2 then response.write "<br><br><center>" response.write " " response.write "你提交的路徑有誤,禁止從站點(diǎn)外部提交數(shù)據(jù)請(qǐng)不要亂改參數(shù)!" response.write " " response.end end if %> [p] [/p] [p] [/p] [p]個(gè)人感覺(jué)上面的代碼過(guò)濾不是很好,有一些外部提交竟然還能堂堂正正的進(jìn)來(lái),于是再寫(xiě)一個(gè)。這個(gè)是過(guò)濾效果很好,建議使用。[/p] [p] [/p] if instr(request.servervariables ("http_referer"),"http://"&request.servervariables("host") )<1 then response.write "處理 url 時(shí)服務(wù)器上出錯(cuò)。如果您是在用任何手段攻擊服務(wù)器,那你應(yīng)該慶幸,你 的所有操作已經(jīng)被服務(wù)器記錄,我們會(huì)第一時(shí)間通知公安局與國(guó)家安全部門(mén)來(lái)調(diào)查你的ip. " [p] [/p] [p]本以為這樣就萬(wàn)事大吉了,在表格頁(yè)上加一些限制,比如maxlength啦,等等……但天公就是那么不作美,你越怕什么他越來(lái)什么。你別忘了,攻擊者可以突破sql注入攻擊時(shí)輸入框長(zhǎng)度的限制。寫(xiě)一個(gè)socket程序改變http_referer?我不會(huì),網(wǎng)上發(fā)表了這樣一篇文章:[/p] [p] [/p] ------------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------------------ ----------end----------------------- [p] [/p] [p] [/p] [p]用法:先把len.reg導(dǎo)入注冊(cè)表(注意文件路徑)然后把len.htm拷到注冊(cè)表中指定的地方。打開(kāi)網(wǎng)頁(yè),光標(biāo)放在要改變長(zhǎng)度的輸入框上點(diǎn)右鍵,看多了一個(gè)叫擴(kuò)展的選項(xiàng)了吧單擊搞定! 后記:同樣的也就可以對(duì)付那些限制輸入內(nèi)容的腳本了。怎么辦?我們的限制被饒過(guò)了,所有的努力都白費(fèi)了?不,舉起你de鍵盤(pán),說(shuō)不。讓我們繼續(xù)回到腳本字符的過(guò)濾吧,他們所進(jìn)行的注入無(wú)非就是進(jìn)行腳本攻擊。我們把所有的精力全都用到action以后的頁(yè)面吧,在chk.asp頁(yè)中,我們將非法的字符全部過(guò)濾掉,結(jié)果如何?我們只在前面虛晃一槍?zhuān)兴麄內(nèi)ジ?[/p] 該文章在 2010/7/14 1:47:54 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |