2011-10-07 62 views
2

提供的文件我需要提供一個非共享的上傳使用Apache在Linux上的PHP。apache可以從PHP寫入的目錄,但不會從

我可以很好地處理文件上傳,並將它們移動到所需的文件夾。我想問的是,我該如何做到這一點,即使有人知道該文件夾和文件名,他們也永遠無法通過瀏覽器下載文件。

換句話說,我需要apache能夠將文件移動到文件夾,但無法從該文件夾提供文件。

php可以寫入docroot之外的文件嗎?有什麼我可以用htaccess做什麼?甚至只是linux目錄權限?

我正要創建一個空白的index.html並給這些文件一個包含一個很長的隨機字符串的名稱(使它們無法猜測),但決定必須有更好的方法。

謝謝大家。

回答

2

將文件上傳到Apache DocumentRoot之外。

I.E.

DocumentRoot /var/www/public/ 

(其中你的php文件)

,並上傳在在/ var/WWW /上傳/

+0

所以我正確地認爲即使www -data用戶(apache運行的用戶)理論上可以訪問該文件夾(根據linux權限),它不能讀取該文件夾,因爲它位於docroot之外?而PHP的行爲更像一個shell的登錄用戶? – lynks

+0

Apache將能夠讀取它(因此您將能夠使用該文件與PHP),但它們將永遠不會在外面提供,Apache只會將文檔內部的內容提供給您的訪問者。 – Damien

1

你的是不是一個新的問題 - 很多人(你的真正含稅)有在某些時候發現他們的「上傳」目錄使用的各種文件交易...幸運的是,解決方案很簡單...

您可以使Unix(和,我敢肯定,Windows也)文件和目錄writabl e爲用戶或組,但不是可讀。它有時被稱爲「否定權限」,一些被誤導的個人(以及他們創建的腳本)在這種設置下皺眉,但他們沒有任何問題。

例如,這裏是我的服務器上的一個實際文件。我(「mi」)擁有它,並且組「www」(httpd正在運行)可以寫入。但它不能從它讀取。該系統上的所有其他合法用戶才能閱讀(您可能會或可能不希望爲您的設置):

-rw--w-r-- 1 mi www .... /home/mi/public_html/.../download.log 

八進制模式(使用chmod使用)用於上述設置是0624.你可以改變它以滿足您的需求。例如,如果系統上沒有其他用戶應該能夠訪問該文件,則可以使用0620 ...

您也可以使用Apache的權限設置來阻止目錄服務,但這是遠比Unix文件系統權限更簡單。這也意味着你應該從Apache切換到另一個Web服務器,或者從在Apache中運行PHP到應用服務器或其他任何工作,或者其他任何工作......

相關問題