Written June 27, 2006 in Uncategorized

출장갔다온 동안 증식 -_- 해댄 답글들을 제거하고, 이후에는 이런 일을 최대한 막기 위해, 다음과 같이 WP를 변경
(아마도 WP용 폼에 맞춰서 답글을 생성하는 봇이 있는 것 같음)

  1. Form에 숨겨진 필드 추가 (cmd5 라고 id를 붙임)
  2. Submit할 때 java script에서 md5 sum을 계산하고 ( 의 코드 사용) cmd5의 숨겨진 값에 적어넣고 form 전송
  3. Server 쪽에서 commet를 처리하는 부분에서 미리 계산된 md5 checksum과 PHP의 md5 checksum 함수를 사용해서 계산한 결과를 비교함
  4. 두 개가 같은 경우에만 comment 허용

대충 이런 식으로 답글을 처리하기 시작했으니 이제 browser (그것도 java script가 되는)를 에뮬레이션 하는 수준의 로봇만 답글을 달 수 있을 거라고 믿고 있는 중 Orz

…삽질은 이걸로 끝난게 아니었음
일단 동아리 서버의 PHP는 UTF-8으로 인코딩된 문자열을 처리하고, 웹 브라우져들은 윈도우를 사용한다고 가정할 때, 아마도 뭔가 다른 인코딩으로 처리되는 듯함 (IE/FF다 같은 hash 값이 나온 것으로 보아)

그래서 해본 것이, 일단 utf-8 -> cp949로 전환해서 테스트: 실패 (값이 다르게 나옴)
이번엔 윈도우 내부 처리 방식인 UCS2로 전환해서 테스트: 역시 실패 -_-

도대체 웹 브라우져에서는 뭘로 인코딩을 해서 쓰는걸까? -_-;
(동일한 알고리즘 구현이란 것은 확인할 수 있었던게(사실 UCS2는 테스트할 이유가 없었던게), 영문자만 사용하면 (즉 ascii만 쓰면), ascii-compatible한게 보장되는 UTF-8 에선 서버/웹브라우져 양쪽에서 동일한 hash 값이 나온다는 것 -_-)

결론이 나왔음. 일단 내가 실수한 부분이 있었고 (java script에 인코딩 관련된 부분 (한 캐릭터 크기 관련)이 있었음), 이거 잡고나니 UCS2로 내부적으로 처리되는 문자열이 javascript 쪽으로 넘어간다는 것을 알 수 있었음. 그래서 서버에서도 이걸 emulation해서 넘어온 문자열을 UCS2로 되돌린 후에 md5 hash를 계산함

이제 문제점들은,

  • 내부 문자열 처리가 2바이트가 아니면? -_- 어찌 꼬일지 모름
  • 결국엔 OS 인식해서 내부 문자열도 추론해야할 판이라는 것?
  • MS Windows 환경의 IE/FF는 둘다 잘 동작하는 것을 확인했는데, 지금 당장 쓸 수 있는 리눅스 머신이 없어서 리눅스 머신에서 글 쓰는 것은 테스트 못하는 중. 혹시 리눅스에서 안된다 싶은 사람은 MSN이나 hanirc의 #snucse나 기타 등등의 수단으로 알려주면 고맙겠음
  Related Posts  

4 comments on ' SPAM 답글 막기 '

  1. 수고하셨습니다 -_-)b

  2. 난 그냥 Akismet 플러그인 activate 시켜버렸는데 ;;

      Written by lapiz on July 03, 2006 at 6:04pm

  3. -_-;;
    잘 살아 있기는 하구나~~
    ㅋㅋㅋ
    그냥 둘러봤다…
    이젠 나도 제대를 앞뒀구나.. 11월 이지만…이젠 왕고이니… 휴~
    ㅋㅋㅋㅋ
    곧 휴가 나가면 연락하지..

    ps: 내일 7월 8일 저녁 7시쯤??
    kbs2에서 하는 스펀지에 아마 내가 나올듯 하도이다.
    스펀지에서 새벽부터 밤새도록 촬영을 하고 갔는데 어찌 나올지는 모르겟네..
    ㅋㅋ

      Written by 코로나^^! on July 07, 2006 at 9:08pm

  4. 휴가나오면 여기에 답글 달던가 전화하자. 나도 원룸서 혼자 살고 있는 상태니 하루쯤 재워주는건 큰 무리 없을 듯함

Leave a comment