2011-11-23 64 views
0

我有一个用户的子目录,我想限制每个子文件夹只有该用户。限制用户到子目录

例如我有/users/user1,我想保护user1文件夹,以便只有user1可以访问里面的文件。

我试着玩弄一个.htaccess和.htpasswd文件,但即使我已经对MySQL数据库进行了身份验证,但仍会提示第二次登录。

我不知道该怎么做基本上有第二个登录请求自动处理,因为用户以前会被认证。

我可以发布一些代码,我有我的.ht文件,但我认为这个信息可以让球滚动。

+0

认证如何?通过HTTP基本身份验证?基于表单的cookie使用登录?这些是两个不同的登录系统,通常是相互独立的。 –

+0

我有点小知识,但我认为(apache)htpasswd与mysql身份验证不一样,你使用的是mod_auth_mysql吗? – ajreal

+0

可能的重复:http://stackoverflow.com/questions/2328068/authentication-denying-access-to-files-in-directory-with-php – djdy

回答

1

我觉得用一个PHP代理来访问这些文件会在这种情况下是足够的,沿着线的东西:

的download.php

<?php 
    /** Load your user assumed $user **/ 

    $file = trim($_GET['file']); 

    /** Sanitize file name here **/ 

    if (true === file_exists('/users/user'.$user->id.'/'.$file)) { 
     //from http://php.net/manual/en/function.readfile.php 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename="'.$file.'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } else { 
     throw new Exception('File Not Found'); 
    } 

的.htaccess否认所有直接文件下载

deny from all 

然后,您将链接到文件夹通过使用/download.php?file=filename.ext,它只会从当前用户的用户目录下载该文件。

您会希望确保您清理输入文件名,以便您不易受目录横向漏洞利用攻击。

+0

谢谢,我会放弃它!如果我所要做的只是将文件加载到html5音频标签,那么我可以播放它吗? – innov83r

+0

是的,如果你使用它作为音频标签,你只需要做一些事情: 我从来没有这样做过,通过音频标签的MP3文件,所以如果它不起作用,我会删除应允许它的附件处置工作,但我没有测试它让我知道如何它是 –

+0

嘿贾森,它似乎并没有为我工作...仍然试图让它的工作... – innov83r