포럼에 스팸 봇이 대량으로 유입되는 것을 방지하는 방법은?

회원 수 1만 명 이상의 중형 규모 온라인 포럼의 운영자입니다. 지난밤에 다양한 봇이 각 항공사, 여행사 및 기타 몇몇 회사의 가짜 고객센터 전화번호를 게시하는 심각한 스팸 공격이 발생했습니다.

이 모든 계정은 다양한 방식으로 전화번호를 게시하고 있습니다(모두 미국 번호이지만, 일반적인 하이픈 대신 다양한 문자를 사용하여 번호를 구분합니다). 지난밤에 여기에서 전화번호를 필터링하는 게시물을 보았지만, 문제는 우리 서비스에서 나타나는 오류 코드를 잘못 감지한다는 점입니다(우리의 주요 목적이 지원 포럼인 점을 고려하면 이는 치명적입니다). 또한 페디버스(Fediverse) 핸들 같은 다른 항목들도 잘못 감지합니다.

또한, 이 포럼은 미국에 등록된 LLC(유한책임회사)가 운영하지만, 현재 순수하게 기부금으로만 운영되고 있어 Akismet과 같은 유료 서비스를 사용하는 것은 현실적으로 어렵습니다.

우리는 ‘핵 옵션’이라고 할 수 있는 아이디어가 하나 있지만, 현재로서는 이를 강력히 반대하고 있습니다. 이 방안이 일부 사용자 기반을 제외하게 될 뿐만 아니라, 개인적으로도 지원 접근성을 어느 정도 제한할 것이라고 생각하기 때문입니다.

미리 감사드립니다!

이러한 스팸이 최근 매우 흔해졌습니다. 일반적인 스팸 방지 가이드는 여기에 있습니다:

답글 중에는 감시 단어(watched words) 기능을 사용하여 전화번호와 이메일 주소를 차단하거나 플래그를 지정하는 데 사용할 수 있는 정규식(regex)에 대한 유용한 게시물이 있었습니다.

네, 특히 제가 시도했던 정규식(regexp)가 그랬습니다. 불행히도 이 정규식은 우리 서비스에서 사용하는 ActivityPub 핸들 및 오류 코드(보통 123-4567 형태로 표시됩니다)를 일부 필터링해 버렸어요.

아, 그렇군요. 더 구체적인 방식으로 짧은 코드를 피할 수 있는 방법을 생각해 볼 수 있겠네요… 예를 들어 다음과 같은 방식을 사용할 수 있습니다:

\b\d{3}[-.\s]\d{3}[-.\s]\d{4}\b

이 방식은 1-800-123-4567, 123 456 7890과 같은 형식을 포착합니다.

만약 형식이 +1 123 456 7890과 같이 +1로 시작하는 경우라면, +1을 구체적으로 포착하기 위해 다음 방식이 더 적합할 수 있습니다:

\+1[-.\s]\d{3}[-.\s]\d{3}[-.\s]\d{4}

이 두 방식 모두 123-4567과 같은 짧은 코드에 대해 오탐(false positive)을 일으키지 않습니다.