Php Web应用程序,用户上传文件夹的最安全位置
我的申请的一般结构:Php Web应用程序,用户上传文件夹的最安全位置,php,web-applications,upload,permissions,directory,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]文件夹存储在哪里。这是所有用户存储媒体(图像等)的地方 目前,我在[public]文件夹中有这个文件夹,但出于某种原因,我不相信这是正确的位置 公众将无法访问[includes]文件
[includes] - not accessible by the web
.. important database classes, etc
[public]
.. all files that the application publicly uses
我正试图决定将[uploads]
文件夹存储在哪里。这是所有用户存储媒体(图像等)的地方
目前,我在[public]
文件夹中有这个文件夹,但出于某种原因,我不相信这是正确的位置
公众将无法访问[includes]
文件夹,只有PHP能够在那里导航
为了最佳实践,您对此有何想法?在兄弟目录中。也就是说,与
相同级别的目录包括/
和公共/
,这取决于您试图实现的目标。如果您正在上载例如用户文章的照片,请将它们放在公共可见文件夹中,例如/public/images
(无论哪种方式,图像都是可见的)。另一方面,如果你制作的应用程序将(例如)从上传的文件中获利,那么最好将它们放在更高的级别,例如/uploads
,这样它们就不会被公开访问,但是你可以创建一个代码来启用下载
我想只有那个用户。我的意思是,在谈话中不引入“共享”媒体。。。这是今后的一种可能性 在这种情况下,通常的设置是
- 将文件放在web根目录之外(即
文件夹之外-具体位置由您决定)public
- 构建一个PHP脚本,该脚本检查用户权限,并在所有内容都检查无误时通过请求的文件。然后将为每个资源调用该PHP脚本,如下所示: domain.com/resource.php?user=user123&file=mypic.jpg (或者使用漂亮的URL重写)
有一些Apache和nginx模块使这个过程更加高效。这可能值得一看。媒体安全是否敏感?@Pekka,不,我不这么认为。但是如果我真的想保证它们的安全,那么最好的结构是什么呢?应该允许任何人访问
/user123/mypic.jpg
还是只允许user123?我想只有那个用户。我的意思是,在谈话中不引入“共享”媒体。。。这是一种可能。是的,这正是我所想的。有什么缺点吗?如果您处于安全模式,那么您需要在例外列表中添加另一个路径。此外,您不能直接提供这些文件;但这就是mod_sendfile的用途。浏览器需要能够将这些图像导入。该应用程序的目的是允许用户设计“演示文稿”,然后将其发送给其他人。情况很简单:公共文件转到web/X
或public/X
,如果您想施加任何限制,您需要将其隐藏一级以上。很明显,你可以创造一些htaccess魔法,但我不推荐。因此,如果我需要将这些图像带到公众使用的界面中,我不能让“uploads”目录处于与“public”相同的级别或更高的级别?如果您将这些文件放入public/X
中,它们是公开可见的,您无法控制谁可以看到什么。如果你把它们放在更高的级别,你需要创建一些“桥梁”,比如PHP文件,用来读取图像并将其输出到浏览器。唯一的问题是公众是否能够“看到”媒体。图像将被带到一个界面中,公众可以将其作为演示文稿的一部分进行查看。@dcolumbus因此该文件应该是全世界都可以访问的,而不仅仅是用户123?但这不是您上面所说的?最终,该文件将被公众查看,但只能通过user123创建的界面查看。啊。在这种情况下,将uploads
文件夹存储在public
中,没有问题uploads
目录与public
目录处于同一级别,并且仍然能够在界面请求时向浏览器提供文件?
[uploads]
[user123]
mypic.jpg
mysecondpic.jpg
[user456]
picpic.jpg
yeah.jpg