CakePHP:如何控制对可下载文件的访问

Posted

技术标签:

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

我们正在运行 Cakephp 2.3...

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

要通过 php 将文件发送到客户端,可以使用 media view 或 request 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 文件。

以上是关于CakePHP:如何控制对可下载文件的访问的主要内容,如果未能解决你的问题,请参考以下文章

windows客户端开发--根据可下载url另存为文件(微信windows客户端这样做的)

如何在CodeIgniter中将上载的文件(PDF,DOC等)显示为可下载的链接

从 Spring 返回 Excel 可下载文件

带有本地文件的 Firefox @font-face - 可下载字体:下载失败

我应该在哪里放置我的组件的可下载文件?

MVC;将可下载文件返回到视图