2013-05-29 61 views
2

我有一個訪問文件目錄的擴展名。我使用ajax函數發送需要訪問控制器的路徑,並在控制器中使用$ _GET,因爲我沒有弄清楚如何使其工作。

$image_file_path = $_GET["url_region"]; 
$d = dir($image_file_path) or die("File not found!"); 

但是,當然當你要求其他類似../../ ..你可以訪問所有其他目錄。

你能建議我一種方法來消毒嗎?請!

+0

您可以對允許的路徑是什麼非常嚴格,並檢查用戶提供的值是否匹配,但始終容易出現一些錯誤驗證。簡單地檢查URL是否由您的擴展創建更容易。這是通過在URL中擁有一些無人能夠猜到的祕密密鑰完成的,並且您可以使用它來驗證所有參數是否真的來自您的擴展。這就是** cweiske **建議的'cHash'方法爲我的答案+1。 – tmt

+0

@cascaval,謝謝你的解釋。我會研究這個選項:) – Probandot

回答

1

您應該提供一個cHash作爲URL參數,並讓TYPO3驗證。這樣你就可以確定這個URL是由TYPO3本身生成的,因此是有效的。

+2

也許你可以通過給出一些實際的代碼示例來擴展你的答案。 – tmt

0

您可以輕鬆地使用正則表達式來捕獲參數的所有「../」值。另一種方式可能是,在數組中定義可用路徑或其他方法來檢查正確的訪問權限。

1

您應該考慮使用t3lib_div::_GET(),不管php.ini magic_quotes說什麼,都可以忽略參數。