CCode - 코멘트 스팸 방지 플러그인 

Simple View | Forum View

CCode는 SCode라고 하는 무버블타입용 코멘트 스팸 방지 플럭인 이름을 패러디(?)해서 붙인 것입니다. SCode는 코멘트를 입력할 때 이미지로 표현된 숫자 등의 값을 코멘터가 직접 입력하는 방식으로, 스팸로봇이 자동화 방식으로 대량 스팸 코멘트 전송하는 것을 차단하는 방법입니다.

개인적으로 이런 방식이 회원가입 등의 절차에서 일회적으로 사용되는 것은 문제될 게 없지만, 코멘트 입력시마다 별도의 값 입력을 요구하는 것은 자연스럽지 못하다고 생각해왔기에, 예전에 직접 소스 변경(Hack)에 의한 방법(무머블타입에서_코멘트_스팸로봇_왕따시키기)으로 코멘트 스팸을 나름대로 막아왔습니다.

이에 번거로운 소스 수정에 의한 핵(Hack)을 나름대로 체계화시켜, 무버블타입용 플럭인 CCode를 만들게 되었습니다. 실제 적용은 무버블타입에 된 것이지만, 여타 다른 설치형 블로그를 이용하고 또 플럭인 개발 등에 관심/능력이 있는 분들께 작은 아이디어가 될 수 있다 봅니다.

1. CCode 플럭인의 작동 방식

코멘트를 입력하고 보낸다는 것은 코멘트 입력 <form>문에 속한 각종 <input>입력필드에 요구되는 값을 넣고, GET혹은 POST방식으로 지정된 주소로 전송하는 행위입니다. 즉 스팸머의 입장에 볼 때, <form>의 action속성에 나타난 전송주소와 요구되는 입력필드값만 파악하면, 간단한 스크립트만으로 대량전송을 할 수가 있습니다.

  1. 여기서 자연스레 등장하는 방법이 바로 CCode에서 사용하는 방법입니다. 원래 블로그 시스템에서 디폴트로 요구하는 입력필드 외에 새로운 입력필드를 삽입합니다.
  2. 이 입력필드의 요구되는 입력값을 엔트리마다 각각 특정한 알로리즘으로 만들어 주고, 이를 페이지에 나타낼땐, 소위 Obsfucator라는 방법을 통해 Javascript를 이용해 값을 알기 어렵게 변환해서 페이지에 심어줍니다. 예전에 Hack으로 처리했을때는 모든 엔트리에 대해, 이 값이 같았지만, 이번 플럭인 버전에서는 엔트리 마다 값이 다릅니다. (*CCode에서 사용된 Obsfucator는  http://www.jottings.com/obfuscator/ 의 자바스크립트 루틴을 펄로 변환 이용한 것입니다.)
  3. 전송된 커멘트 입력폼 값을 받아 처리하는 특정 루틴에서, 위에서 설정한 속성의 값이 있나 없나? 있다면 그 값은 요구된 값과 일치하는 가를 판단해 스팸여부를 판단하는 방식입니다.

2. CCode 설치

무버블타입 2.661 버전과 3.121 버전에서 테스트를 해봤는데, 3.0D버젼 이후랑 2.661버전 이전이랑 큰 변화가 소스상에 생겼지만, 2.661에서도 잘 작동하는것 같습니다.

소스를 다운받아 풀면 CCode.pl 파일이 하나 생깁니다. 이를 mt/plugins 폴더 아래에 둡니다.

3. 버젼 2.661 에서의 템플릿 적용방법

  • Individual Entry Archive에서 entry_id로 찾기를 해보면,
    <input type="hidden" name="entry_id" value="<$MTEntryID$>" /> 와 같은 부분이 나옵니다. 이 아래에다 <$MTEntryAntiSpamCommentField$> 를 삽입하고 저장합니다.
     
  • Miscellaneous Templates에 세개의 Comment 관련 템플릿이 있습니다. 마찬가지로 각각의 템플릿에서 위와 똑같이 삽입해줍니다.
     
  • 이제 Rebuilding Individual 해주면, 끝입니다. 리빌딩하지 않으면, 향후 새로이 입력하는 엔트리에만 적용되겠죠?
     
  • 리빌딩 후에 스팸 테스트를 한번 재미삼아(?) 해보기 위해, 리빌딩하기 전에 archive/ 폴더에서 기존에 이미 생성되어 있는 아무 페이지를 다른 이름으로 하나 저장해 둡니다. 즉, CCode를 적용하기 전의 엔트리페이지에서 코멘트를 입력하는 것이, 바로 스팸봇이 여분의 입력필드를 인식하지 못하고 디폴트 입력필드만 채워서 전송하는 것과 같은 과정입니다. 리빌딩 한후에 새로운 페이지에서 코멘트를 한번 입력해보고 별 문제없이 코멘트가 달리는지 확인합니다. 앞서 저장해 두었던 페이즈를 열고, 거기서 한번 코멘트를 달아 봅니다. No such entry 머 이런 결과가 나타나는지 한번 봅니다.

4. 버젼 3.0 이후에서의 템플릿 적용방법

  • Individual Entry Archive 에서 entry_id 로 검색해보면,
    <input type="hidden" name="entry_id" value="<$MTEntryID$>" /> 부분이 두군데서 발견이 됩니다. 이 필드아래에 <$MTEntryAntiSpamCommentField$> 를 삽입해 줍니다.
     
  • 메뉴의 Special Templates 부분에 보면, 코멘트에 관한 템플릿 중에 Listing/Previe/Error 이 세개의 템플릿 각각에서,  <MTCommentFields> 를 찾습니다. 바로 이 아래에
    <MTCommentPreviewAntiSpamCommentField> 를 삽입해 줍니다.
     
  • 리빌딩해주면 끝입니다. 위 2.661 설명에서 부분의 내용대로 한번 적용하기전의 엔트리 페이지에서 코멘트를 달아봅니다. No such entry... 이런 내용이 나오면 잘 적용이 된 겁니다.

기타

이 방법은 다른 방법들과 마찬가지로, 스팸봇이 아닌 스팸머가 직접 특정한 엔트리에 방문해서 일정한 시간 간격으로 정상적인 절차로 스팸코멘트를 다는 것은 어쩔 수가 없습니다. 이 경우 엠티에서는 mt.cfg에서 ThrottleSeconds 값을 크게 잡아줘서 방지할 수 있습니다.

Comments

Posted by dukny {OpenPGP 서명} , 2005년 03월 15일 오후 4:42

Posted by dukny {OpenPGP 서명} , 2005년 03월 15일 오후 4:51

Posted by imtext {OpenPGP 서명} , 2005년 05월 16일 오전 9:59

Posted by 알록블록 {OpenPGP 서명} , 2005년 05월 16일 오전 11:52

Posted by imtext {OpenPGP 서명} , 2005년 05월 16일 오후 6:33

Posted by dukny {OpenPGP 서명} , 2005년 07월 26일 오후 4:55

Posted by 알록블록 {OpenPGP 서명} , 2005년 07월 26일 저녁 7:14

Posted by dukny {OpenPGP 서명} , 2005년 07월 26일 밤 9:36

Posted by 알록블록 {OpenPGP 서명} , 2005년 07월 28일 밤 11:46

Posted by dukny {OpenPGP 서명} , 2005년 07월 29일 오전 9:31

Post a comment

  • PGP/GPG 서명된 코멘트를 지원합니다. ?
  • 이메일 주소는 정중히 사절합니다.
  • 이름(닉네임)/블로그 주소는 필수 입력사항입니다.
  • 이미지는 자기 블로그상의 대문이미지 등을 사용하셔도 좋습니다.
  • 코멘트에 달린 이미지를 클릭하면 자신의 블로그로 연결됩니다.
  • 깨진 블로그/이미지 주소를 가진 코멘트는 수정/삭제 대상입니다.


  •   Forget me

    ?