網(wǎng)絡(luò)已經(jīng)成為互聯(lián)網(wǎng)最熱門的話題之一,與現(xiàn)實(shí)相對(duì)應(yīng)的,網(wǎng)絡(luò)的部屬、實(shí)現(xiàn)也成為一個(gè)企業(yè)特別關(guān)心的問(wèn)題。所以,現(xiàn)在我們可以很容易的看到各個(gè)企業(yè)在設(shè)計(jì)自己網(wǎng)絡(luò)、構(gòu)建企業(yè)網(wǎng)站的時(shí)候,對(duì)于網(wǎng)絡(luò)的投入還是比較大方的,特別是一些敏感信息比較多的網(wǎng)站,比如銀行、證券等企業(yè),對(duì)于網(wǎng)絡(luò)更是不遺余力,市場(chǎng)上各種宣傳、廣告,也都大力推廣各種產(chǎn)品,比如防火墻、入侵檢測(cè)、企業(yè)防病毒等一系列的產(chǎn)品。但是,是不是使用了這些產(chǎn)品,網(wǎng)絡(luò)特別是網(wǎng)站真的了?不一定,即使這些設(shè)備檔、設(shè)置也很合理,網(wǎng)站還是有被攻擊甚至完全被控制的可能。我們知道,現(xiàn)在的網(wǎng)站特別是稍微大一點(diǎn)的網(wǎng)站,一般都采用ASP、PHP或者JSP等腳本語(yǔ)言來(lái)連接數(shù)據(jù)庫(kù),取得數(shù)據(jù)庫(kù)里面的數(shù)據(jù)生成動(dòng)態(tài)網(wǎng)頁(yè),這樣,當(dāng)一個(gè)網(wǎng)站完全建立的以后,程序會(huì)很多,特別是網(wǎng)頁(yè)設(shè)計(jì)的特殊性,服務(wù)器與用戶的交互程序特別多,所以,如果程序員不是很有經(jīng)驗(yàn)或者沒(méi)有強(qiáng)烈的意識(shí),程序的漏洞會(huì)很多,給網(wǎng)站帶來(lái)不可估量的隱患。這些程序漏洞,一定程度上,可能比網(wǎng)站服務(wù)器的漏洞更加嚴(yán)重,因?yàn)檫@些漏洞防火墻或者入侵檢測(cè)系統(tǒng)根本無(wú)法防止。 一、編程漏洞的形成 編程漏洞怎么形成的呢?我們需要對(duì)網(wǎng)頁(yè)編程有比較的認(rèn)識(shí)才可以理解。首先,我們來(lái)看看網(wǎng)頁(yè)編程的特點(diǎn)。 1、網(wǎng)頁(yè)編程交互性強(qiáng) 之所以采用各種語(yǔ)言來(lái)設(shè)計(jì)網(wǎng)站而不直接采用HTML,目的是為了更好的管理網(wǎng)站資源,增加網(wǎng)站與瀏覽者之間的交互。所以,在網(wǎng)站設(shè)計(jì)的時(shí)候,一些常見的交互編程是少不了的,比如留言版、BBS論壇,聊天室等,這些程序的共同點(diǎn)是用戶輸入很多資料,通過(guò)這些資料與其他瀏覽者交流或者與網(wǎng)站管理者交流。而交互的特點(diǎn),正式漏洞形成的一大原因,因?yàn)橛脩糨斎胄畔⑹遣豢深A(yù)測(cè)的,如果程序沒(méi)有考慮到或者考慮不一些問(wèn)題,用戶輸入有可能成為攻擊事件,不管有意還是無(wú)意。 2、網(wǎng)頁(yè)編程字符處理特別多 上面我們談到,交互其實(shí)是信息的流通。所以,這些信息的處理是大問(wèn)題,怎樣嚴(yán)格控制用戶輸入信息的內(nèi)容、信息格式、信息長(zhǎng)度都是編程需要考慮的問(wèn)題。 3、網(wǎng)頁(yè)編程涉及最里層 我們知道,網(wǎng)頁(yè)編程直接和服務(wù)器打交道,這些程序都是直接和網(wǎng)站目錄、網(wǎng)站數(shù)據(jù)庫(kù)設(shè)置網(wǎng)站設(shè)置、系統(tǒng)設(shè)置相關(guān),通過(guò)這些程序,可以訪問(wèn)網(wǎng)站目錄、設(shè)置等幾乎所有服務(wù)器內(nèi)容。仔細(xì)想,這些程序其實(shí)都是很有潛在問(wèn)題的,因?yàn)樗鼈兲舾辛。所以,如果程序設(shè)計(jì)有漏洞,幾乎等于網(wǎng)站有漏洞,甚至完全開放。 4、網(wǎng)頁(yè)編程整體人員基礎(chǔ)較差 網(wǎng)頁(yè)編程人員的技術(shù)素質(zhì),這個(gè)問(wèn)題其實(shí)我們可能比較少關(guān)注。在部分傳統(tǒng)程序員眼中,網(wǎng)頁(yè)程序設(shè)計(jì)其實(shí)不能稱為程序員,他們認(rèn)為網(wǎng)頁(yè)程序設(shè)計(jì),只需要美工好可以了,完全沒(méi)有技巧可言,不叫真正的編程。之所以形成這種觀點(diǎn),有幾個(gè)原因。一是網(wǎng)頁(yè)編程相對(duì)比較簡(jiǎn)單,變化較少,基本上,網(wǎng)頁(yè)編程可以很簡(jiǎn)單的概括出幾個(gè)類型:留言版、論壇、聊天室、郵件列表、新聞發(fā)布、軟件下載等,而這些類型的編程,大部分都有模式可循,和傳統(tǒng)編程相比,的確比較簡(jiǎn)單,任意掌握;二是網(wǎng)頁(yè)編程人員大部分半路出家,專業(yè)的程序員相對(duì)較少,編程的系統(tǒng)訓(xùn)練較少,可能編程的基礎(chǔ)也比較弱,所以,編程方面可以還是有一些缺陷的;三是部分網(wǎng)站直接下載網(wǎng)上免費(fèi)程序來(lái)建立網(wǎng)站,這些程序的健壯性、性都沒(méi)有嚴(yán)格考慮,如果網(wǎng)站采用者不自己修改這些程序而直接照搬得話,很可能存在嚴(yán)重問(wèn)題。 二、編程漏洞的類型 網(wǎng)頁(yè)編程相對(duì)比較簡(jiǎn)單,漏洞的形成實(shí)例雖然很多,但是,都有一些內(nèi)在地共同點(diǎn)可以尋找,以此歸納出一些共同的特點(diǎn),供我們參考。 1、用戶輸入驗(yàn)證不 在網(wǎng)站編程而言,有一個(gè)規(guī)則可能我們需要牢記,那是對(duì)于用戶和用戶的輸入,都必須抱懷疑態(tài)度,不能完全信任。所以,對(duì)于用戶的輸入,不能簡(jiǎn)單的直接采用,而必須經(jīng)過(guò)嚴(yán)格驗(yàn)證,確定用戶的輸入是否符合輸入規(guī)則才可以現(xiàn)實(shí)、錄入數(shù)據(jù)庫(kù)?偨Y(jié)用戶輸入驗(yàn)證,應(yīng)該包括以下幾個(gè)方面。 (1)輸入信息長(zhǎng)度驗(yàn)證 這一點(diǎn)可能我們比較少注意,因?yàn)槲覀兺J(rèn)為一般用戶不會(huì)故意將輸入過(guò)分拉長(zhǎng),稍微有一些用戶可能搗亂,但是,在這一點(diǎn)上可能沒(méi)有危害。其實(shí),只要我們仔細(xì)考慮,如果不進(jìn)行輸入驗(yàn)證,可能的危害會(huì)相當(dāng)大,為什么?如果用戶輸入的信息達(dá)到幾個(gè)兆,而我們的程序又沒(méi)有驗(yàn)證長(zhǎng)度的話,想想的危害有:a、程序驗(yàn)證出錯(cuò);b、變量占用大量?jī)?nèi)存,出現(xiàn)內(nèi)存溢出,至使服務(wù)器服務(wù)停止甚至關(guān)機(jī)。這樣的危害多大? (2)輸入信息敏感字符檢查 這一點(diǎn)平時(shí)在設(shè)計(jì)程序的時(shí)候我們可能都有注意,主要關(guān)注的是一些JavaScript的敏感字符,比如在設(shè)計(jì)留言版的時(shí)候,我們會(huì)將“