Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制文件下载php_Php_Authorization_Download - Fatal编程技术网

限制文件下载php

限制文件下载php,php,authorization,download,Php,Authorization,Download,我的代码中有: <a href = "res/pdf/sample.pdf">Sample PDF</a> 因此,基本上,它看起来是指向文件“sample.pdf”的下载链接,但问题是,下载此文件有限制。因此,无论何时上传机密报告,恶意用户在浏览器历史记录中意外记住或查看了下载链接的URL,他都可以轻松下载,即使不访问网站,因为这是一个直接链接。我该怎么做才能保护这个链接?或者仅为分配给它的用户下载?您可以限制使用htaccess不要通过文件的直接URL提供文件。让

我的代码中有:

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


因此,基本上,它看起来是指向文件“sample.pdf”的下载链接,但问题是,下载此文件有限制。因此,无论何时上传机密报告,恶意用户在浏览器历史记录中意外记住或查看了下载链接的URL,他都可以轻松下载,即使不访问网站,因为这是一个直接链接。我该怎么做才能保护这个链接?或者仅为分配给它的用户下载?

您可以限制使用htaccess

不要通过文件的直接URL提供文件。让一个PHP脚本接收所需文件的文件名,并提供给用户

因此,如果有人想下载上述文件,他会去

example.com/getfile?file=sample.pdf

您的PHP脚本将检查当前用户是否具有查看该文件的权限,然后提供该文件

制作如下链接:

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

您当前的方法对于敏感文件非常不安全。恶意用户可以编写一个脚本来下载
res/pdf
中的所有文件。他所需要做的就是检查目录中的每个字母排列,并扔掉所有404个错误

您不会重定向用户,因为这样做会破坏目的。您将使用相应的
内容配置
标题作为下载文件

下面是一个例子:

你可以在谷歌上找到更多的例子

下面是一个很好的示例,演示了如何为PDF文件提供服务:

我认为您可以使用htaccess找到解决方案。我该如何使用htaccess?可能与类似的方法重复?你能给我举个例子吗。谢谢你可以查看HTTP_参考,查看类似的帖子。这看起来更像是一个评论,而不是回答。所以每当我使用这种方法时。基本上,getfile.php上会有一个重定向。因此,在getfile.php上,URL仍将更改??你能不能给我一些脚本操作的例子,我将在这里传递这个GET值。很抱歉,我是一个不可靠的人,但我不认为下载给定目录的所有文件是多么“琐碎”,除非直接访问目录时列出了这些文件。您似乎低估了文件名排列的数量。您只需检查该目录中作为文件名的每个排列。这个过程可以很容易地并行化并运行几天。我想说,如果目录中存储了公司机密,那就太微不足道了。@Juhana:我很欣赏文件名的变化,但是如果数据足够有价值,你可以轻松地租用一些云计算时间,让数千个并行线程同时运行。比如说,文件名的长度最多为20个字符,有大写和小写字母,还有一些标点符号,总共70个不同的字符,你可以每秒检查1000个文件名。这些都是非常慷慨的假设。即使如此,检查所有排列也需要2.53^26年——宇宙的年龄约为13.7^9年。即使用40个不同的字符(不区分大小写)检查10个字符长的名称也需要33.25万年。