Web 应用程序,用户上传文件夹的最安全位置


Web Application, most secure place for an uploads folder for users

我的应用程序的一般结构:

[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才能在那里导航。

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

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

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

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

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

  • 将文件放在 Web 根目录之外(即放在 public 文件夹之外 - 确切的位置,真的取决于你)

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

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

    (或使用漂亮的URL重写)

但是请记住,这需要为每个请求的资源启动一个昂贵的 PHP 进程。请务必使用非常巧妙的缓存来最大程度地减少请求。

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