본문 바로가기

개발/PHP

Google reCAPTCHA v3 적용하기

반응형

구글 리캡차 v3 적용하기

이놈의 스팸메일, 스팸글 때문에 매우매우 귀찮고 짱난다!!!!

 

게시판에서 스팸글을 그나마 차단 할 수 있는 방법으로 리캡차가 있는데 적용 해 보겠습니다.

 

 

 

 

reCAPTCHA 사이트로 이동

https://www.google.com/recaptcha/intro/v3.html 로 이동 후 "Admin console" 을 클릭합니다.

 

 

 

 

 

 

 

적용 할 사이트 정보 입력하기

reCAPTCHA를 적용 할 사이트 정보와 reCAPTCHA유형을 선택합니다.

v3 버전은 점수를 사용해서 구글이 알아서 체크 해 걸러주는 타입이고

v2 버전은 뭐 자동차를 골라라, 표지판을 골라라 혹은 "나 Bot 아닙니다." 하고 체크! 하는 타입

해서 편리한 v3 버전을 선택합니다.

소유자에게 알림 발송은 스팸글이 시도 될 때마다 메일이 올까봐 언체크;;

다 입력하고 체크하고 언체크 했으면 제출!

 

 

 

 

 

 

 

키 발급

제출이 끝나면 클라이언트용(사이트 키)과 서버용(비밀 키) 키가 발급됩니다.

이제 요 키를 가지고 게시판, 로그인등에 적용 해 주면 됩니다.

 

 

 

 

 

 

게시판 글쓰기를 예를 들어 보겠습니다. (write.php)

<form action="write_ok.php">
  <div>이름 : <input type="text" name="name"></div>
  <div>비밀번호 : <input type="password" name="password"></div>
  <div>제목 : <input type="subject" name="subject"></div>
  <div><input type="submit" value="등록"></div>
</form>

이런 입력 form 이 있다고 하면, 여기다가 구글 reCAPTCHA 코드를 아래처럼 적용 해 주면 됩니다.

 

<script src="https://www.google.com/recaptcha/api.js?render=CLIENT_API_KEY"></script>

<form>
  <div>이름 : <input type="text" name="name"></div>
  <div>비밀번호 : <input type="password" name="password"></div>
  <div>제목 : <input type="subject" name="subject"></div>
  <div><input type="submit" value="등록"></div>
  <input type="hidden" id="g-recaptcha" name="g-recaptcha">
</form>

<script type="text/javascript">
grecaptcha.ready(function() {
  grecaptcha.execute('CLIENT_API_KEY', {action: 'homepage'}).then(function(token) {
    // 토큰을 받아다가 g-recaptcha 에다가 값을 넣어줍니다.
    document.getElementById('g-recaptcha').value = token;
  });
});
</script>

CLIENT_API_KEY 부분에 위에서 발급받은 "사이트 키"를 넣어주시면 됩니다.

페이지가 준비되면 grecaptcha.execute를 통해 구굴한테 토큰 키를 발급 받은 후, g-recaptcha id를 가진 input에

값을 넣어줘서 서버쪽으로 같이 보내주는 내용입니다.

토큰을 보내줘서 서버쪽에서 토큰이 맞는지를 검사하고 스팸인지 판단 해서 성공 혹은 실패를 보내주는거죠.

 

 

 

 

이제 클라이언트쪽은 다 했으니 서버쪽 작업을 해 보죠. (write_ok.php)

<?php
$captcha = $_POST['g-recaptcha'];
$secretKey = 'SECRET_API_KEY'; // 위에서 발급 받은 "비밀 키"를 넣어줍니다.
$ip = $_SERVER['REMOTE_ADDR']; // 옵션값으로 안 넣어도 됩니다.

$data = array(
  'secret' => $secretKey,
  'response' => $captcha,
  'remoteip' => $ip  // ip를 안 넣을거면 여기서도 빼줘야죠
);

$url = "https://www.google.com/recaptcha/api/siteverify";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);

$responseKeys = json_decode($response, true);

if ($responseKeys["success"]) {
  // 스팸 검사가 통과 했을 때의 처리
} else {
  // 스팸 검사가 실패 했을 때의 처리
}

$secretKey = 'SECRET_API_KEY'; 여기 부분에는 위에서 발급 받은 "비밀 키"를 넣으면 됩니다.

이렇게 적용 해 주시면 페이지 오른쪽 하단에 구글 reCAPTCHA가 나오는 걸 볼 수 있습니다.

관리?페이지에 가면 접속 정보도 나오고 성공/실패 수도 나오고 하니까 가끔씩 보면 재밌을거 같네요! 😃

 

 

자세한 내용은 아래 URL에서 확인 하실 수 있습니다.

🔗 https://developers.google.com/recaptcha/intro

 

 

 

 

반응형

'개발 > PHP' 카테고리의 다른 글

PHP setCookie 사용법(보안, secure, httponly)  (0) 2022.11.10
define(): 상수의 정의  (0) 2019.06.05
비밀번호 암호화 확인 password_verity  (1) 2018.10.26
비밀번호 암호화 password_hash  (0) 2018.10.26
PHP 에러를 표시하기  (0) 2017.06.12