[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 2,641건 13 페이지
  • RSS
기술자료 목록
2401
일반   4792  2020-06-05 21:44  
2400
일반   6810  2020-06-03 16:47  
2399
도메인   17020  2020-05-26 18:12 ~ 2020-05-31 19:16  
2398
Adobe   7929  2020-05-23 22:47 ~ 2020-06-07 01:08  
2397
MySQL   6582  2020-05-22 13:07 ~ 2020-05-22 16:05  
2396
MSSQL   21460  2020-05-12 19:46 ~ 2020-10-11 21:30  
2395
그누보드   7295  2020-04-17 17:14 ~ 2020-04-24 10:31  
2394
그누보드   5798  2020-04-04 18:58 ~ 2020-10-13 20:09  
2393
HTML   16241  2020-03-25 18:44 ~ 2021-09-23 18:51  
2392
그누보드   6479  2020-03-17 21:15 ~ 2020-03-17 21:16  
2391
영카트   4790  2020-03-17 19:13 ~ 2020-03-17 19:13  
2390
그누보드   33445  2020-03-17 19:08 ~ 2021-01-26 16:21  
2389
전자결제   7169  2020-03-15 13:27 ~ 2021-01-05 17:32  
2388
그누보드   7508  2020-03-14 12:03 ~ 2023-11-08 02:11  
열람
그누보드   7089  2020-03-09 20:44 ~ 2023-08-09 08:23  
2386
영카트   5081  2020-03-09 18:02  
2385
그누보드   5619  2020-03-06 01:26  
2384
PHP   6691  2020-03-04 14:51  
2383
그누보드   5254  2020-02-27 23:13  
2382
호스팅   6900  2020-02-26 22:32 ~ 2022-07-29 09:24  

검색

해피정닷컴 정보

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

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