2010-06-25 85 views
2

嘿,所以我試圖做一個PHP圖像上傳表單。我已經能夠成功解決這個問題,但只能通過將我上傳到777的文件夾的權限,或讀/寫/執行。這對於大型的大型網頁來說並不是一個好主意。我使用的是000webhost,顯然它很糟糕,但它顯然也是最好的免費虛擬主機。我相信我需要做的是以某種方式將任何運行PHP的用戶(在000webhost上)添加到一個組中,然後將該組包含在讀/寫/執行權限中,但保留其他人的「讀取」權限。但是,我不知道該怎麼做。目前我只是通過Filezilla設置權限。我不知道用戶在網絡服務器上運行PHP,我不知道如何添加該用戶以獲得單獨的組權限。另外,我想我想要一個類似的密碼設置文件,只是沒有其他人閱讀,所以表單可以使用PHP來檢查密碼,然後再上傳任何內容。 謝謝PHP權限處理

+1

要查看在服務器上運行php的用戶,只需檢查上載文件的所有者。在服務器上創建的文件將擁有創建它們的流程的所有者(用戶/組)。 – 2010-06-25 07:27:32

+0

我想像所有者將Apache爲上傳的圖像,如果您有ssh訪問權限,您可以使用chown -R the_desired_owner:the_desired_group the_folder更改用戶/組,否則我不認爲如果您只使用該文件夾用於圖片上傳,不存儲任何其他內容 – Luke 2010-06-25 07:42:50

回答

0

我不確定你的主機如何設置它們的東西,但是可以使用它的所有者的權限使用suPHP之類的東西來執行PHP腳本。這聽起來不像你的主機這樣做,在這種情況下,你不能真正阻止人們搞亂你的文件。文件系統安全性是共享主機的固有問題。如果可能,我會建議購買低端VPS(虛擬專用服務器)。

0

將父文件夾CHMOD改爲0777,然後讓PHP調用mkdir()創建文件夾。該文件夾的所有者將與PHP進程的所有者相同,您將能夠move_uploaded_file()到該文件夾​​。

舉例說明,假設您需要上傳到文件夾/app/myapp/data/images。然後,先刪除該文件夾,如果它存在,那麼CHMOD /app/myapp/data/到0777最後寫一個簡單的PHP腳本mkdir('/app/myapp/data/images');

最後不要忘了父文件夾的權限重置爲初始值;)

0

低最終的VPS對於你想要完成的事情來說並不是真的需要。

您遇到的最大問題是主機處理PHP(suPHP,DSO,CGI,mod_php)的方式。根據他們使用加載的方法,PHP處理器將取決於您的權限處理方式。

在這種情況下,似乎PHP只是在Apache中作爲mod_php運行,而沒有以用戶(您自己)的身份運行進程。它只是作爲「無人」運行。

您的主機允許這種情況發生的事實是高度不安全的,我非常建議找到另一個網絡主機,它會嘗試保護您的數據。

一旦你找到一個運行phpSuExec(suPHP)的新主機,你會注意到當涉及到權限時,事情可能會開始與你的腳本一起工作。但是,您將無法再使用777的chmod值。由於安全限制,您能夠達到的最高價格是755。

1

當您允許Web服務器對您的系統進行寫入訪問時,您需要非常小心,尤其是您應該確保正在編寫的文件夾不能用於上傳腳本PHP。這裏是你如何改善事項:

  1. 創建上傳一個文件夾是Web根

  2. 之外這個文件夾添加爲一個虛擬目錄

  3. 創建丹尼斯訪問所有的規則文件夾中的文件。然後添加一些允許訪問特定類型的規則(假設爲.gif,.png,.jpg)

  4. 在您的上傳腳本中,驗證文件的類型是否合適(例如圖片)並且擴展名是適當。

仍然不能保證有人不會以某種方式上傳一個流氓PHP腳本到這個文件夾,但你只需要儘可能多的安全措施。有一些Apache配置涉及到,所以你可能需要做一點挖掘。只是儘量確保最終不可能從您的文件夾中執行PHP。

-phil