AR 스팸 글 자동 삭제 extend > 그누보드5 플러그인

그누보드5 플러그인

그누보드는 다양한 기능을 추가하기 쉽습니다.

AR 스팸 글 자동 삭제 extend 정보

AR 스팸 글 자동 삭제 extend

첨부파일

_ar.delete_spam_auto.php (5.4K) 21회 다운로드 2018-03-03 07:40:53 포인트 차감500

본문

===================================

주의 : 

본 기능은 곰발바닥으로 작성한 코드로 전체 게시물을  삭제가능한 루틴이 포함되어 있으므로 충분한 검증이 된 후에 사용하시길 바랍니다.

일부에서만 테스트한  상황이라.. 충분한 백업이 되는 사이트에서 운영하고, 그외 분은 댓글의 사용후기를 참고해서 적용하시기 바랍니다.

(충분히 검증이 되면 포인트를 0으로 낮추겠습니다.)

(절 절대 포인트에 눈이 먼거 절대 아닙니다. ;;;; )

===================================

 

 

제목 : AR 스팸 글 자동 삭제 extend

부제 : 亞波治님 회원 및 게시글 삭제 콤보 플러그인 연동 기능

제작1 : 2018-03-03 로빈아빠 김성대 (feat 亞波治)
제작2 : __________________________

목적 : 스패머가 글을 등록하면 미리 지정한 관리자가 댓글로 미리 지정한 글을 입력하면 해당 글과 해당 아이디가 삭제됨
  작성한 IP 는 tmp/spam_ip.list 파일에 저장되어 글쓰기/댓글을 달수 없게함

참고 : 다른 사람이 이어서 작업이 가능하고 그 경우 제작자에 계속 추가 할수 있음
미완성 : 
 - 댓글을 쓰지 않는 게시판의 경우 처리방안
 - extend 를 쓰면서 부하 정도를 최소화 하는 방안
 - 관리모드로 넣는 방안
   (스팸글 주소를 주욱 붙여 넣으면 해당 그 삭제함)
 - 아파치님의 회원 팝업뷰 활용방안
 

 

 


<?php
include "_common.php";
// 이 글을 (제목 또는 내용에) 댓글이나 답변으로 달면  원글이 삭제되고 해당 IP 를 차단함
define('_DEL_KEY','이분삭제해주세요');
//tmp 있는 ip 차단 리스트는 삭제하시면 초기화됩니다.
$tmp_spam_ip=G5_DATA_PATH.'/tmp/spam_ip.list';
//삭제관리자 여기에_삭제 담당자 아이디를 넣어주세요 (,로 구별해서 여러명 가능)
$g5['arr_admin_member']=explode(",","낭만자객");

//글쓰기시 스팸 IP에 등록 ip면 쓰기 금지
if (strstr($PHP_SELF,"/bbs/write") && is_file($tmp_spam_ip) && !$is_admin) {
    $ip=dechex(ip2long($_SERVER['REMOTE_ADDR']));
    $buff=file_get_contents($tmp_spam_ip);
    if (strstr($buff,$ip)) {
        die("Hello~ Spam IP? ".$_SERVER['REMOTE_ADDR']);
    }
}
if ($config['cf_admin']) $g5['arr_admin_member'][]=$config['cf_admin'];
$g5['arr_admin_member'][]='admin';
//1 시간 이내에 작성된 최신글의 경우에만 검사
$sql="select * from {$g5['board_new_table']} where bn_datetime>='".date("Y-m-d H:i:s",time()-1*3600)."'";
$buff="'".implode("','",$g5['arr_admin_member'])."'";
$sql.="and mb_id in ({$buff}) ";
$rst=sql_query($sql);
//echo "<xmp>";
//echo $sql;
$g5['arr_spam_ip']=array();
while($row=sql_fetch_array($rst)) {
    //var_dump($row);
    $tmp_write_table=$g5['write_prefix'] . $row['bo_table']; // 게시판 테이블 전체이름
    $tmp=get_write($tmp_write_table, $row['wr_id']);
    //회원아이디가 공백인경우는 무시함
    if (!$tmp['mb_id'] || $tmp['mb_id']=='guest') continue;
    //var_dump($tmp);
    //내용 또는 댓글로 삭제명령 
    if ($tmp['wr_content']!=_DEL_KEY && $tmp['wr_subject']!=_DEL_KEY) 
        continue;
    $tmp2=get_write($tmp_write_table, $tmp['wr_parent']);
    //echo $tmp_write_table,"\n";
    //var_dump($tmp2);
    //새글 삭제함
    $sql2="delete from {$g5['board_new_table']} where bn_id = '{$row['bn_id']}' ";
    sql_query($sql2);
    //작성자가 삭제관리자이면 무시
    if (in_array($tmp2['mb_id'],$g5['arr_admin_member'])) continue;
    $buff=get_member($tmp2['mb_id']);
    if ($buff['mb_level']>=4) continue;    //레벨이 4등급이상 이면 무시함.. 설마...^^
    unset($buff);
    //var_dump($tmp2);
    //해당 ID 로 등록한 넘들
    //회원삭제
    member_delete($tmp2['mb_id']);
    $sql2="select * from {$g5['board_new_table']} where mb_id='{$tmp2['mb_id']}'";
    //echo "$sql2\n";
    $rst2=sql_query($sql2);
    while($row2=sql_fetch_array($rst2)) {
        //var_dump($row2);
        $tmp2_bo_table=$row2['bo_table'];
        $tmp_write_table2=$g5['write_prefix'] . $tmp2_bo_table; // 게시판 테이블 전체이름
        $tmp3=get_write($tmp_write_table2, $row2['wr_id']);
        //var_dump($tmp3);
        // 작성 IP 차단함
        if (!in_array($tmp3['wr_ip'],$g5['arr_spam_ip'])) 
            $g5['arr_spam_ip'][]=$tmp3['wr_ip'];
        //원글 다 삭제 (답변으로 단 글도 삭제됨)
        $sql="delete from $tmp_write_table2 where wr_parent='{$tmp3['wr_id']}'";
        //echo $sql,"\n";
        sql_query($sql);
        // 업로드된 파일이 있다면 삭제
        $sql3 = " select * from {$g5['board_file_table']} where bo_table = '$tmp2_bo_table' and wr_id = '{$row2['wr_id']}' ";
        $rst3 = sql_query($sql3);
        while ($row3 = sql_fetch_array($rst3)) {
            // 파일삭제
            @unlink(G5_DATA_PATH.'/file/'.$tmp2_bo_table.'/'.$row3['bf_file']);
            // 썸네일삭제
            if(preg_match("/\.({$config['cf_image_extension']})$/i", $row3['bf_file'])) {
                delete_board_thumbnail($tmp2_bo_table, $row3['bf_file']);
            }
        }
        // 파일테이블 행 삭제
        sql_query(" delete from {$g5['board_file_table']} where bo_table = '$tmp2_bo_table' and wr_id = '{$row2['wr_id']}' ");
        $sql2="delete from {$g5['board_new_table']} where bo_table = '$tmp2_bo_table' and wr_id = '{$row2['wr_id']}' ";
        sql_query($sql2);
        //echo "$sql2\n";
    }
    
    //var_dump($tmp);
}

if ($g5['arr_spam_ip']) {
    $spam_ip='';
    foreach($g5['arr_spam_ip'] as $ip) {
        // 관리자의 접속 IP 면 무시
        //if ($is_admin && $_SERVER['REMOTE_ADDR']==$ip) continue;
        //스팸 IP에 등록안되었으면 등록한다.
        $ip=dechex(ip2long($ip));
        
        if (is_file($tmp_spam_ip)) {
            $buff=file_get_contents($tmp_spam_ip);
            if (strstr($buff,$ip)) continue;; //이미 추가됨 
        }
        $spam_ip.=$ip."\n";
    }
    if ($spam_ip) {
        $fp=fopen($tmp_spam_ip,'a');
        fputs($fp,$spam_ip);
        fclose($fp);
    }
    chmod($tmp_spam_ip,0777);
    /* 여기에 해당 IP로 작성된 모든 글 삭제하도록 함. */
    /* 이후는 다음 분께 패스 ^^ */
}
?>
추천
9

댓글 전체

나름 소스에 설명을 달긴 헀는데 도움이 되실지 모르겠습니다.
스팸글이 없어 테스트에 더 많은 시간이 걸리더군요.  ^^
이후 버전은 굇수님들이 손봐주실것으로 굳게 믿습니다.
전체 504
그누보드5 플러그인 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT