״4 ĸ ϱ

Ҵ   
   ȸ 14395   õ 0     õ 0    

구글 리캡차의 client side를 조금 더 쉽게 개선한 코드 입니다.
그누보드 4를 기준으로 수정한 것 입니다.

skin/board/boot/write.skin.php의 캡챠부분을 아래처럼 합니다.
script를 로딩하는 것을 lib으로 바꾸는 것보다는 명확하게 써주는게 좋습니다.
1줄이니까요.
sitekey는 어디에서 쓸지 모르기에 config.php에 넣어뒀습니다.

        <? if ($is_guest) { ?>
        <script src='https://www.google.com/recaptcha/api.js'></script>
        <div id="grecaptcha" class="g-recaptcha" data-sitekey="<?=$g4['recaptcha_sitekey']?>" style="float:right"></div>
        <? } ?>

form submit을 하기전에 캡챠 체크를 했는지 확인해야 합니다.
캡챠 안누르고 form submit을 해버리면 난감하지니까요.
캡챠가 있을 때만 체크하기 위해서, 캡차가 있는 div에 id를 넣어주고 그걸로 체크 합니다.

    if (typeof(grecaptcha) != 'undefined') {
        if(grecaptcha.getResponse() == "") {
            alert("스팸방지코드(Captcha Code)가 틀렸습니다. 다시 입력해 주세요.");
            return false;
        }
    }

리캡챠는 1번만 유효성 체크 가능하기에,
client단에서 캡챠를 잘 눌렀는지 체크를 할 수 없고 눌렀는지만 체크를 하게 됩니다.
캡차를 누르고 확인 안하면 그거는 누른사람 책임 입니다.

모든 캡차를 recaptcha로 바꾸고 있습니다.
recaptcha의 장점은 스패밍한다고 찍힌 경우에는 모든 리캡차 사이트에 다 찍힌다는 것 입니다.

 

write_update.php 등에서 아래와 같이 체크 루틴을 넣습니다.

 

// 자동등록방지 검사 - 비회원의 경우만
if (!$is_member) {
    if ($w=='' || $w=='r') {
        if (chk_recaptcha() == false)
            alert ('스팸차단코드가 틀렸습니다.', $goto_url);
    }
}


check_recaptcha는 b4.lib.php에 넣었습니다. 자주 쓰는 것인데, 쓸때마다 include하는 것은 불편 합니다.

remoteip를 같이 넘겨줍니다.

스패밍 하는 분을 응징해줘야죠.

 

// $_POST 로 넘어온 캡챠값을 체크
function chk_recaptcha()
{
   global $g4;

    if (!isset($_POST['g-recaptcha-response'])) return false;

    $gg_response = trim($_POST['g-recaptcha-response']);
    if ($gg_response == "") return false;

   $url = 'https://www.google.com/recaptcha/api/siteverify';
   $data = array('secret' => $g4['recaptcha_secret_key'], 'response' => $gg_response, 'remoteip' => $_SERVER['REMOTE_ADDR']);

    $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_POST, sizeof($data));
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   $result = curl_exec($ch);
   curl_close($ch);

   $obj = json_decode($result);

    if($obj->success == false) {
        echo '<script>alert("Google Recaptcha Error!");history.go(-1);</script>';
    }

   return true;
}

 

* 아래의 자료들을 읽은 후 구글 자료를 참조해서 개발했습니다.

가능하면 간결하게 하려고 노력 했는데, 쉽지 않네요.

 

 그누5에 리캡차

http://yangwonder.blog.me/220483892698

그누4에 리캡차

http://sir.co.kr/bbs/board.php?bo_table=g4_skin&wr_id=153501

리캡차

http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=80401

- opencode.co.kr -


Page 1/28
2015-09   106311   Ҵ
2012-01   23727   Ҵ
2015-09   103979   Ҵ
2018-06   5604   Ҵ
2016-03   9020   Ҵ
2016-03   8778   Ҵ
2016-02   9073   Ҵ
2016-02   9706   Ҵ
2016-01   9663   Ҵ
2016-01   10304   Ҵ
2016-01   9557   Ҵ
2015-12   10869   Ҵ
2015-12   9507   Ҵ
2015-12   9985   Ҵ
2015-12   14396   Ҵ
2015-12   9456   Ҵ
2015-11   11354   Ҵ
2015-10   10334   Ҵ
2015-10   9709   Ҵ
2015-10   9357   Ҵ
2015-10   9171   Ҵ
2015-10   11182   Ҵ
2015-10   9217   Ҵ