Trading Buttons

이 플러그인이 다소 구식이었고, 오늘 마침 업데이트가 되었습니다 (Arkshine님의 도움 덕분에 가능했습니다 :slight_smile:). 플러그인을 업데이트한 후, 프로덕션 환경이라면 앱을 다시 빌드해야 하고, 아니면 애플리케이션을 재시작해야 합니다. Discourse 팀에서 제공한 몇 가지 지침은 다음과 같습니다: Install plugins on a self-hosted site

6개의 좋아요

업데이트 감사합니다. 모든 기능이 정상 작동하는 것을 확인했습니다.

6개의 좋아요

안녕하세요, 여러분

이 문제를 해결하는 데 도움을 주실 수 있을까요?

데스크톱에서 검은 화면이 표시됩니다

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)
1개의 좋아요

안녕하세요, @viswanatha :slight_smile:

이 게시글이 topic-trade-buttons 플러그인과 관련되어 보이기 때문에, 적절한 분들이 확인하실 수 있도록 관련 주제 게시판으로 옮겼습니다. :+1:

1개의 좋아요

@viswanatha 이 플러그인을 추가한 후 프로젝트를 다시 빌드(re-build)하셨나요?

1개의 좋아요

Janno_Liivak 님,

프로젝트를 다시 빌드했지만, 여전히 동일한 문제가 발생하고 있습니다.

아래 옵션들도 없습니다.


토픽 거래 버튼 활성화

image

카테고리 설정


2개의 좋아요

@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
5개의 좋아요

:warning: 보안 취약점 :warning:

요약: 이 플러그인을 설치하면 비활성화되어 있더라도, 해당 토픽에 존재하는 모든 토픽 커스텀 필드가 토픽에 액세스할 수 있는 모든 사용자에게, 익명 사용자를 포함하여 유출됩니다. 설치된 다른 플러그인에 따라, 토픽 커스텀 필드에 민감한 데이터가 포함될 수 있습니다.

이 플러그인을 클라이언트를 위해 검토하는 과정에서 여러 보안 문제를 발견했습니다. 우리는 포크(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 사용은 불필요하며, 위에서 설명한 보안 문제를 악화시킵니다.

7개의 좋아요

풀 리퀘스트가 이제 병합되었습니다

4개의 좋아요

나도 마찬가지야, 설정을 못 해

1개의 좋아요

방금 브라우저 개발자 콘솔에서 비권장(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 를 참조하세요.

이 문제를 알리고자 합니다 - 제가 직접 수정할 수는 없지만요. :see_no_evil_monkey:

4개의 좋아요

브라질에서 온 사람이라 브라질 포르투갈어로 번역해 드릴게요!

2개의 좋아요

안녕하세요, @Anderson_Cardoso_Silva! 번역을 포함해 풀 리퀘스트를 작성할 수 있으신가요?

1개의 좋아요

브라우저 로그에서 발견한 문제들(이其中包括 @Roi가 언급한 내용)과 몇 가지 어색했던 영어 텍스트를 수정했습니다. 모든 것을 로컬 개발 환경에서 테스트했지만, 다른 분이 자신의 Discourse에서 테스트해 주신다면 감사하겠습니다.

3개의 좋아요

@Arkshine 님, .discourse-compatibility 파일에 이 줄을 추가했습니다. 감사합니다!

2개의 좋아요

:warning: 보안 취약점 :warning:

@Janno_Liivak 님,

유용한 플러그인을 공유해 주셔서 감사합니다! 주의가 필요한 치명적인 보안 취약점을 몇 가지 발견했습니다:

문제점

  1. 권한 확인 누락 - 모든 사용자가 어떤 주제든 판매/구매/교환 상태로 표시할 수 있습니다.
  2. 백엔드 검증 누락 - 컨트롤러가 다음 항목을 검증하지 않습니다:
    • 플러그인 활성화 여부 (topic_trade_buttons_enabled)
    • 카테고리 버튼 활성화 여부 (enable_*_button)
    • 이러한 설정은 프론트엔드에서만 확인됩니다(안전하지 않음)
  3. 입력값 검증 누락 - topic_id 매개변수가 검증되지 않습니다.
  4. 액션 게시글 미생성 - 작업이 기록되지 않으며, 누가 작업을 수행했는지에 대한 로그가 없습니다.

영향

  • 무단 주제 조작
  • 직접적인 API 호출을 통한 플러그인/카테고리 설정 우회
  • 거래 작업을 수행한 사람에 대한 감사 로그(Audit trail) 부재
4개의 좋아요

@Janno_Liivak 님,

“[Purchased]”와 “[Sold]” 라벨이 갑자기 저희 사이트에서 간체 중국어로 표시됩니다. Discourse 3.6.0.beta2를 사용 중이며, 업데이트를 제외하고 사이트에서 다른 변경 사항은 없습니다.

라벨이 주제/사이트의 언어와 문자열에 맞게 표시되도록 하는 방법에 대해 조언을 주실 수 있을까요?

또한, @lava 님이 언급한 보안 취약점 문제는 해결되었나요?

감사합니다!
Gunnar

1개의 좋아요

안녕하세요 @Gunnar! 현재 사이트에서 사용하는 언어(그리고 언어 코드)가 무엇인가요?

해당 보안 문제는 아직 해결되지 않았습니다. 최근 바빴고, 제가 더 이상 Discourse를 직접 사용하지 않아서 그저 완전히 잊어버렸네요 :see_no_evil_monkey:

하지만 이제 제 이름으로 태스크를 만들고, 조속한 시일 내에 시간을 내어 모든 것을 수정하겠습니다. 누군가 도움을 줄 수 있다면, Pull Request를 검토해 드릴 의향이 있습니다.

4개의 좋아요

English (US). 아래는 우리 사이트의 모든 “언어” 설정에 대한 스크린샷입니다:

2개의 좋아요

사이트 관리자 설정에서 기존 버튼을 수정하거나 삭제하고, 새로운 버튼을 추가할 수 있는 옵션을 추가할 수 있을까요?