CGI教學:CGI安全問題(一)
發表時間:2024-05-16 來源:明輝站整理相關軟件相關文章人氣:2
[摘要]在計算機領域——尤其在Internet上——盡管大部分Web服務器所編的程序都盡可能保護自己的內容不受侵害,但只要CGI腳本中有一點安全方面的失誤--口令文件、私有數據、以及任何東西,就能使入侵者能訪問計算機。遵循一些簡單的規則并保持警惕能使自己的CGI腳本免受侵害,從而可以保護自己的權益。1. ...
在計算機領域——尤其在Internet上——盡管大部分Web服務器所編的程序都盡可能保護自己的內容不受侵害,但只要CGI腳本中有一點安全方面的失誤--口令文件、私有數據、以及任何東西,就能使入侵者能訪問計算機。遵循一些簡單的規則并保持警惕能使自己的CGI腳本免受侵害,從而可以保護自己的權益。
1. 腳本和程序
在開始決定采用何種語言編寫CGI腳本時應考慮幾個因素,其中之一應是安全性。Shell 腳本,Perl程序和C可執行程序是CGI腳本最常采用的形式,從安全性角度來說每種都備有優缺。盡管沒有哪一種是最好的--基于其他方面的考慮,如速度和可重用性--每種都有實用的領域。
Shell腳本一般用于小的、快速的甚至可以用完就不要的CGI程序,因此,編寫它們時常常不考慮安全性。這種疏忽可以導致一些缺陷,使得僅對系統具有一般知識的人也能進入系統任意走動。
盡管Shell CGI 程序最容易寫,甚至只需拼湊一下即可,但控制它們卻很困難,因為它們一般是通過執行外部的其他程序來完成工作的。這就導致一些可能的隱患,CGI 程序會繼承任何它使用的程序的安全問題。
例如,常用UNIX實用程序 awk對于它能處理的數據的數量有一些相當嚴格限制。如果在CGI腳本中使用awk,那么該程序也就有了同樣的限制。Perl比Shell腳本更進一步。Perl用于CGI編程有很多優點,并且相當安全。但Perl能給CGI 作者提供足夠的靈活性從而導致對安全性的錯誤感覺。例如,Perl是解釋型的。這意味著它實際在調用時是先編譯,然后每次執行一步。這就很容易使得不正確的用戶數據被包括進來作為代碼的一部分,從而錯誤地進行解釋,形成程序中止原因。
最后談談C。C迅速成為標準應用開發語言,幾乎所有的UNIX和windows NT系統都是用它開發的。從安全性的角度來看C 似乎是很不錯,但由于它的流行性,它的好幾種安全性問題已廣為人知,而這些問題也能很容易地被人利用。
例如,C 對串處理非常差。它不做任何自動的定位或清理而讓編程者自己處理所有事情。在處理串時,大部分C 程序員都是簡單地建立一個預定義的空間并希望它足夠大以便處理用戶輸入的任何內容。
當然,Shell腳本、Perl和C 不是僅有的編寫CGI腳本語言。實際上,任何可以按預定義的方式與Web服務器進行交互的計算機語言都可以用于編寫CGI程序。在UNIX和Windows NT服務器上,數據是通過環境變量和標準輸入(stdin) 傳給腳本的,所以任何能從這兩種數據源讀取并寫入標準輸出(sidout)的語言都能用于創建CGI:awk、FORTRAN、C++、Basic和COBOL,等。windows的程序員可以使用流行的Visual Basic,這意味著有經驗的VB程序員不必去學一門新語言。Macintosh使用AppleEvents、和AppleScript與CGI程序進行通信,所以任何可以讀寫這兩者的語言都可使用。
不過,Shell腳本(不管使用那種Shell)、Perl和C仍是最流行為的編寫CGI腳本的語言。這并不是說必須使用它們了;只是說大部程序的庫——即大部分經過測試的安全的庫——都是用這三種語言編寫的。如果自己來選擇CGI編程語言,最好是借鑒前人的經驗。