1. 부분 문자열 검색의 한계
어디에나 기본적으로 있는, 부분 문자열 검색을 하는 필터링은 거의 소용이 없습니다. 잘 아시겠지만 똑같은 IP, 똑같은 이름이란 것은 거의 붙지 않고, 언젠가 뚫리기 마련입니다.
태터툴즈는 한국에서 주로 쓰고 달리는 것은 영어 스팸이 대부분입니다. 그러므로 영어만 있는 코멘트면 스팸이라는 전제로 만들어진 플러그인이 태터툴즈의 "영어환자"군요. 하지만 태터툴즈 내부에서 이걸 공개하면서 "세계화에 역행하는 황당한 플러그인"이라고 했으니... 그냥 꽉 막아두는 것이 능사는 아니죠.
2. 집단 지성 이용 - 1+1>2
워드프레스는 akismet이라 하여 아예 전용 서버로 코멘트나 트랙백 등을 보내서 스팸 평가를 하는 방안을 세운 것 같고(API 키를 받아야 하는게 귀찮은 문제) 태터툴즈에서도 이런 식의 스팸 대처법을 만들고 있는 듯 합니다. 다만 이것도 결국에는 조작이 가능해질 듯 합니다. 열심히 스팸 코멘트에다 대고 "이건 스팸 아님" 판정을 전송하는 광경을 상상해보세요.
이 방법은 당분간은 부담이 비교적 적은 방법이 될 것 같습니다.
3. 튜링 테스트 - 글을 보내는 너는 사람인가 컴퓨터인가?
회원 가입 같은 것에서 흔히 보이는 것인데 사람이라면 모니터의 그림을 보고 해당하는 글자를 입력할 수 있지만 컴퓨터는 그림을 해석할 방법이 전혀 없죠. 이런 식으로 코멘트 등에 추가 입력을 요구하는 방법입니다. 컴퓨터를 막아버리는 훌륭한 방안이지만, 아무래도 교류가 위축되는 느낌은 피할 수 없을 것 같네요.
4. Bayesian Filter - 스팸에 맞춰 진화하는 필터
스팸 해결 자체로는 궁극적인 방법이라고 봅니다. 스팸은 그 내용을 보여줘야만 하고, 내용도 뻔한 것이 많습니다. 대출, 담보, 영어회화, 비아그라... 같은 것이죠. 스팸을 자동으로 인식해낼 수만 있다면 문제는 끝나는 겁니다. 다만 부분 문자열 검색은 실패하고 말았죠.
스팸의 공통점은 그 뻔한 내용과 단어들입니다. 스팸에 자주 등장하는 단어들은 사람이 쓰는 일반적인 글에는 잘 등장하지 않습니다. 그리고 이건 감출 수 없는 스팸의 약점이죠. 이 통계학적인 약점(뻔한 단어들)과 간단한 공식을 활용한 알고리즘으로 폴 그레이엄씨는 이제 거의 스팸 격퇴 수준에 다다른 듯 합니다(http://paulgraham.com/spam.html).
다만 약점은 이 글을 보시면 알 수 있습니다(http://www.bsdforum.or.kr/viewtopic.php?t=33). 일단 처음엔 자료가 없기 때문에 교육을 집중적으로 시켜줘야 하고(이게 사용자에게 가장 큰 스트레스죠), 그나마 스팸을 판단하기 위해서 메시지 하나하나를 전체를 뒤져가면서 분석하고, 많은 수의 스팸 단어 DB를 뒤적거리고, 확률을 계산해야 작업이 끝납니다. 저 위의 세 가지 방법보다는 속도가 너무 느려지고 말 가능성이 높습니다.
메일이 아니라 더욱 짧은 코멘트의 경우엔 처리 속도는 별로 영향이 없지만 그 대신 잘못 판단할 확률이 크게 늘어나는 것 같아서 좀 그렇습니다. 하지만 한번 도전해볼만한 것 같습니다. 잘 정비된 이 방식의 필터를 뚫을 방법은 단 하나뿐입니다. 스팸의 주요 단어를 빼고 스팸 내용을 만들어야 하거든요(자세한 설명은 http://paulgraham.com/sofar.html).
초기의 통계 부족을 해소하려면 기본 통계치를 미리 제공하는 방법도 괜찮을 듯 합니다.
Posted by pequt

