Web应用程序,是用户上传文件夹最安全的地方

时间:2012-07-03 00:27:54

标签: php web-applications upload permissions directory

我的申请的一般结构:

[includes] - not accessible by the web
.. important database classes, etc
[public]
.. all files that the application publicly uses

我正在尝试确定应该在哪里存储[uploads]文件夹。这是所有用户将存储其媒体(图像等)的地方

[uploads]
   [user123]
      mypic.jpg
      mysecondpic.jpg
   [user456]
      picpic.jpg
      yeah.jpg

目前,我在[public]文件夹中有这个文件夹,但由于某种原因,我不相信这是正确的地方......

公众无法访问[includes]文件夹,只有PHP可以在那里导航。

为了最佳实践,您对此有何看法?

3 个答案:

答案 0 :(得分:2)

在兄弟目录中。也就是说,与includes/public/处于同一级别的目录。

答案 1 :(得分:0)

这取决于你想要达到的目标。如果您要上传用户文章的示例照片,请将它们放在公开可见的文件夹中,例如/public/images(图像以任何方式显示)。另一方面,如果您制作的应用程序(例如)从上传的文件中获利,最好将它们放在一个更高的级别,例如/uploads,这样它们就不会公开访问,但是可以创建一个可以启用下载的代码。

答案 2 :(得分:0)

  

我想只有那个用户。我的意思是,没有brining"分享"媒体进入对话......这是未来的可能性。

在这种情况下,通常的设置是

  • 将文件放在网络根目录之外(即在public文件夹之外 - 确切地说,这取决于您)

  • 构建一个PHP脚本,用于检查用户权限,并在所有内容都检出时传递所请求的文件。然后将为每个资源调用该PHP脚本,如下所示:

      

    domain.com/resource.php?user=user123&file=mypic.jpg

    (或使用漂亮的URL重写)

但是,请记住,这需要为每个请求的资源启动昂贵的PHP进程。请务必使用非常聪明的缓存来最小化请求。

Apache和nginx模块使这个过程更有效,名为X-Sendfile。这可能值得一看。