이 플러그인이 다소 구식이었고, 오늘 마침 업데이트가 되었습니다 (Arkshine님의 도움 덕분에 가능했습니다
). 플러그인을 업데이트한 후, 프로덕션 환경이라면 앱을 다시 빌드해야 하고, 아니면 애플리케이션을 재시작해야 합니다. Discourse 팀에서 제공한 몇 가지 지침은 다음과 같습니다: Install plugins on a self-hosted site
업데이트 감사합니다. 모든 기능이 정상 작동하는 것을 확인했습니다.
안녕하세요, 여러분
이 문제를 해결하는 데 도움을 주실 수 있을까요?
데스크톱에서 검은 화면이 표시됩니다
Discourse - V3.1.3
Uncaught (in promise) Error: Could not find module discourse-i18n imported from discourse/plugins/discourse-topic-trade-buttons/discourse/connectors/topic-above-post-stream/trade-buttons
Uncaught (in promise) Error: Could not find module `discourse-i18n` imported from `discourse/plugins/discourse-topic-trade-buttons/discourse/connectors/topic-above-post-stream/trade-buttons`
at loader.js:247:1
at u (loader.js:258:1)
at a.findDeps (loader.js:168:1)
at u (loader.js:262:1)
at requireModule (loader.js:24:1)
at plugin-connectors.js:57:1
at plugin-connectors.js:45:1
at Array.forEach (<anonymous>)
at b (plugin-connectors.js:40:1)
at plugin-connectors.js:56:1
at plugin-connectors.js:153:1
at plugin-connectors.js:45:1
at Array.forEach (<anonymous>)
at b (plugin-connectors.js:40:1)
at S (plugin-connectors.js:150:1)
at j (plugin-connectors.js:159:1)
at e.renderedConnectorsFor (plugin-connectors.js:164:1)
at get connectors [as connectors] (plugin-outlet.js:126:1)
at Ce (index.js:1251:1)
at reference.js:175:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at index.js:5588:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at index.js:5588:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at reference.js:312:1
at reference.js:136:1
at e.track (validator.js:668:1)
at f (reference.js:135:1)
at Object.evaluate (runtime.js:3440:1)
at Object.evaluate (runtime.js:1052:1)
at It.evaluateSyscall (runtime.js:4263:1)
at It.evaluateInner (runtime.js:4234:1)
at It.evaluateOuter (runtime.js:4227:1)
at Wt.next (runtime.js:5058:1)
at Wt._execute (runtime.js:5045:1)
at Wt.execute (runtime.js:5038:1)
at Qt.sync (runtime.js:5105:1)
at wr.render (index.js:6749:1)
at index.js:7013:1
at Mt (runtime.js:4139:1)
at Tr._renderRoots (index.js:6996:1)
at Tr._renderRootsTransaction (index.js:7039:1)
at Tr._renderRoot (index.js:6985:1)
at Tr._appendDefinition (index.js:6911:1)
at Tr.appendOutletView (index.js:6899:1)
at p.invoke (queue.ts:203:14)
at p.flush (queue.ts:98:13)
at h.flush (deferred-action-queues.ts:75:19)
at $._end (index.ts:616:32)
at _boundAutorunEnd (index.ts:257:12)
안녕하세요, @viswanatha ![]()
이 게시글이 topic-trade-buttons 플러그인과 관련되어 보이기 때문에, 적절한 분들이 확인하실 수 있도록 관련 주제 게시판으로 옮겼습니다. ![]()
@viswanatha 이 플러그인을 추가한 후 프로젝트를 다시 빌드(re-build)하셨나요?
@Janno_Liivak 지난 PR에서 discourse-i18n 임포트를 도입했는데, 이는 코어에서 비교적 최근에 추가된 기능(10월 12일경이었던 것 같습니다)이기 때문에 Pinning plugin and theme versions for older Discourse installs (d-compat branches) 가 필요할 수 있습니다.
제 확인 결과, 이 변경사항은 3.2.0.beta2-dev(9월 12일) 이후에 발생한 것으로 보입니다.
따라서 3.2.0-beta2-dev보다 오래된 Discourse 버전을 사용하는 사용자는 제 PR 직전의 마지막 커밋(2월 22일자 커밋)으로 고정되어야 한다고 생각합니다.
< 3.2.0.beta2-dev 88db827dcecf5faf4e009e38422ede6847488535
보안 취약점 ![]()
요약: 이 플러그인을 설치하면 비활성화되어 있더라도, 해당 토픽에 존재하는 모든 토픽 커스텀 필드가 토픽에 액세스할 수 있는 모든 사용자에게, 익명 사용자를 포함하여 유출됩니다. 설치된 다른 플러그인에 따라, 토픽 커스텀 필드에 민감한 데이터가 포함될 수 있습니다.
이 플러그인을 클라이언트를 위해 검토하는 과정에서 여러 보안 문제를 발견했습니다. 우리는 포크(https://github.com/communiteq/discourse-topic-trade-buttons/tree/master)에서这些问题를 수정하고 풀 리퀘스트를 제출했습니다. 그러나 토픽 작성자가 우리의 풀 리퀘스트나 개인 메시지에 응답하지 않아, 이제 이 문제들을 공개합니다.
보안 수정: 정보 유출
모든 커스텀 필드(다른 플러그인의 필드 포함!)가 익명 사용자를 포함해 직렬화되고 있습니다. 커스텀 필드는 민감한 데이터를 포함할 수 있으며, 이러한 방식으로 직렬화되어서는 안 됩니다.
sold_at 등의 값은 어쨌든 서버 측에서 설정되고 버튼은 topic.archived에 대해 "계산"되므로, 커스텀 필드 로직은 프론트엔드 사용자 대면 코드에서 제거할 수 있으며, 커스텀 필드는 관리자 인터페이스가 작동하도록 직렬화되기만 하면 됩니다. 따라서 직렬화는 관리자 사용자로 제한할 수 있습니다. 우리는 이것이 심지어 필요하지도 않을 것으로 의심합니다.
초기화 수정
직렬화 로직을 가두고 있는 if SiteSetting.topic_trade_buttons_enabled 체크는 플러그인을 활성화하거나 비활성화한 후 Discourse를 재시작해야 하는 것을 필요로 합니다. Discourse가 이미 이를 처리하고 있으므로 이 체크는 불필요합니다.
respect_plugin_enabled: false 사용은 불필요하며, 위에서 설명한 보안 문제를 악화시킵니다.
풀 리퀘스트가 이제 병합되었습니다
나도 마찬가지야, 설정을 못 해
방금 브라우저 개발자 콘솔에서 비권장(deprecation) 알림을 발견했습니다:
deprecation-identify-source.js:15 DEPRECATION: [PLUGIN discourse-topic-trade-buttons]
discourse/plugins/discourse-topic-trade-buttons/discourse/templates/connectors/topic-above-post-stream/trade-buttons.hbs템플릿에서this를 사용하지 않고model프로퍼티 경로를 사용했습니다. 이 폴백 동작은 더 이상 권장되지 않으며, 템플릿에서 모든 프로퍼티는this를 통해 참조해야 합니다: {{this.model}} [deprecation id: ember-this-fallback.this-property-fallback] 이 기능은 ember-this-fallback n/a에서 제거될 예정입니다. 자세한 내용은 Resolving the `this-property-fallback` deprecation 를 참조하세요.
이 문제를 알리고자 합니다 - 제가 직접 수정할 수는 없지만요. ![]()
브라질에서 온 사람이라 브라질 포르투갈어로 번역해 드릴게요!
안녕하세요, @Anderson_Cardoso_Silva! 번역을 포함해 풀 리퀘스트를 작성할 수 있으신가요?
브라우저 로그에서 발견한 문제들(이其中包括 @Roi가 언급한 내용)과 몇 가지 어색했던 영어 텍스트를 수정했습니다. 모든 것을 로컬 개발 환경에서 테스트했지만, 다른 분이 자신의 Discourse에서 테스트해 주신다면 감사하겠습니다.
@Arkshine 님, .discourse-compatibility 파일에 이 줄을 추가했습니다. 감사합니다!
보안 취약점 
유용한 플러그인을 공유해 주셔서 감사합니다! 주의가 필요한 치명적인 보안 취약점을 몇 가지 발견했습니다:
문제점
- 권한 확인 누락 - 모든 사용자가 어떤 주제든 판매/구매/교환 상태로 표시할 수 있습니다.
- 백엔드 검증 누락 - 컨트롤러가 다음 항목을 검증하지 않습니다:
- 플러그인 활성화 여부 (
topic_trade_buttons_enabled) - 카테고리 버튼 활성화 여부 (
enable_*_button) - 이러한 설정은 프론트엔드에서만 확인됩니다(안전하지 않음)
- 플러그인 활성화 여부 (
- 입력값 검증 누락 -
topic_id매개변수가 검증되지 않습니다. - 액션 게시글 미생성 - 작업이 기록되지 않으며, 누가 작업을 수행했는지에 대한 로그가 없습니다.
영향
- 무단 주제 조작
- 직접적인 API 호출을 통한 플러그인/카테고리 설정 우회
- 거래 작업을 수행한 사람에 대한 감사 로그(Audit trail) 부재
“[Purchased]”와 “[Sold]” 라벨이 갑자기 저희 사이트에서 간체 중국어로 표시됩니다. Discourse 3.6.0.beta2를 사용 중이며, 업데이트를 제외하고 사이트에서 다른 변경 사항은 없습니다.
라벨이 주제/사이트의 언어와 문자열에 맞게 표시되도록 하는 방법에 대해 조언을 주실 수 있을까요?
또한, @lava 님이 언급한 보안 취약점 문제는 해결되었나요?
감사합니다!
Gunnar
안녕하세요 @Gunnar! 현재 사이트에서 사용하는 언어(그리고 언어 코드)가 무엇인가요?
해당 보안 문제는 아직 해결되지 않았습니다. 최근 바빴고, 제가 더 이상 Discourse를 직접 사용하지 않아서 그저 완전히 잊어버렸네요 ![]()
하지만 이제 제 이름으로 태스크를 만들고, 조속한 시일 내에 시간을 내어 모든 것을 수정하겠습니다. 누군가 도움을 줄 수 있다면, Pull Request를 검토해 드릴 의향이 있습니다.
사이트 관리자 설정에서 기존 버튼을 수정하거나 삭제하고, 새로운 버튼을 추가할 수 있는 옵션을 추가할 수 있을까요?






