<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > CGI安全問(wèn)題專(zhuān)題

CGI安全問(wèn)題專(zhuān)題

作者: 時(shí)間:2012-05-17 來(lái)源:網(wǎng)絡(luò ) 收藏
在 計算機 領(lǐng)域——尤其在Internet上——盡管大部分Web 服務(wù) 器所編的程序都盡可能保護自己的內容不受侵害,但只要腳本中有一點(diǎn)安全方面的失誤--口令文件、私有數據、以及任何東西,就能使 入侵 者能訪(fǎng)問(wèn) 計算機 。遵循一些簡(jiǎn)單的規則并保持警惕能使自己的腳本免受侵害,從而可以保護自己的權益。 1. 腳本和程序 在開(kāi)始決定采用何種語(yǔ)言編寫(xiě)腳本時(shí)應考慮幾個(gè)因素,其中之一應是安全性。Shell 腳本,Perl程序和C可執行程序是CGI腳本最常采用的形式,從安全性角度來(lái)說(shuō)每種都備有優(yōu)缺。盡管沒(méi)有哪一種是最好的--基于其他方面的考慮,如速度和可重用性--每種都有實(shí)用的領(lǐng)域。 Shell腳本一般用于小的、快速的甚至可以用完就不要的CGI程序,因此,編寫(xiě)它們時(shí)常常不考慮安全性。這種疏忽可以導致一些缺陷,使得僅對系統具有一般 知識 的人也能進(jìn)入系統任意走動(dòng)。 盡管Shell CGI 程序最容易寫(xiě),甚至只需拼湊一下即可,但控制它們卻很困難,因為它們一般是通過(guò)執行外部的其他程序來(lái)完成工作的。這就導致一些可能的隱患,CGI 程序會(huì )繼承任何它使用的程序的。 例如,常用UNIX實(shí)用程序 awk對于它能處理的數據的數量有一些相當嚴格限制。如果在CGI腳本中使用awk,那么該程序也就有了同樣的限制。Perl比Shell腳本更進(jìn)一步。Perl用于CGI 編程 有很多優(yōu)點(diǎn),并且相當安全。但Perl能給CGI 作者提供足夠的靈活性從而導致對安全性的錯誤感覺(jué)。例如,Perl是解釋型的。這意味著(zhù)它實(shí)際在調用時(shí)是先編譯,然后每次執行一步。這就很容易使得不正確的用戶(hù)數據被包括進(jìn)來(lái)作為 代碼 的一部分,從而錯誤地進(jìn)行解釋?zhuān)纬沙绦蛑兄乖颉?最后談?wù)凜。C迅速成為標準應用開(kāi)發(fā)語(yǔ)言,幾乎所有的UNIX和windows NT系統都是用它開(kāi)發(fā)的。從安全性的角度來(lái)看C 似乎是很不錯,但由于它的流行性,它的好幾種安全性問(wèn)題已廣為人知,而這些問(wèn)題也能很容易地被人利用。 例如,C 對串處理非常差。它不做任何自動(dòng)的定位或清理而讓 編程 者自己處理所有事情。在處理串時(shí),大部分C 程序員都是簡(jiǎn)單地建立一個(gè)預定義的空間并希望它足夠大以便處理用戶(hù)輸入的任何內容。 當然,Shell腳本、Perl和C 不是僅有的編寫(xiě)CGI腳本語(yǔ)言。實(shí)際上,任何可以按預定義的方式與Web 服務(wù) 器進(jìn)行交互的 計算機 語(yǔ)言都可以用于編寫(xiě)CGI程序。在UNIX和Windows NT 服務(wù) 器上,數據是通過(guò)環(huán)境變量和標準輸入(stdin) 傳給腳本的,所以任何能從這兩種數據源讀取并寫(xiě)入標準輸出(sidout)的語(yǔ)言都能用于創(chuàng )建CGI:awk、FORTRAN、C++、Basic和COBOL,等。windows的程序員可以使用流行的Visual Basic,這意味著(zhù)有經(jīng)驗的VB程序員不必去學(xué)一門(mén)新語(yǔ)言。Macintosh使用AppleEvents、和AppleScript與CGI程序進(jìn)行通信,所以任何可以讀寫(xiě)這兩者的語(yǔ)言都可使用。 不過(guò),Shell腳本(不管使用那種Shell)、Perl和C仍是最流行為的編寫(xiě)CGI腳本的語(yǔ)言。這并不是說(shuō)必須使用它們了只是說(shuō)大部程序的庫——即大部分經(jīng)過(guò)測試的安全的庫——都是用這三種語(yǔ)言編寫(xiě)的。如果自己來(lái)選擇CGI 編程 語(yǔ)言,最好是借鑒前人的經(jīng)驗。 2. 誰(shuí)也不信 幾乎所有的CGI 都來(lái)自與用戶(hù)的交互。接收來(lái)自外部數據源的輸入之后一個(gè)簡(jiǎn)單的、可預見(jiàn)的CGI程序突然向多方向伸展,每個(gè)方面都可能有最小的縫隙使得“黑客”可以溜進(jìn)來(lái)。正是與用戶(hù)的這種交互——通過(guò)表單或文件路徑——才給予了CGI 腳本這種能力,但同時(shí)也使得它們成了運行在Web 服務(wù) 器上的最潛在的危險部分。 編寫(xiě)安全的CGI 腳本很大程度上是創(chuàng )造性和妄想的結合。編寫(xiě)者必須有足夠的創(chuàng )造性才能想到用戶(hù)使用的,不管是無(wú)意地還是別的所有的可能隱含導致問(wèn)題的發(fā)送數據的方式。而且必須有點(diǎn)妄想,因為有可能不知道什么時(shí)候、什么地方、他們將會(huì )一一加以試驗。 2.1 兩種導致問(wèn)題的方式 當用戶(hù)登錄進(jìn)入Web 站點(diǎn)并開(kāi)始進(jìn)行交互訪(fǎng)問(wèn)時(shí),他們能以?xún)煞N方式惹麻煩。一種是不遵守規則,歪曲或違反頁(yè)面中建立的每個(gè)限制或約束;另一種方式是按要求去做。 大部分CGI 腳本是作為HTML表單的后臺運行的,負責處理由用戶(hù)輸入的信息并提供某種定制的輸出。因為在這種情況下,大部分CGI 腳本編寫(xiě)時(shí)都等待某種特殊格式的數據。它們期望用戶(hù)的輸入能匹配收集并發(fā)送信息的表單。不過(guò)事情并不總是這樣。用戶(hù)可以有許多種辦法繞過(guò)這些預定義的格式而給腳本發(fā)送一些看起來(lái)是隨機的數據。CGI 程序必須對此有所準備。 其次,用戶(hù)可以給CGI 腳本發(fā)送所期望的數據類(lèi)型,按預期的形式在表單中填入每個(gè)字段。這種類(lèi)型的提交可以是想像中的來(lái)自某個(gè)與站點(diǎn)交互的無(wú)意的用戶(hù),也可能來(lái)自某個(gè)惡意的“黑客”,憑借他有關(guān)操作系統和Web 服務(wù) 器 軟件 的 知識 并利用常見(jiàn)的 編程 錯誤。這些 入侵 ,表面上一切都正常,卻是最危險的、最難檢測出來(lái)。Web 站點(diǎn)安全性依賴(lài)干這種 入侵 的防止。 2.2 不要相信表單數據 在CGI 編程 中最常見(jiàn)的安全失誤就是相信從表單傳到腳本的數據,用戶(hù)是未知的一大堆人,他們總能找到一些 編程 人員從來(lái)沒(méi)想到過(guò)的發(fā)送數據的方法--而且是程序員認為幾乎不可能的方法。 腳本必須對這些加以考慮。例如,下面這些情形都是可能的: 1)從一組單單選按鈕中選擇的結果可能不是表單中提供的選項之一。 2)來(lái)自某個(gè)文本字段的數據長(cháng)度可能大于MAXLENGTH字段允許的長(cháng)度。 3)字段本身的名字可能與表單中指定的不相符。 2.3 不合理數據的來(lái)源 因—些無(wú)意的或是有意的原因,導致自己的腳本接收到不知道如何去處理的數據,有可能導致非預期的——同時(shí)很危險的——行為。 下面的 代碼 實(shí)現了一種表單并向某個(gè)搜索yahoo! 數據庫 的CGI腳本送垃圾。該腳本設計得很好并且很安全,因為它忽略了不認識的輸入。 FORM METHOD=POST ACTION= http://search.yahoo.com/bin/search > Enter your name,first then last: INPUT TYPE=TEXT NAME=first> INPUT TYPE=TEXT NAME=last> /FORM 也許用戶(hù)碰巧(或者意識地)將URL編輯為這個(gè)CGI腳本。當瀏覽器向CGI程序提交數據時(shí),要簡(jiǎn)單地將輸入表單中的數據連到CGI的URL上(用于GET METHODS),就像用戶(hù)可以很容易地將Web頁(yè)面地址輸入到他的瀏覽器一樣,用戶(hù)也可以自己修改發(fā)送給這個(gè)腳本的數據。 例如,當單擊表單上的Submit按鈕時(shí),Netscape將一個(gè)長(cháng)串字符放入Location字段,該串由CGI的URL后接一串數據組成,大部分看起來(lái)像表單中定義的NAMES和VALUES。如果愿意的話(huà),可以自由地編輯Location字段的內容并按自己的意愿修改數據:增加表單中沒(méi)有的字段,擴展由MAXLENGTH選項限制的文本數據,或者幾乎任何對象。以下顯示了某CGI腳本預期從表單中提交的URL。 http://www.altavista.digit.com/cgi-bin?pg=qwhat=webimt=q=%22An+Entirely+Other%22 用戶(hù)可以修改同一URL,CGI腳本仍被調用,但現在接收的是非預期的數據。為了保證安全,該腳本應該在編寫(xiě)時(shí)就設計為能將這種輸入識別為不被要求的數據并加以拒絕。 最后,某個(gè)有野心的黑客也許會(huì )寫(xiě)一個(gè)程序連到Web上的 服務(wù) 器并假裝是一個(gè)Web瀏覽器。該程序可能做一些任何一個(gè)真正的web瀏覽器從未做過(guò)的事,例如給CGI腳本發(fā)送成百兆字節的數據。如果CGI腳本不限制從POST METHOD讀取數據,那怎么辦?它有可能會(huì )崩潰,也許允許那個(gè)崩潰了系統的人訪(fǎng)問(wèn)系統。 2.4 拒絕不合要求的表單數據 CGI腳本可以有幾種方式拒絕接收提交給它的非預期的輸入。編寫(xiě)CGI時(shí)應該使用其中一些 技巧 或所有這些 技巧 。 首先,CGI 腳本應設置接收多少數據的限制,不僅限制整個(gè)提交,也限制提交中的每個(gè)NAME/VALUE對。例如,CGI腳本讀取POST METHOD,檢查CONTENT-LENGTH環(huán)境變量的大小來(lái)確定某輸入是不是合理的預期輸入。如果CGI 腳本設計接收的唯一數據是某人的姓名,那么如果CONTENT-LENGTH大于100字節,就應該有理由返回一個(gè)錯誤。沒(méi)有哪個(gè)合理的姓有那么長(cháng),通過(guò)設置限制,就能使腳本不再盲目地讀取發(fā)送給它的內容。 注意 令人高興的是,不必擔心去限制通過(guò)POST方法提交的數據。GET是自限制的并且不會(huì )向腳本發(fā)送多于1KB的數據。 服務(wù) 器自動(dòng)限制放人QUERY-STRING環(huán)境變量中的數據的大小,而這正是GET發(fā)送給CGI程序的信息。 當然,黑客們可以很容易地將表單由GET改為PUT從而繞過(guò)這種內置的限制。至少,程序應該檢查一下數據是否是用預期的方法提交的;最好是能正確且安全地處理兩種方法。 下一步,應保證腳本知道在接收到不能識別的數據時(shí)該怎么辦,例如,如果某表單要求用戶(hù)選擇兩個(gè)單選按鈕之一,腳本就不應該假設因為一個(gè)
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: CGI 安全問(wèn)題

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>