2012-11-22 75 views
0

不久之前,我升級到了專用服務器,爲了讓它更具成本效益,我決定在服務器上向我認識的人(朋友,家人)租用一些空間。我認識的一些人有一些負責網站開發的人,我想保護自己免受未經授權的訪問,或者我租用的任何其他人。我該如何避免php進入某個目錄?

我最關心的一個案例是PHP通過從其根目錄訪問../訪問其他用戶或我。

例如,他們可以這樣做:foreach(glob('../*/*.*') as $some_file){unlink($some_file);}這將刪除同級用戶的所有文件。

我該如何避免人們做這種事情?

+0

無論何時您將用戶輸入傳遞給文件訪問函數,都必須使用strpos()驗證是否存在「../」,並檢查是否存在NULL字節。 –

+1

這個惡意行爲的名稱,順帶說一句,是[目錄遍歷攻擊](http://en.wikipedia.org/wiki/Directory_traversal_attack) –

+0

我會使用一些設計用於管理機器的東西,例如cPanel&WHM(似乎大多數共享主機使用它);認爲它錯了可能是一個嚴重的問題 – 2012-11-22 02:28:36

回答

2

這聽起來像是一個可以通過系統管理解決的問題。

  • 編輯php.ini文件,限制在open_basedir的
  • 值確保您的用戶被分配到不同的組
  • 文件模式的主目錄OG-WX(如744,740,700,等等。 ..)Apache服務器的
  • 運行多個實例,可能在不同的用戶/組

這真的取決於你想要多少精力投入,以及如何強大的安全需要是。


http://www.php.net/manual/en/ini.core.php#ini.open-basedir http://wiki.apache.org/httpd/RunningMultipleApacheInstances

0

您應該考慮的權限dctrucker後,確保Apache進程,如果你與mod_php的或PHP進程運行PHP如果您在fast-cgi上運行它,則沒有權限更改權限。如果安全性是你的擔心,我不會建議base_opendir方法,因爲那時你可以使用ini_set來覆蓋它(所以如果使用這種方法,你應該禁用ini_set)。

相關問題