그누4에 구글 리캡차 적용하기

불당   
   조회 7845   추천 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 -
그누 초저가 쇼군샵
NO.1 그누, 겨울시즌 초특가, 초저가 130%보상제, 적립금 20만원.
초특가 정품 보드샵 원에잇
500여개 브랜드, 당일 발송, 100%정품, 최대 12개월 할부, 금액대별 쿠폰
신뢰100% 마츠카제 공식샵
100% 일본 고품격 가위 전문 브랜드. 미용가위, A/S 및 판매 당일 출고!
파워링크 AD   클릭초이스등록


제목Page 1/28
2014-06   119201   불당
2007-06   32122   불당
2013-12   76350   불당
06-02   1183   불당
2016-03   4639   불당
2016-03   4456   불당
2016-02   4818   불당
2016-02   5289   불당
2016-01   5315   불당
2016-01   5514   불당
2016-01   5015   불당
2015-12   5888   불당
2015-12   5210   불당
2015-12   5479   불당
2015-12   7846   불당
2015-12   5239   불당
2015-11   5942   불당
2015-10   5910   불당
2015-10   5907   불당
2015-10   5609   불당
2015-10   5467   불당
2015-10   6403   불당
2015-10   5250   불당