【发布时间】:2017-01-24 04:20:42
【问题描述】:
目前我的文件结构如下:
├── README.md
├── app
├── classes
├── composer.json
├── composer.lock
├── database
├── public
├── templates
├── users
└── vendor
在users 文件夹中,我有与登录用户的用户名相关的文件夹,每个文件夹都有用户定义的自己的文件和文件夹。
我遇到的问题是我无法下载users 目录中的文件。目前,我通过将users 目录移动到public 目录中来运行我的代码,但这存在非常明显的安全漏洞。如何使我的用户目录比根目录高一级,如此处所示,但仍然可以通过public 目录访问?
我已经尝试过使用RewriteRule users/ ../users/,但它似乎不起作用。我可以通过 PHP 访问users 目录,而不是public 文件夹中的我的前端控制器。
这是我第一个使用 Slim 的“真正”项目,所以我对整个前端控制器/mvc 类型的东西非常陌生。任何帮助都会很棒,谢谢!
【问题讨论】:
-
好的。所以重写规则不会解决这个问题,因为 Web 服务器上的重写规则不会知道用户是否经过身份验证。您需要在应用程序中编写路由逻辑,以便根据用户的权限为用户文件提供服务。它过于广泛,无法在一个问题/答案中涵盖。
-
@Devon 如果我这样做了,那么当用户单击文件时,它会发送一个获取请求,然后调用路由来获取文件。这是做这种事情的可行方法吗?当然,这条路线会验证该文件夹是他们的。
-
是的,这就是您需要做的。在您的路由逻辑或控制器中,您需要验证用户有权访问所述文件,然后很可能使用 PHP 来提供该文件,因为它无法在 Web 路径中访问。
-
现在这引发了另一个问题,在 PHP 内部,我不确定您是否能够“强制”下载。例如,如果用户访问某个 URL,PHP 是否能够为他们提供该文件?
-
太棒了!谢谢您的帮助。在我让基本站点正常工作后,我会考虑添加一些 Ajax 调用来防止多个请求。
标签: php .htaccess model-view-controller twig slim