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

불당   
   조회 6032   추천 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 -
초특가 정품 보드샵 원에잇
스노우보드 인기 쇼핑몰,이월제품 올킬 특가, 지원금 20만원, 12개월 할부
지입잡포커스
지입회사 1톤 월400만원이상고정급, 대형차전문, 전액할부,상담
OK 옥경이물류
지입차량정보, 톤수별 지입차, 대기업물류 안정적인 지입차량 일자리상담 사후관리철저
파워링크 AD   클릭초이스등록


제목Page 1/28
2014-02   13664   불당
2012-01   19524   불당
2012-06   19680   불당
2016-03   3156   불당
2016-03   3159   불당
2016-02   3445   불당
2016-02   3868   불당
2016-01   3955   불당
2016-01   3978   불당
2016-01   3662   불당
2015-12   4478   불당
2015-12   3833   불당
2015-12   4175   불당
2015-12   6033   불당
2015-12   3852   불당
2015-11   4531   불당
2015-10   4701   불당
2015-10   4644   불당
2015-10   4418   불당
2015-10   4279   불당
2015-10   5075   불당
2015-10   4106   불당
2015-10   4124   불당