防止特定用户的目录列表和文件

时间:2011-09-28 17:30:26

标签: php .htaccess permissions file-access

我有一个文件夹(/ files),我有大量的文件供用户下载。我希望用户只能下载他们的文件而无法看到其他人的文件。

例如:

用户A只能查看和下载:

- file1.doc
- file2.jpg

用户B只能查看和下载:

- file3.txt
- file4.jpeg

用户C只能查看和下载:

- file1.doc
- file2.jpg
- file3.txt

我的想法是将所有文件放在同一个文件夹中,以便所有用户知道去哪里。我的问题是:我可以使用.htaccess还是应该为此构建PHP脚本?安全性(哪个更安全)?

由于

3 个答案:

答案 0 :(得分:4)

这是一个开放的目录吗?你可以做的是为每个用户创建一个子文件夹,将他们的文件放在那里,然后在.htaccess中为所述文件夹分配适当的权限。但是,这需要与您的操作系统进行一些安全集成(即,用户必须在您的计算机上拥有帐户,而不仅仅是您的Web应用程序).​​..快速而肮脏且不安全的替代方案是预先添加所有上传的具有用户名的文件名(例如,'foobar'上传的'file1.jpg'可以命名为'foobar.file1.jpg'),然后它只是你的PHP脚本只返回那些具有相应用户名的文件的情况。也许在显示时剥离该部分(或者再次,您可以使用文件夹,只要您的脚本可以为每个用户创建一个新文件夹,当一个不存在时)。另一个选项,略微更安全的是在数据库中创建文件和用户名的哈希,使用此哈希重命名所有上传的文件,然后适当地查询数据库。

最好的解决方案肯定是操作系统管理帐户,我首先提到过,但它需要更多的开销。

答案 1 :(得分:1)

构建一个PHP脚本,您可以使用readfile将文件发送到浏览器。这样,您可以限制对单个文件的访问,并使用您已有的身份验证系统。

答案 2 :(得分:0)

你当然可以使用htaccess或PHP。据我所知,两者都没有更安全 - 另一方面 - 虽然做错了两者都可以允许在没有预期的地方进行访问!

PHP可能稍微好一些,因为你有更多的灵活性(比如说,将其与其他PHP身份验证集成),你可以把文件夹放在通常的web根目录之外,这无论如何都是很好的做法。