SPAM 답글 막기

출장갔다온 동안 증식 -_- 해댄 답글들을 제거하고, 이후에는 이런 일을 최대한 막기 위해, 다음과 같이 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나 기타 등등의 수단으로 알려주면 고맙겠음
Jinuk Kim
Jinuk Kim

SW Engineer / gamer / bookworm / atheist / feminist

Articles: 935

4 Comments

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

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

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

Leave a Reply