^

자동 글 등록기 방지요

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

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

댓글 5개

아.. 역시 분석하긴 힘들군요..
그값을 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 중에 몃글자만 뽑아서 적게 하니깐 로보트가 와서 숫자 전부 다 읽어서 .. 게시글 적을려고 하니...
못적을걸요??
로보트 만든사람이 그것을 일부러 포함시켜줘야 .......게시판에 글쓸껄요?

나중에 로보트가 읽을수 있으면 대문자 소문자로 구별해서 만들수도 ㅎㅎㅎ
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누3질답

+
제목 글쓴이 날짜 조회
22년 전 조회 674
22년 전 조회 594
22년 전 조회 1,005
22년 전 조회 581
&&nbsp;&nbsp;
22년 전 조회 856
22년 전 조회 652
22년 전 조회 516
22년 전 조회 434
22년 전 조회 868
22년 전 조회 557
22년 전 조회 1,795
22년 전 조회 452
22년 전 조회 419
22년 전 조회 469
22년 전 조회 443
22년 전 조회 561
22년 전 조회 521
22년 전 조회 592
22년 전 조회 470
22년 전 조회 1,505
🐛 버그신고