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

CGI編程的安全 -- 文件名

[摘要]文件名是提交給CGI腳本的一種數(shù)據(jù),但如果不小心的話,卻能導(dǎo)致許多麻煩.想要打開一個(gè)用戶提供的名字的文件時(shí),都必須嚴(yán)格檢查這個(gè)文件名以免招至系統(tǒng)重要文件泄露.用戶輸入一個(gè)文件名,有可能就試圖打開輸入危險(xiǎn)字符串!例如,用戶輸入的文件名中包含路徑字符,如目錄斜杠和雙點(diǎn)!盡管你期望的是輸入公用的文件名:...

文件名是提交給CGI腳本的一種數(shù)據(jù),但如果不小心的話,卻能導(dǎo)致許多麻煩.想要打開一個(gè)用戶提供的名字的文件時(shí),都必須嚴(yán)格檢查這個(gè)文件名以免招至系統(tǒng)重要文件泄露.用戶輸入一個(gè)文件名,有可能就試圖打開輸入危險(xiǎn)字符串!例如,用戶輸入的文件名中包含路徑字符,如目錄斜杠和雙點(diǎn)!盡管你期望的是輸入公用的文件名:例如report.txt.但結(jié)果卻可能是/report.txt或../../report.txt,系統(tǒng)中所有文件就有可能泄露出去,后果是可想而知的. 如果用戶輸入一個(gè)已有文件名或?qū)ο到y(tǒng)的運(yùn)作有很重要的文件件名!比如輸入的文件名是/etc/passwd,那用戶就可以對該文件任意修改.可能第二天登錄網(wǎng)站時(shí)進(jìn)行更新的時(shí)候,你就發(fā)現(xiàn)密碼被別人修改了,那時(shí)你只有寫信給系統(tǒng)管理員請求幫助了.所以在編寫CGI腳本時(shí)要保證所有字符都是合法的.
下面這段代碼能把不合法的字符過濾掉.if(($file_name=~/[^a-zA-Z_\.]/)
($file_name=~/^\./))
{#文件包含有不合法字符. }最好將上面代碼做為一個(gè)子程序,這樣就可以重復(fù)地調(diào)用它這樣也方便于修改.對于不允許輸入HTML下面有兩個(gè)方案.1、有種簡單的方法就是不允許小于號(<)和大于(>)因?yàn)樗蠬TML語法必須包含在這兩個(gè)字符間,如果碰到它們就返回一個(gè)錯(cuò)誤是一種防止HTML被提交的簡單的方法.下面一行Perl代碼快速地清除了這兩個(gè)字符:$user_input=~s/<>//g;2、復(fù)雜一點(diǎn)的方法就是將這兩個(gè)字符轉(zhuǎn)換成它們的HTML換碼(特殊的代碼),用于表示每個(gè)字符而不使用該字符本身.下面的代碼通過全部用&lt;替換了小于符號,用&gt;替換了大于符號,從而完成了轉(zhuǎn)換:$user_input=~s/</&lt;/g;
$user_input=~s/>/&gt;/g;