保护可下载文件-php / mysql Apache2服务器的最佳策略

我会试图弄清楚如何保护目录免受未经授权或未经授权的用户下载文件。 提前致谢。

找不到一个好的重复,但是一点搜索就会调出这样的结果PHP保护一个文件夹

有一个简单的方法来限制文件夹访问基于PHP会话授权使用PHP。 它需要为有效的授权会话创建存根文件(并自动删除)。 在PHP中,您可以:

if ($user_has_permission_to_download) { touch("tmp/access-" . session_id()); } 

然后,一个简单的rewriterule + rewritecond可以用于授权:

 RewriteCond %{HTTP_COOKIE} PHPSESSID=(\w+) RewriteCond ../tmp/access-%1 -f RewriteRule ^(.+)$ $1 [L] RewriteRule .+ /deny [L] 

当找到相应的cookie值并存在授权存根文件时,第一个块允许访问。 第二个规则阻止其他人访问。

把一个.htaccess文件放在文件目录下,内容如下

 deny from all 

然后创建一个脚本,例如,如果用户被授权,则使用readfile()来为文件提供服务。

.htaccess是你最好的朋友。 把所有的拒绝放入.htaccess文件。 或者如果你不想使用.htaccess文件加密,并且一直改变下载路径(LOL!)。

请参阅是否有可能防止从网站下载视频

我假设你有一个用户/登录脚本的地方认证用户? 使用.htaccess重写规则通过php脚本转发文件请求,如果用户登录,则会检查会话变量,然后返回文件。

麋鹿的东西:

 .htaccess RewriteEngine on RewriteRule ^(.*).(pdf|exe|doc|whatever)$ some-script.php?file=$1.$2 [L] <?php if(loginCheck()) //function somewhere that checks session if user is logged in { return fopen('../files/' . $_GET['file']); //open and return the requested file } 

这只是伪代码,让你知道你需要做什么。 您也可能必须回显正确的文件头。

为了阻止人们进入文件目录,我建议在THAT文件夹中放置一个.htaccess文件,同时说明deny from all阻止EVERYONE访问它。