관찰 단어 트릭

대량의 감시 단어 목록을 정규식으로 변환하는 과정에서 필터를 우회하는 몇 가지 방법을 발견했습니다. 이러한 방법은 “일반” 감시 단어와 정규식 양쪽 모두에서 작동하는 것으로 보입니다.

더블 스페이스: 감시 단어가 forbidden word라면 두 단어 사이에 여러 개의 공백을 넣어서 우회할 수 있습니다. 재미있는 점은, 렌더링된 게시물에서는 이중 공백이 제거되어 최종 텍스트에서 완전히 보이지 않는다는 것입니다.

  • 정규식을 사용하여 방지하는 방법: forbidden\s*word 사용
  • 정규식 없이 방지하는 방법: 해결책을 찾지 못했습니다.

언더스코어 사용하여 단어 경계를 우회:
정규식 없이: 감시 단어를 언더스코어로 감싸면 이탤릭체로 표시되며 허용됩니다. 즉, 필터가 forbidden인 경우 _forbidden_가 허용됩니다.
정규식 사용: 일반적으로 단어 경계는 \b를 사용할 때만 검사되며, 이 경우 언더스코어가 이를 이깁니다. 즉, 필터가 \bforbidden\b인 경우 _forbidden_가 허용됩니다.

  • 정규식을 사용하여 방지하는 방법: \b 대신 [\b\_] 사용
    수정: 이 방법은 잘 작동하지 않는 것 같습니다.
    단어 경계를 제거하는 것도 작동할 수 있지만, 그렇게 하면 cumulative나 title과 같은 단어를 실수로 차단할 위험이 있습니다 :wink:
  • 정규식 없이 방지하는 방법: 해결책을 찾지 못했습니다.
7개의 좋아요

네, 일반적으로 이런 종류의 문제는 우회할 수 있는 “교묘한” 트릭이 워낙 많아서 시간 낭비하지 않습니다. 유니코드는 정말로 방대한 공간이니까요.

4개의 좋아요

사실 우리는 얼마 전 몇몇 대형 교육 프로젝트에서 이 방식을 시도해 본 적이 있습니다.

해당 프로젝트가 중단되기 전까지 퍼지 매칭(fuzzy matching) 기능이 출시되었는데, 예상대로 정당한 사용 사례에서 다양한 문제를 일으켰습니다.

3개의 좋아요

감시 단어는 주로 나쁜 단어에 대한 “첫 번째 방어선” 역할을 합니다. 우회 방법과 위반 사항을 신고하는 것은 여전히 커뮤니티의 도움이 필요합니다.

어떤 정규식(regex)을 작성하더라도 image를 감지할 수는 없습니다.

9개의 좋아요

알려 드릴 것은, []는 "문자 클래스"를 나타냅니다. Perl 정규식, 그리고 아마도 Ruby 정규식에서도, \b는 문자 클래스 외부에서는 "단어 경계"를, 문자 클래스 내부에서는 "백스페이스"를 의미합니다. C 언어에서는 '\b’는 항상 백스페이스(정확히 말하면 )를 의미합니다. 백스페이스는 대부분의 경우 유용한 문자가 아니지만 단어 경계는 유용하므로, 이렇게 재정의된 것입니다.

정규식을 사용하여 “_forbidden_” 또는 "forbidden"을 포착하려면 다음을 사용할 것입니다:

\b_?forbidden_?\b

(유니코드 트릭이나 정규식을 피하기 위해 모든 문자를 &#xXX; 인코딩하는 방법도 알고 있습니다.)

3개의 좋아요

컨텍스트에 따라 차이가 있다는 사실을 이제야 깨달았습니다. 설명해 주셔서 감사합니다! :slight_smile:

2개의 좋아요