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

时间:2011-03-21 11:41:53

标签: php apache .htaccess

我将试图找出如何保护目录免受未经授权或未经过识别的用户下载文件的影响。 提前谢谢。

4 个答案:

答案 0 :(得分:11)

找不到好的副本,但是稍微搜索一下就会显示这样的结果PHP protect a folder

有一种基于PHP会话授权使用php限制文件夹访问的简单方法。它需要为有效的授权sesssions创建存根文件(并自动删除它们)。在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值并且存在授权存根文件时,第一个块允许访问。第二条规则阻止其他任何人访问。

答案 1 :(得分:3)

将.htaccess文件放在包含文件的目录中,其中包含以下内容

deny from all

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我假设您在用户/登录脚本的某处对用户进行身份验证? 使用.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
}

这只是伪代码,可以让您了解自己需要做什么。您可能还必须回显正确的文件头。

为了阻止人们进入文件目录,我建议在.AT文件夹中放一个.htaccess文件并说deny from all以阻止所有人访问它。