2014-04-22 129 views
3

我有LAMP安裝在我的服務器,我使用虛擬主機映射域到子目錄。我需要允許我的客戶使用FTP上傳文件(包括php)到他們的服務器。避免用戶去../../

的問題是,使用xxx.com.br上傳的文件test.php的,並執行一個域中的客戶也喜歡:

xxx.com.br/test.php

測試的內容.php if file_put_contents(「../../ xxx.txt」,「teste」)和它的工作!文件xxx.txt在他的域名文件夾上創建了2個層級!我如何防止這種情況發生?

+0

這些是個別的apache虛擬主機嗎? – h2ooooooo

+0

你可能會使用[open_basedir](http://www.php.net/manual/en/ini.core.php#ini.open-basedir)之類的東西來限制用戶只是他們的文件夾。但是,如果你允許htaccess文件,它可以被覆蓋。 –

+3

您允許使用上傳任意文件,並將其放入您網站的文檔根目錄中?祝你好運**不**讓你的服務器完全被破壞... –

回答

2

不要讓PHP進程訪問它不打算達到的目錄。

這就是整個權限系統的要點。

在Linux中,PHP通常以自己的用戶身份運行,只要確保用戶對任何不想公開的文件都沒有讀或寫權限即可。

+0

這會保護服務器,但它不會阻止用戶(假設有多個客戶)訪問彼此的內容。 –

+0

@ KarolyHorvath通常情況下,這是「安全的」,通過選擇高度隨機化,很難猜測的路徑到web根目錄。更安全的是將PHP用作(F)CGI可執行文件。它可以配置爲以擁有文檔根目錄的用戶身份運行。然後管理員必須確保用戶沒有文件訪問權限,除了它的文檔根目錄(和大多數系統上的'/ tmp') – hek2mgl

+1

我很高興你已經將「secured」這個詞放在引號中; ...) –

0

爲此目的存在open_basedir配置指令。有關它的更多信息,例如here

此外,使用FastCGI可以讓每個腳本在其所有者下運行。有關它的更多信息,例如here