구글 리캡차의 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