如何将标题:位置发送到Web根文件之外

时间:2014-01-23 10:52:43

标签: php apache

我正在创建一个Web应用程序,它只允许注册成员从文件夹目录下载zip文件夹。

我真的需要知道哪个是保护文件夹的正确方法,因为只有存储在我的数据库中的成员才能访问它们所以问题是如果有人找到目录和文件名就没有什么可以阻止他们访问它

我一直在做一些研究并找到了一些方法,但它们都有很大的缺点。

1。)将文件放在webroot之外,然后使用readfile向它们发送数据 这就是我目前设置的方式。主要的缺点是我在共享服务器上并且脚本的最大执行时间是30秒(无法更改),如果文件很大或用户连接速度慢,则在下载完成之前将调用超时

2。)htaccess和htpasswd在webroot目录中。

这个问题是我不想要求用户再次输入密码。除非有办法允许php发送密码,然后将标题发送到需要下载的实际zip文件。

3。)将文件保存在webroot中,但是文件名混淆,因此很难猜到。

这完全是蹩脚的!

我真正想做的是将文件保存在web root之外,然后只发送一个header:location到该文档以强制下载,显然因为它不在web root中,所以浏览器不会看到它。有没有解决的办法。有没有办法重定向到带有标题:位置('/ file')的Web根文件以强制下载。因此允许apache提供文件而不是php与readfile。

是否有一些更简单的方法来保护文件夹并使用apache服务,我只是没有遇到过?有没有人以前遇到过这个问题,有没有一种行业标准的方法可以更好地做到这一点?

我知道这可能类似于重复的问题,但其他类似问题中的答案都没有为我的需要提供任何有用的信息。

1 个答案:

答案 0 :(得分:1)

  

我真正想做的是将文件保存在web root之外,然后只发送一个header:location到该文档以强制下载,显然因为它不在web root中,所以浏览器不会看到它。 / p>

更重要的是,它位于Web根目录之外,因此没有服务器可以在Location标头中发送的URL

  

有没有办法解决这个问题。有没有办法重定向到带有标题:位置('/ file')的Web根文件以强制下载。

没有。防止服务器简单地移交文件是将其放在Web根目录之外的。如果您可以重定向到它,那么您将回到“难以猜测的文件名”区域,其中添加的服务器上的每个文件的安全漏洞都是通过HTTP公开的。

  

是否有一些更简单的方法来保护文件夹并使用apache服务,我只是没有遇到过。

您的选择(其中一些您已经以特定实现的形式表达过)是:

  • 难以猜测网址
  • 将文件放在Apache默认不提供的位置并编写将为您提供的代码
  • 使用Apache自己的密码保护选项

没有任何其他方法。

  

是否有一些更简单的方法来保护文件夹并使用apache服务,我只是没有遇到过。

不,没有更简单的方法(但是说,你所描述的所有三种实现都“非常容易”)。


另一种方法,我认为它很脏但可能会解决您的资源限制:

  • 将文件保留在Web根目录之外
  • 配置Apache以遵循符号链接
  • 按需:从Web根目录下创建一个符号链接到您要提供的文件
  • 重定向到该符号链接的URI
  • 每5分钟运行一次cron作业以删除旧的符号链接(在符号链接文件名中添加时间戳以帮助解决此问题)

它实际上是我之前项目符号列表中前两个选项的组合。