본문이 비어있는 스팸 트랙백을 차단해버리기

오늘 무슨 날이군요. 알파벳으로만 되어 있는 영문 트랙백이 잔뜩 달렸습니다. 이상한 점은, 제가 영어중환자 플러그인을 설치하고 있었거든요. 그런데도 트랙백이 걸리더란 말입니다.

그래서 보니, 통과된 스팸 트랙백은 “본문이 없고 제목만 있다”는 점을 발견했습니다.
영어중환자 플러그인을 보니 이렇게 되어 있더군요.

function EnglishPatient_AddingTrackback($target, $mother) {
    return !preg_match('/^[\x{00}-\x{7F}]+$/u', $mother['excerpt']);
}

붉은 글자 부분이 패턴(정규식)입니다. 즉, 트랙백의 본문글에서 전부 영문인지 체크해서, True가 되면 전부 영어니까, 그걸 !로 뒤집어서 반환하는 것입니다. 알고리즘은 훌륭하지만 비어있으면 False로 처리되니까 !로 뒤집혀서 True. 트랙백이 통과되어 버리는 단점이 있죠.

제 취향대로 고쳐버렸습니다.

function EnglishPatient_AddingTrackback($target, $mother) {
    return preg_match('/[xA1-xFE][xA1-xFE]/', $mother['excerpt']);
}

preg_match 앞에 !를 떼어버리고, 정규식을 한글이 들어있는지 체크하는걸로 바꿨습니다.

이걸로 해결될려나요.

ps.

휴지통에 들어간 스팸 트랙백수. 계속 증가중…

ps.

좀더 정교한 한글 매칭 정규식
/[x{1100}-x{11ff}x{3130}-x{318f}x{ac00}-x{d7af}]+/u
다만 유니코드에서만 적용됨.

글쓴이 : Draco (https://draco.pe.kr)
크리에이티브 커먼즈 라이선스
이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 21개

    1. 티스토리와 텍스트큐브에는 같은 플러그인들이 있습니다. EAS와 영어 중환자 플러그인이죠. 전부 완벽하진 않습니다.
      EAS는 태터-티스토리-텍스트큐브 블로그들이 이올린을 통해 신고한 것을 학습해 필터링을 하기 때문에 가장 폭넓은 방어를 하지만, 학습이전의 초기단계 방어는 취약합니다.(그래서 차후에 다시 지우는 EAS-Plus가 나왔지요)
      영어 중환자 플러그인은 영어만으로된 스팸을 처리해줍니다만, 이 글의 본문과 같은 헛점이 있었습니다. 몇몇 티스토리 유저분들도 저와 같은 문제점을 보고했었습니다.

    2. 티스토리는 대신 서버차원에서 대응을 해주니까, 큰 문제는 전체 유저들에게 일괄적으로 해결/보완 해준다는 장점이 있죠. 게다가 다른 서비스들보다 피드백이나 대응도 빠른거 같더군요.

  1. 트랙백 기능을 이용하기 위해서는 각 페이지마다 고유의 URL이 있어야 하므로 이 URL은 동적 페이지여야 하지요. 즉, 확장자는 .html, .htm이여도 실제 동작할 때에는 php나 jsp같은 페이지를 지칭해야만 합니다. 하지만, 잘 보면 이런 URL은 쓰이지 않습니다.

    따라서, 동적 페이지가 아닌 컨텐츠인 .htm, .html을 홈페이지 필터링에 추가해주시면, 스팸으로 들어오는 트랙백은 필터링됩니다. 현재는 .htm, .html만 추가하면 95%이상 필터링 되지만, 추후라면 .jpg, jpeg, .gif, .png같은 그림파일의 확장자 역시 집어 넣어 주시는게 좋을겁니다. (제가 적용해서 사용중. 현재 100% 차단 성공..)

    (기술적인 면으로 생각해보면 php를 사용하는 건 대부분이 apache웹서버를 사용하고 있고 이런 기본 페이지를 여러개 이용할 때에는 웹서버의 간단한 조작만으로 가능합니다. 따라서 귀찮게 .php나 .htm파일까지 연결 시킬 필요가 없지요.
    반면 .asp나 .aspx 확장자의 경우 iis에서 사용됩니다. 불행하게도 iis를 사용하는 웹서버의 대부분의 개발자들은 웹서버를 직접 건드리는 것을 싫어하므로 확장자가 그대로 드러납니다. 이 경우, 트랙백 기능을 추가하는데에 신기술을 사용하는게 일반적일 것이므로 .asp를 사용하지 않을 것으로 예측할 수 있습니다.

    트랙백을 위한 URL이 있는 페이지를 관찰해보면, 대부분 파일 전송위 취약점을 통해 직접 페이지를 생성하는 것이므로 이 역시 지극히 기본적인 파일(.htm, .html)만을 생성할 수 있습니다.)

    1. 저도 .htm을 필터링하는걸 생각해봤습니다만… 야후 블로그나 무버블타입의 경우는 .htm이나 .html 경로를 사용하더군요. 물론 사용자는 극히 적으니 큰 문제는 안되겠습니다만…최후의 수단으로 남겨두기로 했습니다.

      어째튼 말씀 감사합니다. (제가 부족해서 이해하는데 한참 걸렸습니다 하하)

    2. 아후블로그(한국)은 .html과 .htm을 사용하지 않습니다. 트랙백의 주소는 http://kr.blog.yahoo.com/ID/trackback/nnnn 형식으로 생성되는 걸로 알고 있습니다.

      무버블타입(v4기준)의 경우에는 리퍼러URL이 /media/archives/nnnnn.html 이 되고 트랙백은 /media/mt-tb.cgi/nnnn.nnnnn…. 이런 식으로 되는 것으로 압니다. 여기서 무버블타입의 리퍼러URL은 글의 실제 주소를 지정하는 것으로 외부에서 이 글을 참고해서 글을 작성한 경우에 이를 쉽게 연결할 수 있도록 제공하는 주소입니다.

      이에 따라 트랙백 주소는 .htm과 .html이 될 수 없지요. ^^; 혹시 제가 잘못 봤다면 추가 부탁드립니다. ^^;

    3. 저도 몰랐는데 전에 스팸의 패턴을 만들어보기 위해 DB를 정리하다, url이 스팸이 아닌데도 .htm으로 끝나는 트랙백을 몇건 찾았었습니다. 두개는 야후 블로그였고, 나머지는 무버블 타입이었어요. 그래서 알고 있는겁니다.
      요즘은 달라졌을지도 모르지요. 꽤 오래된 트랙백 자료였으니…

    4. 4년 전이면… apache에서 modrewrite같은 플러그인이 활성화되지 않았을 시절이니 .html이나 .htm으로 들어오는게 맞았을꺼 같네요. ^^

      PS. .html이나 .htm 말고도 몇가지 필터링하는게 더 있는데(/thumbnails/, /admin/, /photo/, /uploads/ 와 같은 특정 파일위치를 지정하는 정상적이라고 볼 수 없는 URL들) 이건 의외로 효과가 없더라구요.

  2. 핑백: ubuntu/Draco
    1. 너야 유명하지 않은게 아니라 주소 바꿔서 ㅎㅎㅎ
      트랙백 주소도 임의로 바꿀수 있으면 좋을텐데. 지금 주소는 구글에 검색되면 아주 먹잇감으로 좋은 주소지…

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.