[G4/G5] 스팸게시물 방지를 위한 코드 > 기술자료 | 해피정닷컴

[G4/G5] 스팸게시물 방지를 위한 코드 > 기술자료

본문 바로가기

사이트 내 전체검색

[G4/G5] 스팸게시물 방지를 위한 코드 > 기술자료

그누보드 [G4/G5] 스팸게시물 방지를 위한 코드

페이지 정보


본문

그누보드 스팸 방지를 위한 여러가지 방법들이 존재합니다
다양한 방법에 대한 것을 실제 테스트를 통해 확인된 사항을 정리합니다


1. 글쓰기 페이지에 머문 시간을 비교해서 스팸여부 확인
sir 마르스컴퍼니 님의 팁 : https://sir.kr/g5_tip/14663

회원 로그인 후 제목과 내용을 1111 이라고만 적어도 최소 10초가 필요합니다
물론 손빠른 사람은 그보다 빠르게 타이핑이 가능할 수 도 있으나, 극히 이례적인 상황일것으므로 대조군에서 제외하고 10초라는 시간 제한을 두고 그것보다 빠르면 글 작성을 막는 대응 방법 입니다 

1-1. 게시글
mobile / skin / board / basic / write.skin.php
skin / board / basic / write.skin.php

<input type="hidden" name="page" value="<?php echo $page ?>">

내용 밑에 추가

<input type="hidden" name="w_time" value="<?php echo time(); ?>">


1-2. 게시글 저장
mobile / skin / board / basic / write_update.skin.php
skin / board / basic / write_update.skin.php

<?php
if (!defined("_GNUBOARD_")) exit; 

// 일정시간내에 글 작성하면 스팸글로 차단
if (!$w_time) {
    $w_time = time();
}
$spam_time_check = time() - $w_time;

if ($spam_time_check < 10) {
    alert('비정상적인 접근입니다.');
    exit();
}



2. 메인 페이지 세션이 없는 경우 글쓰기 금지
sir 마르스컴퍼니 님의 팁 : https://sir.kr/g5_tip/16141

extend / spam_deny.php 생성하고 추가

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 메인 페이지를 방문하지 않고 글작성을 시도하는 경우 차단
$spam_deny_checkurl = basename($_SERVER['SCRIPT_NAME']);
 
if ($spam_deny_checkurl == 'index.php') {
    set_session('ss_spam_index_token', true);
}
 
if ($spam_deny_checkurl == 'write_update.php' || $spam_deny_checkurl == 'write_comment_update.php') {
    if (!get_session('ss_spam_index_token')) {
        die('허용되지 않은 접근입니다.');
    }
}



3. 글 작성자의 이름일때 글쓰기 차단
sir 균이 님의 팁 : https://sir.kr/qa/468232?#answer_468235

3-1. 게시글
mobile / skin / board / basic / write_update.head.skin.php
skin / board / basic / write_update.head.skin.php

<?php
if (!defined("_GNUBOARD_")) exit;

// 작성자 이름이 영어로만 구성된 경우 스팸글로 차단
if($w == '' || $w == 'r') {
    if ($member['mb_id']) {
        $wr_name = addslashes(clean_xss_tags($board['bo_use_name'] ? $member['mb_name'] : $member['mb_nick']));
    } else {
        // 비회원의 경우 이름이 누락되는 경우가 있음
        $wr_name = clean_xss_tags(trim($_POST['wr_name']));
    }
    if( isset($wr_name) && !preg_replace("/[a-zA-Z0-9]/",'', $wr_name) ) die;
}


3-2. 댓글
mobile / skin / board / basic / write_comment_update.head.skin.php
skin / board / basic / write_comment_update.head.skin.php

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 작성자 이름이 영어로만 구성된 경우 스팸글로 차단
$w = $_POST["w"];
$wr_name  = trim($_POST['wr_name']);

if($w == '' || $w == 'r') {
    if ($member['mb_id']) {
        $wr_name = addslashes(clean_xss_tags($board['bo_use_name'] ? $member['mb_name'] : $member['mb_nick']));
    } else {
        // 비회원의 경우 이름이 누락되는 경우가 있음
        $wr_name = clean_xss_tags(trim($_POST['wr_name']));
    }
    if( isset($wr_name) && !preg_replace("/[a-zA-Z0-9]/",'', $wr_name) ) die;
}


4. 해외 아이피 글쓰기 차단
sir 이도훈 님의 팁 : https://sir.kr/qa/391725#answer_391740
데모 : https://www.happyjung.com/demo/php/x-real_ip.php

mobile / skin / board / basic / write_update.head.skin.php
skin / board / basic / write_update.head.skin.php

<?php
if (!defined("_GNUBOARD_")) exit;

// 해외아이피 글쓰기 차단
$client_ip = isset($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:isset($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("https://ipinfo.io/{$client_ip}/json"));
if($details->country != "KR"){
    alert("Only Korea Accept");
    exit();
}



5. hook 이용 자동으로 글 쓰는 스팸 막기 ( 그누보드 5.4.3 이상에만 사용 가능 )
sir thisgun 님의 팁 : https://sir.kr/g5_plugin/10184

extend / spam.write.ban.extend.php 파일 생성후 아래 내용 저장

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// hook 이용 자동으로 글 쓰는 스팸 막기
if(!defined('CHECK_WRITEPAGE_SPAM_INPUT_NAME')){
    // 아래 상수값 영문소문자+숫자로 되어 있는 부분을 반드시 영문소문자+숫자로 마음대로 변경해주세요.
    define('CHECK_WRITEPAGE_SPAM_INPUT_NAME', 'abc123def456ghi');
}

if(!defined('CHECK_WRITEPAGE_SPAM_INPUT_VALUE')){
    // 아래 상수값 한글로 되어 있는 부분을 반드시 한글로 마음대로 변경해주세요.
    define('CHECK_WRITEPAGE_SPAM_INPUT_VALUE', '대한민국사랑해');
}

add_event('bbs_write', 'g5_check_spam_write_page', 1, 2);

function g5_check_spam_write_page($board, $wr_id){
    add_event('tail_sub', 'g5_add_script_write_page_input');
}

function g5_add_script_write_page_input(){
?>
<script>
jQuery(function ($) {
    $('<input>').attr({
        type: 'hidden',
        name: '<?php echo CHECK_WRITEPAGE_SPAM_INPUT_NAME; ?>',
        value: '<?php echo CHECK_WRITEPAGE_SPAM_INPUT_VALUE; ?>'
    }).appendTo('form[name=fwrite]');
});
</script>
<?php
}

add_event('write_update_before', 'g5_check_spam_write_update_before', 1, 2);

function g5_check_spam_write_update_before($board, $wr_id){
    if( isset($_POST[CHECK_WRITEPAGE_SPAM_INPUT_NAME]) && $_POST[CHECK_WRITEPAGE_SPAM_INPUT_NAME] === CHECK_WRITEPAGE_SPAM_INPUT_VALUE ){
        return;
    } else {
        alert("스팸 싫어요");
        exit();
    }
}


참고자료
https://sir.kr/g5_tip/14663
https://sir.kr/g5_tip/16141
https://sir.kr/qa/468232?#answer_468235
https://sir.kr/g5_plugin/10184
https://sir.kr/qa/391725#answer_391740

댓글목록

등록된 댓글이 없습니다.


Total 459건 3 페이지
  • RSS
기술자료 목록
419
그누보드   4972  2020-10-14 12:34 ~ 2021-03-23 18:09  
418
그누보드   5265  2020-10-13 14:01  
417
그누보드   5719  2020-10-06 11:32 ~ 2020-11-17 10:39  
416
그누보드   7120  2020-09-24 09:28 ~ 2020-09-24 09:35  
415
그누보드   7328  2020-04-17 17:14 ~ 2020-04-24 10:31  
414
그누보드   5815  2020-04-04 18:58 ~ 2020-10-13 20:09  
413
그누보드   6510  2020-03-17 21:15 ~ 2020-03-17 21:16  
412
그누보드   35038  2020-03-17 19:08 ~ 2021-01-26 16:21  
411
그누보드   7544  2020-03-14 12:03 ~ 2023-11-08 02:11  
열람
그누보드   7143  2020-03-09 20:44 ~ 2023-08-09 08:23  
409
그누보드   5655  2020-03-06 01:26  
408
그누보드   5281  2020-02-27 23:13  
407
그누보드   5338  2020-02-04 06:41 ~ 2020-02-04 07:03  
406
그누보드   9593  2020-01-16 03:33 ~ 2020-02-03 18:46  
405
그누보드   5692  2020-01-14 15:20 ~ 2020-01-14 20:18  
404
그누보드   4907  2020-01-12 18:34  
403
그누보드   6518  2020-01-08 16:03 ~ 2022-05-24 10:48  
402
그누보드   6280  2020-01-06 10:00  
401
그누보드   6778  2019-12-31 12:10  
400
그누보드   6444  2019-12-31 06:11 ~ 2021-11-11 11:37  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.