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