잡학사전  |  세계탐방  |  옆집소식  |  방명록  |  RSS  |  관리자
그 남자가 태터 스팸 리플을 막는 법
일기 | 06/06/13 00:26
아래 스크립트를 사용하면서 생기는 문제나 피해에 대해서는 일절 책임을 지지 않습니다. 사용하시기 전에 반드시 DB 백업을 하실 것을 권장합니다.

태터툴즈 '묻고답하기' 게시판에 올린 글이다.
클릭
하지만 아래에 좀 더 자세하게 정리를 해 보았다.

스팸 리플들은 보통 수백개가 달린다. 손으로 지우기는 너무 많은 개수다. 그래서 나는 달린 스팸 리플들을 분석하기 시작했다.

1. 이것은 사람이 다는 것이 아니다. 아마도 봇이 주소를 긁으면서 목록을 갱신하며 일정시간마다 스팸 리플들을 블로그에 수백개씩 단다.

2. 이름과 본문은 크게 중요하지 않은 것 같다. 랜덤한 텍스트를 이름과 본문에 넣는데 중요한 것은 홈페이지다. 수백개의 홈페이지 중 열 개 정도를 보니 다음과 같은 형식으로 쓰여져 있었다.
http://어쩌구저쩌구.blah.com/
위에서 중요한 부분은 blah.com 이다. 더 이상 저 홈페이지의 광고 스팸이 올라오지 못하도록 태터 스팸 막기에서 '홈페이지에 이 문자열이 있으면 스팸으로 인식합니다'에 blah.com 을 넣어준다. 일단 스팸은 멈춘다. IP나 이름, 본문이 계속 바뀌는 경우가 많은 것 같으므로 위와 같은 방법이 조금은 더 효율적일 것이다.

3. 이제 스팸리플들을 지울 차례다. 나는 mysql 쿼리문을 날릴 줄 알고, php를 작성해서 스크립트를 작성할 수 있다. 따라서 나는 아래와 같은 php 코드를 작성해서 확장자를 php로 한 다음 웹브라우저가 접근할 수 있는 곳에 저장했다.

이 코드는 인터넷 익스플로러에서 보면 좁은 폭 때문에 코드를 읽기가 힘들어지는데, 긁어 붙여서 따로 봐도 좋다.
<?
    $DB_ADDRESS 
"localhost";
    
$DB_USER "db_user";
    
$DB_PASSWORD "db_password";
    
$DB_NAME "db_name";

    
$fd mysql_connect$DB_ADDRESS$DB_USER$DB_PASSWORD )
        or die( 
"cannot connect" );
    print( 
"connection success" );
    print( 
"<br />" );

    
$result mysql_query"use $DB_NAME" )
        or die( 
"invalid use of DB" );

    
$contentTableName "포스팅들이 들어 있는 테이블 이름을 입력하세요";
    
$replyTableName "리플들이 들어 있는 테이블 이름을 입력하세요";
    
$spamHomepageWord "스팸 홈페이지 문자열을 입력하세요";

    
mysql_query"delete from $replyTableName where homepage like "%$spamHomepageWord%"" )
        or die( 
"delete spam reply failed." );

    
$result mysql_query"select no from $contentTableName" )
        or die( 
"Table name selection failed." );

    while( 
$row mysql_fetch_array$resultMYSQL_NUM ) )
    {
        
$countResult mysql_query"select count(pno) from $replyTableName where pno=$row[0]" )
            or die( 
"Counting reply count failed." );
        
$countRow mysql_fetch_array$countResultMYSQL_NUM );
        
mysql_query"update $contentTableName set rp_cnt = $countRow[0] where no = $row[0]" )
            or die( 
"Resetting reply count failed." );
    }

    print( 
"Spam removed" );

    
mysql_close$fd );
?>


1) 처음에 보이는 DB_ADDRESS, DB_USER, DB_PASSWORD, DB_NAME 은 호스팅 업체의 서버 설정에 맞게 고쳐주면 된다.
2) 중간에 보이는 contentTableName, replyTableName, spamHomepageWord는 다음과 같다.
contentTableName: 블로그에 쓴 포스팅들이 저장된 테이블이다.
replyTableName: 블로그에 달린 리플들이 저장된 테이블이다.
spamHomepageWord: 위에서 말한 "blah.com" 을 쓰면 된다.


간략히 소스 설명을 하자면...
a. replyTableName 테이블에서 homepage 필드 에 spamHomepageWord 단어를 포함한 리플을 지운다.
b. 리플이 정상적으로 지워졌으나 블로그에서 보면 리플이 지워지기 전과 같은 개수로 리플이 표시된다. 어떤 포스트에 댓글이 전부 6개 달려 있었고 그 중 하나가 스팸 리플이었다면, 스팸 리플이 지워지고 보이는 리플은 5개밖에 없지만 여전히 리플 개수는 6으로 표시된다는 것이다.
이것은 contentTableName 테이블에서 리플 개수를 직접 가지고 있기 때문이다. 지워진 리플의 개수가 반영이 되지 않았기 때문에 따라서 mysql DB에 직접 쿼리를 날려서 수정을 해야 한다.

참고로 내 태터는 0.9x 버전 때부터 쓰다가 Classic RC3를 거쳐 현재는 Classic Official Release인데, 확인해 보지는 못했지만 공식 릴리즈 1.x부터는 데이터 복구 기능을 사용하면 개수가 제대로 맞춰진다고 한다. 그리고 어떤 버전의 태터는 테이블 구조가 다를 수 있고, 필드 이름이 다를 수 있기 때문에 위 코드를 수정해야 할지도 모른다. mysql_query 부분에서 사용된 homepage, no, pno, rp_cnt 등은 필드의 이름이고 다른 버전에서는 다를 수 있다.

php 코드를 웹에서 실행한 뒤 "Spam removed"라는 메시지가 나오면 스팸이 정상적으로 지워지고 개수가 제대로 나올 것이다. 다시 한 번 말하지만, 이 스크립트를 실행하기 전에 DB 백업 정도는 해 놓자. 이 코드를 사용함으로써 생기는 문제나 피해는 내가 책임지지 않을 것이고 책임질 수도 없으니...
관련글(트랙백)(2) | 댓글(8)
이 글의 관련글(트랙백) 주소 :: http://jinurius.cafe24.com/tt/rserver.php?mode=tb&sl=301
Tracked from Denny & Jenny Story... 06/06/13 10:20 x
제목: 리플 스팸 짱나네..
리플 스팸이 약 2000여개 달렸네요. 허허.. 완전.. 테더 버젼이 낮아서.. 스팸에 제한기능이 IP 제한 기능 밖에 없는데.. 버젼을 업해야 하나? 구조를 살짝 바꿔 볼까? ㅋㅋㅋ..
Tracked from lunamoth 3rd 06/06/15 16:39 x
제목: Spam Wars: Episode II
태터툴즈 스팸 차단법, 이후로 영문 스팸은 다소 해결이 된 것 같지만 여전히 폭풍 전야일 따름입니다. 하여 그 이후의 논의를 정리해두고자 합니다. 태터툴즈 0.9x 의 스팸 일괄..
현경렬 06/06/13 01:50 R X
전 최신 버전에서 스팸 트랙백 올라올 때 마다 blah.com 을 차단 시켰더니 이제 안 올라오네요.. 심심합니다.
bassist. 06/06/13 09:56 X
나도 최신 버전 한 번 깔아볼까...
뭐 스팸 차단은 둘째치고 지우는 게 일이니까 -_- ;
lovelysoul 06/06/13 08:14 R X
랍솔은 bitacoras인지 어디서 오는데..
지우는건 myadmin에서 순서대로 정렬하면 스팸은 덩어리로 있음으로 전체선택 체크 삭제 한두번이면 끝나고...
구형쓰는 랍솔은 add_exe.php인가에 아이피로 차단하는 부분에 그냥 코드수정 했어요..
explode . 으로 해서.. 주소확인해서
bassist. 06/06/13 09:56 X
어제 저녁에 스팸이 또 수백개 올라왔던데 그 도메인이었어요.
태터 주소록을 가지고 있나 봅니다 -_-
won 06/06/13 12:13 R X
이건 빠시의 스페셜이군.
bassist. 06/06/13 13:22 X
...
상현 06/06/14 05:51 R X
... 스팸의 귀환 -.-;
bassist. 06/06/14 09:14 X
이제 스팸을 근본적으로 막는 법을 생각해 봐야 -_- ;

아이디
비밀번호
홈페이지 비밀글로 저장
내용
 

[PREV] | 1 ... | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 ... | 660 | [NEXT]
bassist.'s nazono blog


no shovels, no gains.
 카테고리
분류 전체보기
소개
음악
단상
일기
사진
영화
린과 케이의 이야기
World of Warcraft
 최근에 올라 온 글
+ tumblr (8)
+ 돈과 권력 (4)
+ 반복학습 (7)
+ 주차 (4)
+ 사춘기? (6)
+ 업무 단상 (5)
+ Life and Time - 타인의 의.. (2)
+ 의사 선생님 (2)
+ 8 mile (2)
+ 혼자 밥 먹기 (6)
 최근에 달린 댓글
+ 관리자만 볼 수 있는 댓..
 08/30 - 비밀 댓글
+ 성지순례합니다
 03/11 - ntopia
+ 성지순례합니다
 11/16 - erniea
+ 아니 이보시오 이게 누..
 07/27 - bassist.
+ 지난 번에 오프에서 만..
 07/27 - bassist.
+ 얼마전 종로에서 술을..
 07/08 - 나다
+ 내 웹호스팅 계정의 갱..
 02/08 - withonion
+ 흑흑... 옮기고 싶은데..
 02/03 - bassist.
+ 리플도 트랙백도 스팸..
 02/03 - bassist.
+ 그 또한 맞는 말이오
 02/03 - bassist.
 최근에 받은 트랙백
 달력
 글 보관함
 링크사이트
 방문자 집계