明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

CGI教學(xué):CGI安全問題(一)

[摘要]在計算機領(lǐng)域——尤其在Internet上——盡管大部分Web服務(wù)器所編的程序都盡可能保護自己的內(nèi)容不受侵害,但只要CGI腳本中有一點安全方面的失誤--口令文件、私有數(shù)據(jù)、以及任何東西,就能使入侵者能訪問計算機。遵循一些簡單的規(guī)則并保持警惕能使自己的CGI腳本免受侵害,從而可以保護自己的權(quán)益。1. ...
在計算機領(lǐng)域——尤其在Internet上——盡管大部分Web服務(wù)器所編的程序都盡可能保護自己的內(nèi)容不受侵害,但只要CGI腳本中有一點安全方面的失誤--口令文件、私有數(shù)據(jù)、以及任何東西,就能使入侵者能訪問計算機。遵循一些簡單的規(guī)則并保持警惕能使自己的CGI腳本免受侵害,從而可以保護自己的權(quán)益。

1. 腳本和程序

 在開始決定采用何種語言編寫CGI腳本時應(yīng)考慮幾個因素,其中之一應(yīng)是安全性。Shell 腳本,Perl程序和C可執(zhí)行程序是CGI腳本最常采用的形式,從安全性角度來說每種都備有優(yōu)缺。盡管沒有哪一種是最好的--基于其他方面的考慮,如速度和可重用性--每種都有實用的領(lǐng)域。

 Shell腳本一般用于小的、快速的甚至可以用完就不要的CGI程序,因此,編寫它們時常常不考慮安全性。這種疏忽可以導(dǎo)致一些缺陷,使得僅對系統(tǒng)具有一般知識的人也能進入系統(tǒng)任意走動。

 盡管Shell CGI 程序最容易寫,甚至只需拼湊一下即可,但控制它們卻很困難,因為它們一般是通過執(zhí)行外部的其他程序來完成工作的。這就導(dǎo)致一些可能的隱患,CGI 程序會繼承任何它使用的程序的安全問題。

 例如,常用UNIX實用程序 awk對于它能處理的數(shù)據(jù)的數(shù)量有一些相當(dāng)嚴(yán)格限制。如果在CGI腳本中使用awk,那么該程序也就有了同樣的限制。Perl比Shell腳本更進一步。Perl用于CGI編程有很多優(yōu)點,并且相當(dāng)安全。但Perl能給CGI 作者提供足夠的靈活性從而導(dǎo)致對安全性的錯誤感覺。例如,Perl是解釋型的。這意味著它實際在調(diào)用時是先編譯,然后每次執(zhí)行一步。這就很容易使得不正確的用戶數(shù)據(jù)被包括進來作為代碼的一部分,從而錯誤地進行解釋,形成程序中止原因。

 最后談?wù)凜。C迅速成為標(biāo)準(zhǔn)應(yīng)用開發(fā)語言,幾乎所有的UNIX和windows NT系統(tǒng)都是用它開發(fā)的。從安全性的角度來看C 似乎是很不錯,但由于它的流行性,它的好幾種安全性問題已廣為人知,而這些問題也能很容易地被人利用。

 例如,C 對串處理非常差。它不做任何自動的定位或清理而讓編程者自己處理所有事情。在處理串時,大部分C 程序員都是簡單地建立一個預(yù)定義的空間并希望它足夠大以便處理用戶輸入的任何內(nèi)容。

 當(dāng)然,Shell腳本、Perl和C 不是僅有的編寫CGI腳本語言。實際上,任何可以按預(yù)定義的方式與Web服務(wù)器進行交互的計算機語言都可以用于編寫CGI程序。在UNIX和Windows NT服務(wù)器上,數(shù)據(jù)是通過環(huán)境變量和標(biāo)準(zhǔn)輸入(stdin) 傳給腳本的,所以任何能從這兩種數(shù)據(jù)源讀取并寫入標(biāo)準(zhǔn)輸出(sidout)的語言都能用于創(chuàng)建CGI:awk、FORTRAN、C++、Basic和COBOL,等。windows的程序員可以使用流行的Visual Basic,這意味著有經(jīng)驗的VB程序員不必去學(xué)一門新語言。Macintosh使用AppleEvents、和AppleScript與CGI程序進行通信,所以任何可以讀寫這兩者的語言都可使用。

 不過,Shell腳本(不管使用那種Shell)、Perl和C仍是最流行為的編寫CGI腳本的語言。這并不是說必須使用它們了;只是說大部程序的庫——即大部分經(jīng)過測試的安全的庫——都是用這三種語言編寫的。如果自己來選擇CGI編程語言,最好是借鑒前人的經(jīng)驗。