保护 wordpress 上传的文件不被非登录用户访问?

问题描述

我为私人团体推出了一个 wordpress 网站。这个网站是一个公共代表网站,但他们也会在“帖子”上勾选“私人”,所以只有登录用户才能看到这些帖子。一切都会好的,但他们也会上传图像/文档文件并将它们附加/包含到私人或公共帖子中。公开帖子一切正常,但是当文件用于私人帖子时,我们假设该文件是机密的。但在这里 wordpress 允许通过链接(URL)直接访问任何上传文件,即使您没有从浏览器登录到该站点

我尝试搜索,但找不到实际可行的内容。即使 FB 私人组对外部人员有此文件访问限制,GitLab 也有权限,如果您不在项目中,则无法访问那里的任何内容。似乎如果我使用 wordpress/Joomla/Drupal,那将是为了达到我想要的目的而进行黑客攻击/搞砸。

您有什么建议吗,也许是通过 wordpress (PHP) 而不是直接通过网络服务器访问上传文件,所以通过 PHP 我可以进行一些 sql 查询并检查该文件包含哪些帖子以及用户是否已登录在?也可能有一些插件可以做到这一点?

附言我不会问我是否深入了解 wordpress,但在这种情况下,我只是或多或少地启动了它。

解决方法

解决此问题的一种方法是将文件内容作为 blob 存储在数据库中。但是,如果文件很大,这可能会出现问题,正如您所预测的:您可以确保在交付内容之前收件人已获得授权。另一种选择可能是在保存帖子时移动文件,以便无法在 http 端点直接访问它。

在这两种情况中的任何一种情况下,您都可以使用 .htaccess 将对该目录中文件的任何 GET 请求重定向到提供内容的新 php 文件。您可以使用标准 WordPress 功能检查用户是否在交付前登录,和/或动态从数据库中提取内容。这些选项需要自定义代码才能实现。

(顺便说一下,文件是否正在检查恶意内容,文件名是否被更改为不确定的内容?这是攻击的载体。)

如果您不想编码,您可以考虑并行安装 ownCloudNextCloud 然后在私人帖子中,您的用户会在其他服务中放置指向该文件的链接。这两个应用程序都为各种设备提供了许多不同的客户端,并且能够限制对特定组和用户的访问。