描述
标准表情符号路径未转换为 CDN URL,而管理员表情符号路径已正确转换。
证据
标准控制器(无 CDN 转换):
管理员控制器(使用 EmojiSerializer 正确转换):
标准表情符号路径应像管理员表情符号路径一样转换为 CDN URL。
标准表情符号路径未转换为 CDN URL,而管理员表情符号路径已正确转换。
标准控制器(无 CDN 转换):
管理员控制器(使用 EmojiSerializer 正确转换):
标准表情符号路径应像管理员表情符号路径一样转换为 CDN URL。
您是否在 UI 中看到这些 URL 被使用?我怀疑它们在 JS 应用中被转换为 CDN URL 后再显示。
我已检查并确认表情符号在渲染输出中直接使用 S3 URL(以 // 开头),而不是 CDN URL。
您在哪个页面上看到此内容?
您可以在使用表情符号选择器时的帖子撰写页面上看到这一点。加载自定义表情符号时,它们会直接使用 S3 端点,例如:
https://assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/1/d/1de8f76096f76cf393640bdcff387ec9ae33dd3e.gif
这表明路径未按预期转换为 CDN URL。
正在测试自定义表情符号 ![]()
这是从 S3 CDN 发货的……我们有一个关于选择器本身的问题 @j.jaffeux
自定义表情符号没有使用 S3 CDN
这个 UI 使用了 S3 CDN
所以这非常具体地指向了表情符号选择器,正在改进标题。
谢谢,这应该可以解决问题:
感谢您为启用自定义表情符号的 CDN 使用所做的 PR。
虽然您的前端修复正确地请求了表情符号 CDN 地址,但我担心后端安全。
https://meta.discourse.org/emojis.json 端点仍然会暴露 S3 源 URL,例如 //assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png,这可能会导致恶意滥用和过高的 S3 账单。
为了提高安全性,我建议直接返回 CDN 地址,就像处理非自定义表情符号一样。
这是我尝试修复代码:
class EmojisController < ApplicationController
def index
emojis = Emoji.allowed.group_by(&:group)
emojis.each do |_, emoji_list|
emoji_list.each do |emoji|
emoji.url = Discourse.store.cdn_url(emoji.url) if emoji.url.present?
end
end
render json: MultiJson.dump(emojis)
end
def search_aliases
render json: MultiJson.dump(Emoji.search_aliases)
end
end
是的,我知道我们直接在 emoji.rb 中为非自定义表情符号执行此操作,我更喜欢这样,而不是在控制器中。我想确保这不会引起问题,所以我现在做了最简单的修复,但将来会深入研究。
关闭原因是原始问题已修复,请随意为后续操作打开另一个功能请求。
这些资产很小,通常是公开的,风险感觉很低。