Secure Media Uploads가 카테고리 로고를 깨뜨립니다

“Secure Media” + “Enable S3 Uploads” 옵션이 카테고리 로고를 깨뜨리는 것 같습니다.

최근 업로드된 문서를 사설 게시물에 접근 권한이 없는 사용자가 직접 URL 링크를 통해 열람/다운로드할 수 있다는 사실을 발견했습니다. Secure Media 기능을 사용하려면 먼저 S3 Uploads를 활성화해야 한다는 점을 이해하고 있었기 때문에, 먼저 S3 Uploads를 활성화한 뒤 Discourse 서버의 업로드 파일을 S3 버킷으로 수동 복사했습니다. 이후 Secure Media를 활성화하기 위해 다음 게시글을 따랐습니다:
https://meta.discourse.org/t/secure-media-uploads/meta/140017

해당 절차를 따라 /uploads/default/ 경로를 //bucketname-etc-etc/로 변경하기 위해 discourse remap을 수행해야 했습니다. remap 이후 rake posts:rebake를 실행했고, 전반적으로 모든 것이 정상적으로 보였습니다. Secure Media를 활성화하고 적절한 rake 및 remap 작업을 실행한 후에도 기타 모든 업로드(게시글 내 문서 및 이미지, 사이트 브랜딩 이미지 등)는 여전히 올바르게 표시되고 링크되었습니다. 사용자 아바타와 그룹 로고를 다시 업로드해야 했지만, 재업로드 후에는 모두 올바르게 표시되었고 예상대로 새로운 짧은 URL과 secure-media-uploads URL이 부여되었습니다.

카테고리 로고 이미지가 더 이상 표시되지 않는 것을 확인했습니다. 브라우저의 개발자 모드로 확인해 보니, 카테고리 로고 이미지를 다시 업로드할 때 올바른 secure-media-uploads URL이 생성되어 이미지가 올바르게 표시되었습니다. 그러나 "Save Category"를 클릭하면 카테고리 페이지가 새로고침되며 이미지 표시를 방지하기 위해 이미지에 대한 AWS S3 서명되지 않은(unsigned) URL로 직접 매핑을 시도하는 오류가 발생했습니다:

카테고리 로고 이미지를 표시하는 Discourse의 모든 페이지에서 secure-media-uploads URL 대신 AWS S3 서명되지 않은 URL로 이미지를 직접 매핑하려고 합니다.

임시 해결책으로, AWS S3의 각 카테고리 로고 이미지 객체를 지루하게 방문하여 권한을 Public Read로 변경해야 했습니다.

이러한 동작이 Chrome, Firefox, Microsoft Edge 브라우저에서 모두 존재하는 것을 확인했습니다. posts:rebake와 uploads:secure_upload_analyse_and_update rake 작업을 시도해 보았지만, 카테고리 로고에는 아무런 효과가 없는 것 같습니다. 이 잘못 매핑된 카테고리 로고 이미지 URL을 수정할 수 있는 다른 작업이 있을까요? 아니면 이것이 의도된 동작으로, 사설 게시물에 속하는 보안(비공개) 업로드를 제외한 모든 S3 업로드 객체가 Public Read여야 하는 걸까요?

3개의 좋아요

이 문제를 지적해 주셔서 감사합니다. 카테고리 로고 기능이 있는 줄 몰랐네요 :sweat: 이번 주에 확인해서 수정해 드리겠습니다.

6개의 좋아요

대단해요! @martin, 정말 감사합니다!

3개의 좋아요

여기서 주요 문제는 secure_upload_analyse_and_update가 무엇은 보안으로 처리해야 하고 무엇은 그렇지 않아야 하는지를 결정하는 방식이 다소 강경하다는 점입니다. UploadSecurity 클래스(discourse/lib/upload_security.rb at main · discourse/discourse · GitHub)는 업로드 시점에 이러한 공개 유형 업로드(예: 아바타, 카테고리 로고 등)가 보안 처리되어야 하는지 여부를 확인하지만, rake 태스크에서 다시 확인하는 시점에는 이 type 정보가 존재하지 않기 때문입니다.

저는 내부적으로 이 보안 검사 시점에 업로드가 저장될 수 있는 모든 위치를 확인하도록 개선하는 작업을 추적하고 있습니다. 다만 이 작업은 아직 먼 미래의 일이며, 업로드 참조를 더 깔끔하게 저장하기 위한 더 큰 계획의 일부입니다.

어쨌든, 카테고리 로고와 배경이 보안 처리 여부를 판단할 때 공개 유형으로 취급되도록 하는 PR을 현재 빌드 중입니다. 이 PR이 병합되고 업데이트를 진행하시면 카테고리 이미지를 다시 업로드하기만 하면 정상적으로 동작할 것입니다.

4개의 좋아요