is uploaded file函式引發的問題

2021-05-21 23:21:19 字數 1371 閱讀 1106

起因

在利用moophp的乙個專案中,接到使用者反饋說其所有客戶不能上傳檔案,都返回失敗。經過排查發現是php中的is_uploaded_file函式在 搗鬼。

細節分析

在正常情況下,通過php 上傳檔案 ,需要通過is_uploaded_file函式來判斷檔案是否是通過 http post 上傳的,這可以用來確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案,例如 /etc/passwd。

而本次遇到的問題是本來應該是c:/windows/temp/php99.tmp這樣的tmp_name,卻變成了c://windows //temp//php99.tmp這種,導致is_uploaded_file函式返回錯誤的資訊。

處理方式

在加上如下**後,問題解決。

$file['tmp_name'] = str_replace(』』, 『//』, $file['tmp_name']);

注意,「」實際字串就是兩個/,其他兩個是用來表示轉義的。

深入研究

為什麼在默寫特定的環境下會出現這種情況呢,我們來看如下分析:

; magic quotes for incoming get/post/cookie data.

magic_quotes_gpc = on

在php的預設配置中magic_quotes_gpc是on的,而開啟了magic_quotes_gpc引數的php環境會自動對get/post /cookie新增addslashes效果。注意,並不會為$_files新增addslashes效果。

而當magic_quotes_gpc是off的時候,由於為$_files陣列新增了addslashes作用,反而出現了問題。也就在 magic_quotes_gpc是off的php環境下都會出現此問題。

順帶說句,svn上的moophp**已經修復此問題。

is_uploaded_file函式解析

判斷檔案是否是通過 http post 上傳的

bool is_uploaded_file ( string $filename )

如果 filename 所給出的檔案是通過 http post 上傳的則返回 true。這可以用來確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案,例如 /etc/passwd。 這種檢查顯得格外重要,如果上傳的檔案有可能會造成對使用者或本系統的其他使用者顯示其內容的話。

為了能使 is_uploaded_file() 函式正常工作,必段指定類似於 $_files['userfile']['tmp_name'] 的變數,而在從客戶端上傳的檔名 $_files['userfile']['name'] 不能正常運作。

WaitForSingleObject函式的使用

程式舉例 1 建立對話方塊應用程式,專案名稱為mytestthread 2 新增按鈕,命名為啟動和停止,在對話方塊中增加編輯框,id為idc time,3 增加成員變數,handle m hthread 2 此為執行緒的控制代碼 4 定義全域性變數,用來控制線程的執行與否 volatile bool...

cvCreateVideoWriter函式使用

cvcreatevideowriter函式使用 2011 11 04 15 47 例如,cv fourcc p i m 1 是mpeg 1 codec,cv fourcc m j p g 是motion jpeg codec cv fourcc m p 4 2 mpeg 4.2 codec cv f...

CentimetersToPoints函式出錯

在word開發中,碰到centimeterstopoints函式呼叫出錯,提示未指定的錯誤的問題。解決辦法為修改centimeterstopoint函式 匯入msword.olb後的centimeterstopoint函式如下 修改後的centimeterstopoint函式如下,紅色表示的部分為增...