【问题标题】:CakePHP: How to control access to downloadable filesCakePHP:如何控制对可下载文件的访问
【发布时间】:2013-09-29 23:13:35
【问题描述】:

我们正在运行 CakePHP 2.3...

我们需要控制对 PDF 文件的访问。例如,我们需要用户能够查看/下载他们自己的 PDF 而不是其他人。管理员可以查看所有内容。等等。

第一个问题是这些文件应该位于 CakePHP 的目录结构中的什么位置。

我们对 /webroot/files/... 进行了试验,但这些似乎可以公开访问(即,如果知道完整路径,任何人都可以直接导航到任何文件:www.example.com/files/private.pdf

将文件存储在安全位置后,第二个问题是处理授权的最佳方式是什么,以便适当的用户可以访问适当的文件。

感觉 CakePHP 对此有一些内置支持,但我们找不到它的文档。

【问题讨论】:

    标签: .htaccess cakephp authorization cakephp-2.0 download


    【解决方案1】:

    不要将您希望公开的文件放在 webroot 中。那么就不需要修改 .htaccess 了。

    要通过 php 将文件发送到客户端,可以使用 media viewrequest object。您将使用什么取决于您的 CakePHP 版本。

    您使用的任何身份验证适配器都将应用于 FilesController::download() 方法或您的方法和控制器的名称。

    【讨论】:

    • 您的意思是“不要将您不想公开的文件放在 webroot 中”吗?
    • 嗯...是的!已更正。
    【解决方案2】:

    您需要在保存 pdf 的文件夹中添加一个 .htaccess 文件,以拒绝通过正常方式访问它们。 deny direct access to a folder and file by htaccess 将 pdf 文件放在哪里并不重要,但我建议在 webroot 文件夹中的某个位置以及它们自己的文件夹中。

    然后,您需要在其中一个控制器中添加一个函数来显示 pdf,而不仅仅是链接到它。在 CakePHP http://book.cakephp.org/2.0/en/views/media-view.html 在更新版本的 cakePHP 中,它是通过发送文件。 http://book.cakephp.org/2.0/en/controllers/request-response.html#cake-response-file

    【讨论】:

    • 谢谢。你能谈谈 Cake 发送文件是如何与 .htaccess 规则交互的吗?我们是否需要允许 (Cake)PHP 访问包含 PDF 的目录的特定异常?
    • .htaccess 应该阻止人们直接在互联网上查看 pdf,但 CakePHP 将在不通过互联网的情况下访问文件(通过导航文件系统),因此 .htaccess 规则不适用于它。然后,用户将转到控制器定义的 url 和您决定放置视图 pdf 函数的操作,这将是一个与 pdf 实际所在的位置完全不同的位置。
    • 啊。我知道了。控制器引用文件的路径而不是 URL(这是 .htaccess 关心的)。这就说得通了。但是如果是这样的话,为什么要把它放在webroot中呢?
    • 没必要,我就是喜欢把资产放在一个地方。但是,如果您选择将其完全放在其他位置,则可以避免需要 .htaccess 文件。
    猜你喜欢
    • 1970-01-01
    • 2019-02-09
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多