CGI圖文說明教程(9)編寫安全的CGI腳本
發(fā)表時間:2023-12-26 來源:明輝站整理相關軟件相關文章人氣:
[摘要]編寫安全的CGI腳本 不管在什么時候,一個程序與網(wǎng)絡客戶端聯(lián)系的時候,就有可能客戶端會攻擊這個程序以獲得未授權的訪問。即使是無惡意地看看你的腳本也會你的系統(tǒng)的完整型構成危險。出于這種想法,本節(jié)教程將教你編寫安全的腳本以避免任何的攻擊! ∈紫纫⒁鈋val語句。PERL和Bourne shell...
編寫安全的CGI腳本
不管在什么時候,一個程序與網(wǎng)絡客戶端聯(lián)系的時候,就有可能客戶端會攻擊這個程序以獲得未授權的訪問。即使是無惡意地看看你的腳本也會你的系統(tǒng)的完整型構成危險。出于這種想法,本節(jié)教程將教你編寫安全的腳本以避免任何的攻擊。
首先要注意eval語句。PERL和Bourne shell語言為用戶提供了一個eval命令,它允許你構造一個字符串并且有個注釋器來執(zhí)行這個字符串。這是一個不安全的隱患。我們來觀察一下以下的語句,它是用Bource shell編寫的:
eval `echo $QUERY_STRING awk 'BEGIN{RS="&"} {printf "QS_%s\n",$1}' `
這條語句將查詢字符串轉換未一系列的可變的設置命令。但是不幸的是,這個腳本可以通過發(fā)送給它一個以逗號”;”開頭的查詢字符串來攻擊。看看這有多么的危險!
其次,不要委任客戶端做任何事情。一個品德好的客戶端將會避免發(fā)送任何帶有攻擊性的查詢字符串給Bourne shell,這樣就會避免腳本錯誤解釋字符串而導致一些不安全的事情。但是,”防人之心不可無”,對于哪些品德惡劣的客戶端可能就會使用一些特殊的字符串來混淆你的腳本以獲得未授權的訪問。所以一定不要委托客戶端做任何事情。
還要十分注意popen()和system()的使用。如果你使用任何來自客戶端的數(shù)據(jù)構造一個命令行來調用popen()或者system(),要確信在任何字符之前加一個反斜桿,因為這樣會在調用函數(shù)之前給Bourne shell以特殊的意義。具體做法你可以利用簡短的C函數(shù)來實現(xiàn)。
最后,為了安全起見,關閉服務端附件(SSI)。如果很不幸,你的服務器支持SSI,那么請一定要為你的腳本目錄關閉它!這個SSI可能被客戶端濫用,他們可以偷看到他們發(fā)送的字符串直接輸出的腳本。
本腳本只是概括性質地介紹安全的措施,如果有知道關于安全和WWW的問題,你可以參見一些WWW安全常見問題文本(FAQ)。