| 導購 | 订阅 | 在线投稿
分享
 
 
 

CGI編程的安全性 -- 文件名

來源:互聯網  2008-06-01 01:10:34  評論

文件名是提交給CGI腳本的一種數據,但假如不小心的話,卻能導致許多麻煩.想要打開一個用戶提供的名字的文件時,都必須嚴格檢查這個文件名以免招至系統重要文件泄露.用戶輸入一個文件名,有可能就試圖打開輸入危險字符串!例如,用戶輸入的文件名中包含路徑字符,如目錄斜杠和雙點!盡管你期望的是輸入公用的文件名:例如report.txt.但結果卻可能是/report.txt或../../report.txt,系統中所有文件就有可能泄露出去,後果是可想而知的.

假如用戶輸入一個已有文件名或對系統的運作有很重要的文件件名!比如輸入的文件名是/etc/passwd,那用戶就可以對該文件任意修改.可能第二天登錄網站時進行更新的時候,你就發現密碼被別人修改了,那時你只有寫信給系統治理員請求幫助了.所以在編寫CGI腳本時要保證所有字符都是合法的.

下面這段代碼能把不合法的字符過濾掉.

if(($file_name=~/[^a-zA-Z_\.]/)||($file_name=~/^\./))

{#文件包含有不合法字符. }

最好將上面代碼做爲一個子程序,這樣就可以重複地調用它這樣也方便于修改.對于不答應輸入Html下面有兩個方案.

1、有種簡單的方法就是不答應小于號(<)和大于(>)因爲所有HTML語法必須包含在這兩個字符間,假如碰到它們就返回一個錯誤是一種防止HTML被提交的簡單的方法.下面一行Perl代碼快速地清除了這兩個字符:

$user_input=~s/<>//g;

2、複雜一點的方法就是將這兩個字符轉換成它們的HTML換碼(非凡的代碼),用于表示每個字符而不使用該字符本身.下面的代碼通過全部用&lt;替換了小于符號,用&gt;替換了大于符號,從而完成了轉換:

$user_input=~s/</&lt;/g;

$user_input=~s/>/&gt;/g;

文件名是提交給CGI腳本的一種數據,但假如不小心的話,卻能導致許多麻煩.想要打開一個用戶提供的名字的文件時,都必須嚴格檢查這個文件名以免招至系統重要文件泄露.用戶輸入一個文件名,有可能就試圖打開輸入危險字符串!例如,用戶輸入的文件名中包含路徑字符,如目錄斜杠和雙點!盡管你期望的是輸入公用的文件名:例如report.txt.但結果卻可能是/report.txt或../../report.txt,系統中所有文件就有可能泄露出去,後果是可想而知的. 假如用戶輸入一個已有文件名或對系統的運作有很重要的文件件名!比如輸入的文件名是/etc/passwd,那用戶就可以對該文件任意修改.可能第二天登錄網站時進行更新的時候,你就發現密碼被別人修改了,那時你只有寫信給系統治理員請求幫助了.所以在編寫CGI腳本時要保證所有字符都是合法的. 下面這段代碼能把不合法的字符過濾掉. if(($file_name=~/[^a-zA-Z_\.]/)||($file_name=~/^\./)) {#文件包含有不合法字符. } 最好將上面代碼做爲一個子程序,這樣就可以重複地調用它這樣也方便于修改.對于不答應輸入Html下面有兩個方案. 1、有種簡單的方法就是不答應小于號(<)和大于(>)因爲所有HTML語法必須包含在這兩個字符間,假如碰到它們就返回一個錯誤是一種防止HTML被提交的簡單的方法.下面一行Perl代碼快速地清除了這兩個字符: $user_input=~s/<>//g; 2、複雜一點的方法就是將這兩個字符轉換成它們的HTML換碼(非凡的代碼),用于表示每個字符而不使用該字符本身.下面的代碼通過全部用&lt;替換了小于符號,用&gt;替換了大于符號,從而完成了轉換: $user_input=~s/</&lt;/g; $user_input=~s/>/&gt;/g;
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有