使用 slim 和 php 访问根目录外的文件
Accessing files outside directory root with slim and php
目前我的文件结构如下:
├── 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 的 "real" 项目,所以我对这整个 front-controller/mvc 类型的东西还很陌生。任何帮助都会很棒,谢谢!
在您的路由逻辑或控制器中,您需要验证用户有权访问所述文件,然后很可能使用 PHP 来提供该文件,因为它无法在 Web 路径中访问。
在 PHP 中,您可以设置正确的 HTTP headers 并使用 readfile() 为最终用户提供文件。
目前我的文件结构如下:
├── 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 的 "real" 项目,所以我对这整个 front-controller/mvc 类型的东西还很陌生。任何帮助都会很棒,谢谢!
在您的路由逻辑或控制器中,您需要验证用户有权访问所述文件,然后很可能使用 PHP 来提供该文件,因为它无法在 Web 路径中访问。
在 PHP 中,您可以设置正确的 HTTP headers 并使用 readfile() 为最终用户提供文件。