2013-08-26 61 views
3

我目前有問題上傳文件到服務器的文件名中有撇號。例如O'Connell.doc當文件名中沒有撇號時,表單可以很好地工作。使用撇號時,出現500內部服務器錯誤。它得到form.php?p = apply似乎表單被提交,然後立即失敗。任何想法在哪裏看? 謝謝!上傳帶撇號文件的文件

+0

檢查您的URL是否正確獲取了url_encoded。使用'%27'而不是'''而上傳 –

+0

告訴我們一些代碼。 – Orangepill

+0

@ManojAwasthi在提交表單之前,我需要以某種方式刪除撇號嗎?如何檢查url_encoded問題?謝謝 – Tom

回答

0

聽起來你的表單很容易受到Code Injection攻擊。當文件正在被處理時,撇號被解釋,然後你從那個失敗中得到某種錯誤。

所有的用戶輸入都需要對所有需要的解釋器進行消毒。理想的是,用戶輸入永遠不會被解釋,只會被存儲或調用。因此,不要在輸入中調用shell,而是使用exec或其他您想要的確切可執行文件和參數。

+0

如何防止解釋撇號?我試圖 如果(的sizeof($ _ FILES)> 0){ 的foreach($ _文件作爲$ K => $ v)的{ $ _FILES [$ K] = str_replace函數(陣列( 「\\」,「」 「),」「,$ v); } } – Tom

+0

看起來我需要使用addslashes – Tom

+0

我不是PHP專家,但我確實知道PHP可以很容易地爲您的應用程序添加巨大的安全漏洞。請記住,這種錯誤通常允許任何人執行「服務器」用戶可以執行的服務器上的任何內容。 – jmh

1

只是跳到這裏,我遇到了類似的問題,事實證明,我的主機/服務器有「mod_security」激活,這是默認情況下,阻止該文件。我正在研究一個解決方案,它會在處理之前重寫文件名,看起來好像是或者mod_security需要被禁用。