AR 스팸 글 자동 삭제 extend 정보
AR 스팸 글 자동 삭제 extend첨부파일
본문
===================================
주의 :
본 기능은 곰발바닥으로 작성한 코드로 전체 게시물을 삭제가능한 루틴이 포함되어 있으므로 충분한 검증이 된 후에 사용하시길 바랍니다.
일부에서만 테스트한 상황이라.. 충분한 백업이 되는 사이트에서 운영하고, 그외 분은 댓글의 사용후기를 참고해서 적용하시기 바랍니다.
(충분히 검증이 되면 포인트를 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
9
댓글 전체
고맙습니다 !!!
수고 많으셨습니다. 드뎌 코어 건드리지 않아도 되겠네요...^^
나름 소스에 설명을 달긴 헀는데 도움이 되실지 모르겠습니다.
스팸글이 없어 테스트에 더 많은 시간이 걸리더군요. ^^
이후 버전은 굇수님들이 손봐주실것으로 굳게 믿습니다.
스팸글이 없어 테스트에 더 많은 시간이 걸리더군요. ^^
이후 버전은 굇수님들이 손봐주실것으로 굳게 믿습니다.
수고하셨습니다. 역시 냑에 굇수님들이 많으니 좋네요 ㄷㄷㄷㄷㄷㄷ
자동스팸삭제
소스 공개 해주셔서 감사합니다 아주 잘 참고하고 있어요