yml에서 익명 검색을 비활성화하기 위한 from: 및 to: 구문

안녕하세요, 익명 사용자를 위한 검색 기능을 비활성화하기 위해 파일 수정을 포함하여 앱을 재구축하고 싶습니다. (단순히 CSS만으로 해결하는 것보다 더 근본적인 방식으로요)

from: 및 to: 부분에 사용되는 훅의 구문에 대한 문서를 공유해 주실 수 있을까요?

    - replace:
        filename: "/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.js"
        from: /get classNames()/
        to: |
          if (!this.currentUser) {return false;} get classNames()

Discourse는 현재 이 구문을 수용하지만, 재구축이 끝날 때 다음과 같은 오류가 발생합니다.

 Error: Parse Error at discourse/components/search-menu.gjs:88:7"
replace failed with the params {"filename"=>"/var/www/discourse/app/assets/javascripts/discourse/app/components/search-menu.gjs", "from"=>"/get classNames()/", "to"=>"if (!this.currentUser) {return false;} get classNames()\n"}

이를 위해 숨겨진 사이트 설정이 있습니다:

rate_limit_search_anon_global_per_minute

알려주셔서 감사합니다. 정확히 확인하기 위해, 숨겨진 사이트 설정의 이름이 무엇인가요? 그리고 이 설정이匿名用户의 검색을 완전히 비활성화하나요, 아니면 단순히 검색 결과를 숨기는 것인가요? 컨트롤러 레벨에서 접근을 차단하는 방법을 찾고 있어서, 해당 설정만으로도 충분한지 아니면 여전히 커스텀 코드가 필요한지 궁금합니다.

변수를 제공해 주셔서 감사합니다. 이 문서 덕분에 작동하게 만들 수 있었습니다.

app.yml을 다음과 같이 수정하고 저장한 후, ./launcher restart app 명령을 실행했습니다(리빌드는 필요하지 않음)

env:
  DISCOURSE_RATE_LIMIT_SEARCH_ANON_GLOBAL_PER_MINUTE: 0

이제 /search 페이지에 접근할 수 없습니다 = 좋습니다
프런트 엔드의 검색 버튼이 즉시 '이 작업을 너무 많이 수행했습니다’라는 메시지를 반환합니다 = 좋습니다
검색 버튼을 숨기려면 다음을 사용할 수 있습니다:

.anon #search-button {
	display: none !important;
}

그러나 질문은 이 방법이 충분히 포괄적인지 여부입니다. 누군가가 단순히 세션 쿠키를 만들어 로그인된 것처럼 보이게 함으로써 검색을 통해 사이트 콘텐츠에 접근할 수 있을까요?

더 포괄적이지만 완전하지는 않은 해결책:

파일 위치: /var/www/discourse/app/controllers/search_controller.rb
수정 내용: ‘def show’ 뒤에 'if current_user.present?'를 추가하고, 조건문 맨 아래에 'end’를 추가합니다.

하지만 재시작 후에도 변경 사항이 유지되도록 만드는 데 실패했습니다. app.yml의 after_code replace: 기능을 사용하여 재시작 후에도 변경 사항을 유지하는 방법에 대해 아시는 분은 알려주시면 감사하겠습니다.

검색을 하려면 로그인해야 한다는 말씀이신가요?

원문에서 다음과 같이 요청하셨죠.

그리고 이 설정이 바로 그 역할을 수행합니다.

물론 로그인된 사용자들에게는 영향을 주지 않습니다.

제 말은, 로그인하지 않은 사용자가 세션 쿠키를 만들어 로그인한 것처럼 위장할 수 있다는 뜻이에요. 다만, currentUser 함수가 세션 키를 확인한다고 가정하면, 제가 너무 멀리까지 추측하고 있는 것일 수도 있겠네요.

:face_with_raised_eyebrow:

그것은 보안 문제가 됩니다. 그렇게 할 수 있다면 HackerOne 에 반드시 보고해 주세요.

“그것은 보안 문제가 될 것입니다. 만약 그렇게 할 수 있다면 HackerOne에 반드시 보고해 주세요.”

아니요, 저는 디스코르스에 새로 온 사람이라 인용조차 제대로 못 하고 있어요 :slight_smile: 그냥 궁금해서 물어본 거였는데, 혹시 디스코르스 엔지니어분이 계실까 봐요 :slight_smile: ; 어쨌든 이 스레드에서 저희 문제를 해결해 주셔서 정말 감사합니다, Falco.

DISCOURSE_RATE_LIMIT_SEARCH_ANON_GLOBAL_PER_MINUTE: 0

하지만 컨트롤러 수준에서 다음을 시도해 보시는 것을 주저하지 마세요:
/var/www/discourse/app/controllers/search_controller.rb
수정 사항: `def show` 뒤에 `if current_user.present?`를 추가하고, 조건문 맨 아래에 `end`를 추가합니다.