자동 글 등록기 방지요 > 그누3질답

그누3질답

자동 글 등록기 방지요 정보

그누보드 자동 글 등록기 방지요

본문

어떤원리로 구현한건지 질문드립니다 ;;;

효과는 다음이나 야후만큼 효과가 있는지.. ^^;;;;

댓글 전체

아.. 역시 분석하긴 힘들군요..
그값을 db에서 가져온다면.. 쿼리만 많아질텐데..
그냥 나중에 더 편한방법을 생각해봐야 겠네요..
답변 고맙습니다 (__)
HTTP_POST_VARS[wr_key] 이 값은 어디서 저장되어있는 값인가요? ;;;
---------------------------------------------------------------------------------
저도 아직 구루 완전히 분석을 못햇거든요 ㅡㅡ; 아직 시작도 안했지만. ....

아마 데이타 베이스에 들어갈것입니다.
디스님 답변 고맙습니다 (__)
역시 그누보드 소스를 분석 못해서 이해는 잘 안가지만..
대략 보기에

숫자 만든후 세션에 저장하고 그 값이 일치하는지 보는거같은데
          if ($key != $HTTP_POST_VARS[wr_key]) {
              alert("정상적인 등록이 아닌것 같습니다.");
          }
요부분이요...

$HTTP_POST_VARS[wr_key] 이 값은 어디서 저장되어있는 값인가요? ;;;
mbform.php  내용중 제일 아래!!!!

// 자동등록방지
include "./$cfg[bbs_dir]/norobot.php";

include "$member_skin/mbform.skin.php";


##################################################################


norobotcheck.php  파일을 보면  아래와 같은 내용입니다.


<?
/*
##
##  norobot.php 가 선행된 후 사용
##
*/

// 자동등록방지 검사
if ($default[de_use_norobot]) {
    // 우선 이 URL 로 부터 온것인지 검사
    $parse = parse_url($HTTP_SERVER_VARS[HTTP_REFERER]);
    if ($parse[host] != $HTTP_SERVER_VARS[HTTP_HOST]) {
        alert("올바른 접근이 아닌것 같습니다.", "./");
    }

    $key = $HTTP_SESSION_VARS[ss_norobot_key];
    if ($w == '' && !$member[mb_id]) {    //아이디 체크
        if ($key) {
            if ($key != $HTTP_POST_VARS[wr_key]) {
                alert("정상적인 등록이 아닌것 같습니다.");
            }
        } else {
            alert("정상적인 접근이 아닌것 같습니다.");
        }
    }
}
?>


#####################################################################################

norobot.php  파일의 내용 !!!!!!!!!!!!!!!!!!!!!!!! 

아래보시면 md5 로 만들어서 (md5 는 패스워드만드는 함수)
$tmp_str = substr(md5(time()),0,10);  md5 에 안에다가 시간함수을 넣어서 변환하고요..
substr <-- 뭐더라 ? 뭐 바꿔주는것으로 알고 있는데? 정수로 바꾸어 주던것이던가??

strlen 함수는 길이을 나타내는 함수입니다.
--------------------------
$a=strlen("abcd");
echo $a;
답 : 4
--------------------------

<?
/*
**  $norobot_str 와 $HTTP_SESSION_VARS[ss_norobot_key] 을 반환함
*/

// seed with microseconds
function make_seed() {
  list($usec, $sec) = explode(' ', microtime());
  return (float) $sec + ((float) $usec * 100000);
}

// 자동등록기를 막아볼까요?
$is_norobot = false;
if ($default[de_use_norobot]) {
    // 임의의 md5 문자열을 생성
    $tmp_str = substr(md5(time()),0,10);
    // 난수 발생기
    srand(make_seed());
    $keylen = strlen($tmp_str);
    $div = (int)($keylen / 2);
    while (count($arr) < 3) {
        unset($arr);
        for ($i=0; $i<$keylen; $i++) {
            $rnd = rand(1, $keylen);
            $arr[$rnd] = $rnd;
            if ($rnd > $div) { break; }
        }
    }

    // 배열에 저장된 숫자를 차례대로 정렬
    sort($arr);

    $norobot_key = "";
    $norobot_str = "";
    $m = 0;
    for ($i=0; $i<count($arr); $i++) {
        for ($k=$m; $k<$arr[$i]-1; $k++) {
            $norobot_str .= $tmp_str[$k];
        }
        $norobot_str .= "<font size=3 color=#FF0000><b>{$tmp_str[$k]}</b></font>";
        $norobot_key .= $tmp_str[$k];
        $m = $k + 1;
    }

    if ($m < $keylen) {
        for ($k=$m; $k<$keylen; $k++) {
            $norobot_str .= $tmp_str[$k];
        }
    }

    // 세션에 생성
    session_register("ss_norobot_key");

    // 입력이면서 회원이 아닐 경우만 자동등록방지 사용
    if ($w == '' && !$member[mb_id]) {
        $ss_norobot_key = $norobot_key;
        $is_norobot = true;
    } else {
        $ss_norobot_key = "";
    }
}
?>

###############################################################

위에보시고 이리저리만저보세요 ......저도 아직 함수을 다 못외워서 ㅡㅡ;
위에 대충보시면 함수가 어디 쓰이는지 아시면 대충 어떠게 돌아가는지 아실것입니다.

허접한 답변에 죄송합니다 ㅡㅡ;
저도 만든다면 이방법으로 할것입니다.
보통 다른사이트는 그림으로 대쳐하던데..... 그림 일일이 만들어주기도 힘들고....
이방법이 최고죠 ㅎㅎ

1234567890 중에  몃글자만 뽑아서 적게 하니깐 로보트가 와서 숫자 전부 다 읽어서 .. 게시글 적을려고 하니...
못적을걸요??
로보트 만든사람이 그것을 일부러 포함시켜줘야 .......게시판에 글쓸껄요?

나중에 로보트가 읽을수 있으면 대문자 소문자로 구별해서 만들수도  ㅎㅎㅎ
전체 2
그누3질답 내용 검색

회원로그인

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