“安全媒体”和“启用 S3 上传”选项似乎会导致分类徽标出现问题。
我最近发现,未拥有访问权限的用户可以通过直接 URL 链接查看或下载上传到私密帖子的文档。我了解到必须先启用 S3 上传才能使用安全媒体功能,因此我先启用了该功能,并手动将上传文件从 Discourse 服务器复制到 S3 存储桶。随后,我按照以下帖子启用了安全媒体:
按照该流程操作后,我执行了 discourse remap 命令,将 /uploads/default/ 替换为 //bucketname-etc-etc/。remap 完成后,我运行了 rake posts:rebake,大部分内容显示正常。启用安全媒体并运行相应的 rake 和 remap 任务后,所有其他上传内容(帖子中的文档和图片、站点品牌图片等)仍然能够正确显示和链接。不过,我不得不重新上传用户头像和群组徽标,重新上传后它们均能正确显示,并如预期采用了新的短链接和安全媒体上传链接。
但我发现分类徽标图片不再显示。通过浏览器的开发者模式检查,我注意到重新上传分类徽标图片时,系统会生成正确的安全媒体上传链接,并能正确显示图片。然而,一旦点击“保存分类”,分类页面刷新后便会错误地尝试直接映射到 AWS S3 的未签名 URL,导致图片无法显示:
Discourse 中所有显示分类徽标图片的页面都会尝试将图片直接映射到 AWS S3 的未签名 URL,而不是安全媒体上传链接。
作为临时解决方案,我不得不逐一访问 AWS S3 中的每个分类徽标图片对象,将其权限更改为“公共读取”。
我已确认该问题在 Chrome、Firefox 和 Microsoft Edge 浏览器中均存在。我尝试运行 posts:rebake 和 uploads:secure_upload_analyse_and_update rake 任务,但它们似乎对分类徽标没有任何作用。是否还有其他任务可以修复这些映射错误的分类徽标图片 URL?或者这实际上是设计如此,要求除安全(私密帖子)之外的所有 S3 上传对象都必须设置为公共读取?
3 个赞
martin
(Martin Brennan)
2
感谢提出这个问题,我之前并不知道存在分类徽标
我本周会查看一下,并尝试为你修复这个问题。
6 个赞
martin
(Martin Brennan)
5
我认为这里的主要问题是,secure_upload_analyse_and_update 在判断哪些内容应该安全、哪些不应该安全时有些过于严苛。因为 UploadSecurity 类(https://github.com/discourse/discourse/blob/master/lib/upload_security.rb)会在上传时检查头像、分类标志等这类公开类型上传项是否应该设为安全,而 type 字段在执行 rake 任务再次检查时并不存在。
我内部已有一个任务计划,旨在通过在该安全检查时检查上传可能存储的所有位置来改进这一问题,但这还需要一段时间,且是更大计划的一部分,该计划旨在以更整洁的方式存储上传引用。
无论如何,我现在正在构建一个拉取请求(PR)来解决此问题,方法是让分类标志和背景在判断是否应设为安全时被视为公开类型。一旦该 PR 合并且你完成更新,只需重新上传分类图片,问题就会解决。
4 个赞