|
網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實(shí)現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計(jì)算機(jī)、存儲(chǔ)資源、數(shù)據(jù)資源、信息資源、知識(shí)資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。 論壇,英文翻譯是Forum,作為網(wǎng)絡(luò)上必不可少的交流平臺(tái)。在網(wǎng)站中有著舉足輕重的地位,大家知道論壇的種類相當(dāng)多。ASP、CGI、PHP、JSP甚至C++開發(fā)的,而品牌更是數(shù)以百計(jì),正是這樣,每個(gè)論壇都存在著這樣那樣的問題,其中安全問題又尤為突出。有不少網(wǎng)站就是因?yàn)檎搲隽藛栴}而導(dǎo)致服務(wù)器被滲透,在安全上怎么重視都不過份!由于我使用ASP論壇比較多,所以談?wù)凙SP論壇。 給開發(fā)者的建議 數(shù)據(jù)庫問題 數(shù)據(jù)庫似乎是每個(gè)使用者都比較頭疼的問題,被下載、被泄密。其實(shí)開發(fā)者多下些工夫。數(shù)據(jù)庫采用MD5加密(兼容行下降,自己平衡吧)。這樣泄密問題就得到了很好的解決,不管是誰。通過什么途徑看到數(shù)據(jù),都是加密過的字符串,最大限度的解決了數(shù)據(jù)庫泄密的問題,這點(diǎn)動(dòng)網(wǎng)做得很好,值得其他論壇借鑒。然后就是防下載了。在數(shù)據(jù)庫中加一個(gè)表,因?yàn)槲也簧瞄L描述,所以大家可以直接下載動(dòng)網(wǎng)論壇V5.0 0519 sp3(URL:http://www.aspsky.net/download/list.asp?id=2178),里面有這樣一個(gè)數(shù)據(jù)庫,導(dǎo)入里面的那個(gè)notdownload表(大家可以自己研究構(gòu)造,其實(shí)我自己也說不清楚,呵呵),然后就把數(shù)據(jù)庫的擴(kuò)展名改為.asp就可以防下載了,即使知道數(shù)據(jù)庫路徑,下載也是500錯(cuò)誤。這個(gè)應(yīng)該由開發(fā)者做的。 密碼驗(yàn)證問題 密碼是系統(tǒng)的首席看門官,大部分的攻擊都是截獲或猜解密碼開始的,所以對(duì)于登陸的規(guī)定還有需要驗(yàn)證的地方的防范一定要做好。開發(fā)者應(yīng)該限制密碼的最小長度為8,最好加入隨機(jī)驗(yàn)證碼,限制登陸失敗的次數(shù),如果輸入用戶名、密碼、隨機(jī)驗(yàn)證碼錯(cuò)誤導(dǎo)致登陸失敗3次后,就會(huì)自動(dòng)關(guān)閉,另外,提示密碼錯(cuò)誤的消息不宜顯示在HTML頁面里,而應(yīng)該由談出消息框來顯示出錯(cuò)信息,這幾個(gè)措施都能有效的防止溯雪這一類工具暴力破解,這類工具的原理是判斷頁面源代碼中的某一標(biāo)簽進(jìn)行破解的,一般是先獲取錯(cuò)誤頁面的的某個(gè)標(biāo)簽,然后提交數(shù)據(jù),拿返回的數(shù)據(jù)和剛才獲取的錯(cuò)誤標(biāo)簽進(jìn)行對(duì)比,如果遇到了和錯(cuò)誤標(biāo)簽不同的標(biāo)簽。則視為正確的,只要了解原理了,就知道上面的三種措施是多么有效。還有盡量不要在頁面顯示密碼。比如在快速回復(fù)的地方查看原代碼。找到類似的 “密碼 <input maxlength=20 type=password name=Pass value="***********" size="20">”地方。其中“***********”就是密碼了。這樣用戶登陸后。離開一下,別人馬上查看原代碼就可以看到密碼了,非常不安全!其實(shí)通過Cookies和Session判斷也是有一定缺陷的。Session完全保存在服務(wù)器端,是絕對(duì)安全的。所以只有開發(fā)者平衡一下了。選個(gè)折中的方法,還有也盡量少用type=hidden來隱藏信息。會(huì)HTML的人一看就知道了。不過如果像剛才所說的采用MD5加密,就不會(huì)看到真實(shí)的密碼了。查看原代碼的時(shí)候就只是value="f3b4sd5f47fh49ah3"。(此字符串已經(jīng)改過) UBB解析問題 相當(dāng)多的留言本和論壇都存在這樣的問題,比如[img]pic_url[/img]可以顯示一張圖片,但如果代碼轉(zhuǎn)換不好,就可能被執(zhí)行跨站腳本,最簡單的測試方法就是提交[img]javascript:alert();[/img]這樣的信息,(標(biāo)簽視程序而定),如果彈出一個(gè)對(duì)話框就說明存在此漏洞,有的雖然已經(jīng)過濾了。但可能把提交的信息轉(zhuǎn)換為ASCII代碼,還是有可能執(zhí)行跨站腳本的,跨站腳本的危害不定,可以彈出一些信息來,如果HTML代碼不過濾好?梢孕薷闹黜摰母窬;更有攻擊者,寫個(gè)竊取用戶的COOKIES資料的腳本引導(dǎo)用戶訪問,最慘的還可能格式化瀏覽者的硬盤。下面又是一個(gè)簡單的例子。 [img]javascript:document.write();[/img] document.write('');里面的單引號(hào)'' 和句點(diǎn).要用ASCII轉(zhuǎn)換,否則對(duì)稍有過濾的程序就不會(huì)生效。里面可以寫任何代碼。修改注冊(cè)表、格式化硬盤……如果UBB過濾得好,就沒事。 看懂的朋友覺得嚴(yán)重嗎?下面付上一段處理腳本字符的代碼。僅供參考。也許有錯(cuò)誤和遺漏。 Function JScode(JSstr) dim jsstr:jsstr=jsstrs if jsstr="" or isnull(jsstr) then JScode"":exit function if not isnull(JSstr) then dim ts dim re dim reContent Set re=new RegExp re.IgnoreCase =true re.Global=True re.Pattern="(javascript)" ts=re.Replace(JSstr,"javascript") re.Pattern="(jscript:)" ts=re.Replace(ts,"jscript:") re.Pattern="(js:)" ts=re.Replace(ts,"js:") re.Pattern="(value)" ts=re.Replace(ts,"value") re.Pattern="(about:)" ts=re.Replace(ts,"about:") re.Pattern="(file:)" ts=re.Replace(ts,"file:") re.Pattern="(document.cookie)" ts=re.Replace(ts,"documents.cookie") re.Pattern="(vbscript:)" ts=re.Replace(ts,"vbscript:") re.Pattern="(vbs:)" ts=re.Replace(ts,"vbs:") re.Pattern="(on(mouse|exit|error|click|key))" ts=re.Replace(ts,"on$2") re.Pattern="(&#)" ts=re.Replace(ts,"&#") JScode=ts set re=nothing end if End Function SQL Injection漏洞的問題 SQL Injection的原理是利用用戶提交或可以修改的數(shù)據(jù),把想要的SQL語句插入到系統(tǒng)實(shí)際SQL語言當(dāng)中,從而達(dá)到入侵的目的,知道原理后,開發(fā)者就應(yīng)該做好預(yù)防工作了,需要從根本上解決解決SQL Injection問題。還得從程序本身入手。過濾不能單純的過濾URL所提交的參數(shù),在表單里的也要過濾,value=后面的可以修改的數(shù)據(jù),修改后可以提交到服務(wù)器,總之對(duì)所有的表單提交的數(shù)據(jù)以及用戶可能對(duì)HTML源文件進(jìn)行修改來控制的所有來自Web服務(wù)器外部的數(shù)據(jù)進(jìn)行過濾或轉(zhuǎn)換,(我不擅長表達(dá),此話改自isno的一句話,謝謝isno)對(duì)單引號(hào)、雙引號(hào)、分號(hào)“--”還有對(duì)數(shù)字鍵上面的所有特殊字符進(jìn)行過濾,還有QUERY_STRING環(huán)境變量。我敢說僅僅這樣還是不夠的。就算有防火墻和IDS(入侵檢測系統(tǒng))對(duì)特殊字符進(jìn)行過濾。我們還是可以用分組排列的方法,拆分命令字符串,存進(jìn)一個(gè)臨時(shí)變量,然后再引用,如下面的兩句命令一樣。就有可能饒過檢測,我們學(xué)校就是用這個(gè)方法攻破的,許多商業(yè)公司都購買了IDS,并且在IDS中過濾xp_cmdshell等等一大串惡意的字符,我們?nèi)绾翁峤蛔约好钅,我們只要通過以下這種排列組合的方式我們可以突破IDS的檢測: declare @a sysname set @a='xp_'+'cmdshell' exec @a 'dir c:\' declare @a sysname set @a='xp'+'_cm’+’dshell' exec @a 'dir c:\' 所以開發(fā)者就要想辦法在數(shù)據(jù)提交前在程序里就處理掉。更多的SQL Injection資料請(qǐng)查看微軟臺(tái)灣站點(diǎn)(URL:http://www.microsoft.com/taiwan/SQL/SQL_Injection_G1.htm) 文件上傳問題 曾經(jīng)有過這樣的一件事,一個(gè)動(dòng)網(wǎng)論壇的管理員密碼通過某方法被入侵者獲取,然后入侵者設(shè)置允許上傳ASP文件,結(jié)果利用一個(gè)cmdasp后門滲透整臺(tái)服務(wù)器。所以,開發(fā)者最好不允許使用者設(shè)置可以上傳ASP文件,即使設(shè)置也無效。也就是固定不允許上傳ASP文件,如果一定要上傳。最好加個(gè)對(duì)文件內(nèi)容檢測的功能。比如檢測文本文件內(nèi)容里是否存在危險(xiǎn)命令,如果存在則禁止上傳,有時(shí)上傳的大都是大文件,而且是二進(jìn)制的,判斷非常麻煩,比較耗資源。但是安全重要還是資源重要?開發(fā)者可以自己決定!或者投票調(diào)查。下面給出ypy的一段代碼:這是主要代碼。開發(fā)者自己去完善吧。在此特別感謝ypy。 set MyFile = server.CreateObject ("Scripting.FileSystemObject") set MyText = MyFile.OpenTextFile (sFile, 1) ' 讀文本文件 sTextAll = lcase(MyText.ReadAll): MyText.close '判斷用戶文件中的危險(xiǎn)操作 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><br><big>"& sFileSave &"文件中含有與操作目錄等有關(guān)的命令"&_ "<br><font color=red>"& mid(sNoString(i),2) &"</font>,為了安全原因,<b>不能上傳。<b>"&_ "</big></center></html>" Response.end end if next 頭像問題 看過我網(wǎng)站上的那篇《由一個(gè)惡作劇網(wǎng)頁聯(lián)想到的安全問題》的都知道,如果寫好一個(gè)有HTML代碼的頁面,當(dāng)然也可以有javascript代碼,把擴(kuò)展名改為.jpg、.gif、.png,在低版本的IE中,照樣執(zhí)行,還有大家熟悉的BMP木馬,這樣,只要用戶瀏覽就有被格式化硬盤的危險(xiǎn),因此,我的建議是最好不要讓用戶自己定制頭像,不允許上傳和引用,對(duì)于選擇論壇自帶頭像的時(shí)候,只允許用戶選擇編號(hào),而不讓用戶看到圖片地址,看到地址就意味著有可能修改源代碼來達(dá)到引用的目的,這點(diǎn)LeadBBS做得不錯(cuò)。其實(shí)帖圖功能也差不多,不過這畢竟要瀏覽帖子才中招,安全和功能是成反比的。這點(diǎn)由開發(fā)者自己平衡一下,或者最干脆的方法是不要頭像,還有帖子里顯示的是一個(gè)圖片的URL。 功能上的問題 可能我的看法有些極端,但作為安全技術(shù)愛好者,我知道安全上怎么重視都不過份,所以我還是把我的看法和大家交流一下,論壇產(chǎn)生的原因就是為了滿足網(wǎng)友們有個(gè)互動(dòng)式交流平臺(tái)的需要,僅僅是交流。因此論壇不管如何擴(kuò)展功能,裝插件,都是比不上社區(qū)的,何況相當(dāng)多的娛樂功能根本用不著。還有一些用戶參數(shù)。比如魅力、金錢、威望、等級(jí)這些東西,本來交流就是人人平等的,關(guān)注這些數(shù)據(jù)還不如去完RPG游戲,有些插件也有著這樣那樣的問題,本著實(shí)用、夠用的原則,就如中國Linux論壇(URL:http://www.linuxforum.net/forum/categories.php),強(qiáng)烈建議大家去參觀一下。還有,作為論壇開發(fā)者,應(yīng)該為使用者多著想,后臺(tái)功能應(yīng)盡量做的強(qiáng)大,完善,就像動(dòng)網(wǎng)、VBB那樣,外國的論壇這方面都做得不錯(cuò),而前臺(tái)只要功能完整就可以了,就像中國Linux論壇那樣,不要給論壇用戶過多的操作。也許作為技術(shù)愛好者的我不能理解娛樂性論壇的需求,請(qǐng)大家不要介意。 其他 CGI和PHP論壇我接觸不多,CGI論壇我2年前用過,所以我也不發(fā)表什么看法了,我認(rèn)為動(dòng)網(wǎng)論壇是最好的ASP論壇,經(jīng)過前段時(shí)間眾多高手的安全檢測,修正了大多數(shù)致命漏洞。任何論壇都是經(jīng)過檢測安全性才會(huì)進(jìn)一步提高,動(dòng)網(wǎng)已經(jīng)是走在相當(dāng)前面了。 給使用者的建議 其實(shí),使用者最突出的問題就是安全意識(shí)太低,這種情況在搞安全站點(diǎn)的人里面不多見,但普遍存在與非技術(shù)網(wǎng)站,比如論壇補(bǔ)丁不及時(shí)打,對(duì)論壇的功能、性能、速度和美觀的關(guān)注程度大于安全性,甚至說對(duì)安全性不屑一顧,在動(dòng)網(wǎng)官方論壇上常見到這樣的帖子“我被黑啦”……每碰到這樣的帖子我就會(huì)去看,大多數(shù)是娛樂性網(wǎng)站,說了這么多,我給大家的建議就是仔細(xì)設(shè)置好論壇,給用戶最小的權(quán)限,論壇的權(quán)限、用戶組的權(quán)限,按需分配,本著實(shí)用、夠用的原則,不同的論壇,有不同的安全標(biāo)準(zhǔn),或者說是安全級(jí)別,對(duì)于一個(gè)站點(diǎn)來說,論壇就像一個(gè)操作系統(tǒng)。如果出現(xiàn)了漏洞,而官方又沒有出補(bǔ)丁,最好的補(bǔ)救辦法是改變論壇的目錄,僅僅關(guān)閉是不夠的,因?yàn)槌鰡栴}的文件仍存在。更多的建議請(qǐng)看我寫的《打造最強(qiáng)勁的論壇》。上面很詳細(xì)的介紹了關(guān)于論壇的安全配置和優(yōu)化。 網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗(yàn)―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項(xiàng)技術(shù)都需要適時(shí)應(yīng)勢,對(duì)應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!