나의 코멘트 스팸 막는 방법
web | 2006-06-14
스팸을 막는 방법으로 javascript를 사용하는 것은 매우 강한 유혹입니다. 가장 확실한 방법이지요. 하지만 javascript는 접근성에 큰 제약을 가지고 있습니다. 토끼군님의 말씀 처럼 javascript를 사용하지 못할 때 url에 뭔가를 더 붙이는 방법은 스팸 때문에 사용자에게 특정 행동을 강요하는 방법이기 때문에 저는 별로 좋은 것 같지 않습니다. 글쓸때 이미지의 숫자를 읽어서 넣는 방법도 같은 이유로 제가 선호하지 않는 방법입니다.
저도 최근에 스팸과 열심히 싸우고 있기 때문에 스팸에 관련된 글을 써야 겠다는 생각은 하고 있는데 이게 또 딜레마가 있습니다. 비용이 적게 들어가는 스팸 처리 방법은 알려지면 금방 깨질 수 있다는 것이지요. 그래서 지금도 조금 불안하기는 하지만 제가 사용하고 있는 방식을 적어 보겠습니다. 깨지면 다른 방법을 또 찾아보죠. ㅜㅜ
javascript 사용과 같이 접근성을 떨어뜨리면 스팸은 확실히 줄어듭니다. 하지만 접근성을 떨어뜨리는 방법을 사용하고는 싶지 않기 때문에 저는 스팸 로봇을 속이는 방법이 가장 확실한 대처 방안이라고 생각 했습니다. 태터툴즈에 들어가는 스팸 방지 기능을 보면 스팸을 입력을 받아서 처리하는 방향과 기타 여러가지 방법을 같이 사용하고 있는 것 같은데, 저로서는 그러한 것을 개발할 능력도 안되고 샘플 DB를 구축 할 수도 없기 때문에 다른 방법을 찾아야 했습니다.
스팸로봇은 input필드의 name값을 참조 합니다. 예전에 이러한 특성을 이용해서 수정블로그에서 스팸을 방어하려고 했었는데 잘 작동되지 않았습니다. 스팸 로봇은 페이지를 긁어가서 http로 스팸을 쏘기 때문에 html코드만으로는 스팸을 막을 수가 없는게 사실입니다. 그래서 생각해 낸 방법이 긁어간 html코드를 이용해서 로봇을 속이는 것입니다. 예를 들어서 email 입력 필드에 name="url"이라고 하면 스팸 로봇은 name이 url이기 때문에 이메일 대신에 http://로 시작하는 url을 넣게 됩니다. 여기서 이메일 형식 체크를 하면 사람은 정확히 맞는 형식의 email을 넣고 스팸봇은 url을 넣을 것이기 때문에 스팸인지를 확신할 수 있습니다. 이메일 입력 하는 곳에 홈페이지 넣는 경우의 사람은 극히 드물것이라는 가정이 깔려 있죠. 그리고 이메일 필드가 필수여야 합니다.
하지만 저는 이메일을 필수 사항으로 받고 있지 않기 때문에 이 방식은 사용하고 있지 않고 다른 방법을 사용합니다. 사용자 이름을 입력 받는 name필드를 두개 만듭니다. name 값은 약간 다릅니다. 하나는 name="rejname"(실제 사용하는 필드)이고 다른 하나는 name="name"입니다. 스팸 봇은 이 두 필드에 사용자 이름을 넣습니다. 하지만 뒤의 name="name" 필드는 스타일로 감춰져 있고 심지어 readonly="readonly" 속성까지 걸려 있습니다. 일반 브라우저로 이 필드에 값을 넣는 것은 불가능 하지만 스팸 봇은 html코드를 긁어가서 사용하기 때문에 이 필드에 값이 들어가게 됩니다. 역시 기계가 넣은 스팸 글이라는 것을 확신 할 수 있습니다.
현재까지 스팸이 아닌 것을 스팸이라고 오판 한 경우는 0건이고 저장된 스팸 DB는 몇 천개 정도 들어왔는데 이 방법을 통과한 스팸은 두손가락으로 셀 수 있을 정도 입니다. 하지만 가장 큰 단점은 아무래도 화면에는 보이지 않는 추가 input을 사용해야 한다는 것이지요. 그리고 이 방법이 널리 퍼지게 되면 또 이것을 뚫는 스팸 봇이 등장 하겠지요. 이 방법은 의외로 뚫기가 쉽습니다. 물론 필드 갯수를 늘려서 확률을 낮출 수는 있습니다...만 현재도 충분히 지저분 하죠.;;;
그리고 많은 사람들이 ip를 이용한 스팸 차단을 무시하는 경향이 있는데 저는 이 방법이 굉장히 중요하다고 생각합니다. 한번 확정된 스팸 ip를 원천적으로 차단하는 방법은 스팸봇에 대한 예의이기도 합니다;;; 로그를 보면 스팸봇들이 계속해서 ip를 변경하기는 하지만 상당수는 한번 접근했던 ip로 재접근 하는 것을 볼 수 있습니다. 고차원의 스팸필터가 없다고 하여도 이런식으로 ip차단을 하면 최소한 며칠전같이 태터 구버젼들이 폭탄을 맞는 경우는 없어질 것입니다.
태터툴도 계속 해서 스팸에 대해서 막강하게 대응을 하고는 있는데 얼마 못가서 뚫리는 것을 보면 저는 스팸을 막을 수 있는 정답은 없는 것이 아닌가 하는 생각이 듭니다. 가장 중요한 것은 웹사이트에 접근하는 사람이나 로봇의 패턴을 분석하고 이것을 바탕으로 부적절한 접근을 막아내는 것입니다. 그리고 이것을 웹사이트 운영자가 손쉽게 할 수 있게 해주는 툴이 가장 좋은 스팸 방지 툴이 아닐까 하는 생각도 합니다. 스팸을 없애는 것은 불가능 합니다. 하지만 꾸준한 대응을 통해서 확실히 줄일 수 있습니다.
원컨데 누가 스팸을 근절할 수있는 깔끔하고 접근성을 유지하는 확실한 방법좀 만들어 주세요. ㅜㅜ
Comments
수정에서 필드 이름을 랜덤하게 지정했음에도 불구하고 뚫리던 이유가 그 주변에 있는 텍스트를 인식해서 그런 게 아닌가요? 얼마 안 가 뚫릴 것 같은데... -_-;;;
Eolin Antispam 플러그인을 사용한 후로 한 번도 뚫리지 않았습니다. 어제 댓글 기능이 안 되는 바람에 잠시 껐다가 하루 깜빡하고 안 켰더니 그새 트랙백 스팸이 40개쯤 들어와있더군요;;; (제 블로그에 아무런 장치를 하지 않으면 하루에 스팸이 100개 정도 들어올 겁니다)
토끼군: 수정의 방법이 뚫린 이유는 해당 정보가 모두 form안에 있었기 때문인것 같습니다. 제가 사용하고 있는 방법은 스팸 로봇이 텍스트를 인식해도(당연히 인식하겠죠) 어느것이 진짜인지 알지 못한다는 것에 기인한 방법입니다. 실제로 스팸 로봇들은 두 필드에 동일하게 이름을 입력 합니다. 방법은 지저분하지만 구현이 간단하고 6개월 정도 됐는데 현재로서는 만족할 만한 효과를 보여주고 있습니다. :) daybreaker: 태터 사용자들은 좋은 스팸 플러그인이 계속 만들어 져서 좋군요. :( 지금 태터 sandbox받아서 설치해봤는데 있는데 로그인이 안되요. 포럼 검색해서 읽어봐도 뭐가 문제인지 모르겠음;;; sandbox래서 물어볼 곳도 마땅치 않고. ㅜㅜ
저는 테터에 올라온 "영문으로만된 스팸댓글방지"플러긴을 쓰고있답니다. 무식한방법이긴하지만.. 효과는 있더군여.. 스팸과의 영원한 전쟁...이겠죠? ㅋㅋ
신현석님. sandbox 및 trunk 관련 버그는 QA 게시판을 이용하시면 됩니다 : )
스팸에 시달려 살이 빠지네요.