2012-06-01 77 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

这似乎更像是一个评论,而不是回答 –