설명
표준 이모지 경로는 CDN URL로 변환되지 않는 반면, 관리자 이모지 경로는 올바르게 변환됩니다.
근거
표준 컨트롤러 (CDN 변환 없음):
관리자 컨트롤러 (EmojiSerializer를 사용한 올바른 변환):
표준 이모지 경로도 관리자 이모지 경로와 마찬가지로 CDN URL로 변환되어야 합니다.
표준 이모지 경로는 CDN URL로 변환되지 않는 반면, 관리자 이모지 경로는 올바르게 변환됩니다.
표준 컨트롤러 (CDN 변환 없음):
관리자 컨트롤러 (EmojiSerializer를 사용한 올바른 변환):
표준 이모지 경로도 관리자 이모지 경로와 마찬가지로 CDN URL로 변환되어야 합니다.
이 URL들이 UI 어딘가에 사용되고 있는지 확인하시나요? JS 앱에서 표시되기 전에 CDN URL로 변환되고 있다고 의심합니다.
확인해 보니, 렌더링된 출력에서 이모지는 CDN URL이 아닌 S3 URL(//로 시작)을 직접 사용하고 있음을 확인했습니다.
어떤 페이지에서 이 내용을 보고 계신가요?
이모지 피커를 사용하여 게시물 작성 페이지에서 이를 확인할 수 있습니다. 사용자 지정 이모지가 로드되면 다음과 같은 S3 엔드포인트가 직접 사용됩니다:
https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/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 엔드포인트는 여전히 //cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/original/3X/6/1/61e481320406f0f82ed780db3f04056128191613.png와 같은 S3 소스 URL을 노출하고 있으며, 이는 악용과 과도한 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에서 커스텀이 아닌 이모지는 직접 처리하고 있는데, 컨트롤러보다 이렇게 하는 쪽을 더 선호합니다. 다만 이 방식이 문제를 일으키지는 않을지 확인하고 싶어서, 지금은 가장 간단한 수정을 적용해 두었습니다. 추후에 더 깊이 살펴보겠습니다.
원본 문제가 수정되었으므로 이 이슈를 닫겠습니다. 후속 작업에 대해서는 새로운 기능 요청을 자유롭게 등록해 주세요.
해당 자산은 크기가 매우 작고 일반적으로 공개되어 있어 위험도는 낮다고 판단됩니다.