2012-06-01 118 views
4

我有這個在我的代碼:限制文件下載PHP

<a href = "res/pdf/sample.pdf">Sample PDF</a> 

所以基本上它會似乎是一個下載鏈接到文件「sample.pdf」但問題是,有一個限制,在下載此文件。所以無論何時上傳機密報告,惡意用戶不小心記住或查看瀏覽器歷史記錄中的下載鏈接的URL,即使不訪問網站也可以輕鬆下載它,因爲它是直接鏈接。我應該怎麼做,所以這個鏈接將被保護?或只下載給分配給它的用戶?

+0

我認爲你可以使用htaccess的找到解決.. –

+0

我應該如何去與htaccess的呢? –

+0

可能重複的[PHP - Protecting digital Downloads](http://stackoverflow.com/questions/5412328/php-protecting-digital-downloads) – JJJ

回答

6

不要被他們的直接網址服務的文件。有一個PHP腳本接收想要的文件的文件名,並提供它。

所以,如果有人想下載上面的文件,他會去

example.com/getfile?file=sample.pdf

你的PHP腳本,如果當前用戶有權限查看的文件,然後服務於它會檢查。

讓你的鏈接是這樣的:

<a href = "http://example.com/getfile?file=sample.pdf">Sample PDF</a> 

您當前的方法對於敏感文件很有安全感。惡意用戶可以簡單地編寫一個腳本來下載res/pdf中的所有文件。他所需要做的就是檢查目錄中每個字母的排列,並扔掉所有404錯誤。

您將不會重定向用戶,因爲這會破壞目的。您將通過相應的Content-disposition標題將該文件作爲下載文件提供。

下面是一個例子:Fastest Way to Serve a File Using PHP

可以在Google並獲得更多的例子。

以下示範如何爲PDF文件的一個很好的例子: https://serverfault.com/questions/316814/php-serve-a-file-for-download-without-providing-the-direct-link

+0

所以只要我用這個方法。基本上,getfile.php會有一個重定向。那麼getfile.php的URL仍然會改變?你可以請給我一些腳本示例操作,我將通過這個GET值。我很抱歉,我是一個noob –

+0

當然,但我不知道如何下載給定目錄的所有文件是「微不足道的」,除非在直接訪問目錄時列出文件。您似乎低估了文件名稱排列的數量。 – JJJ

+0

一個人只需要檢查每個排列作爲該目錄中的文件名。這個過程可以很容易並行並運行幾天。如果目錄存儲企業機密,我會說這很微不足道。 – xbonez

0

您可以限制使用htaccess的

+0

想怎麼樣?你能舉個例子嗎?謝謝 –

+0

你可以檢查HTTP_REFERER, 看看類似的帖子http://stackoverflow.com/questions/4654944/use-htaccess-to-limit-access-to-file-downloads –

+0

這似乎更像是一個評論,而不是回答 –