【问题标题】:Accessing files outside directory root with slim and php使用 slim 和 php 访问目录根目录外的文件
【发布时间】: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


【解决方案1】:

在您的路由逻辑或控制器中,您需要验证用户有权访问所述文件,然后很可能使用 PHP 来提供该文件,因为它无法在 Web 路径中访问。

在 PHP 中,您可以设置正确的 HTTP 标头并使用 readfile() 将文件提供给最终用户。

http://php.net/manual/en/function.readfile.php

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2015-02-21
    • 2013-07-27
    相关资源
    最近更新 更多