[PHP] 구글 캡차(Captcha) 달기 - V3, V2 버전
구글의 캡차를 달아보자
최근 구글에는 reCaptcha V2 와 V3가 있는데, V3이 더욱 간소화되었다.
[ reCaptcha V2 ]
일단 구글 캡차 콘솔 어드민으로 간다.
그런다음 다음 화면과 같이 새캡차 사이트를 만든다.
그리고, 사이트키와 비밀키를 따로 확인해둔다.
1. write.html 페이지
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <label>자동입력 방지</label> <span id="captcha" class="g-recaptcha" data-sitekey="사이트키값"></span> <input value="작성완료" type="button" onClick="writeChk();"> <script> function writeChk() { var v = grecaptcha.getResponse(); if (v.length ==0) { alert ("자동입력방지 기능 - '로봇이 아닙니다.'를 체크해주세요."); return; } } </script> | cs |
2. write_ok.php 페이지
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <? session_start(); $captcha = $_POST['g-recaptcha-response']; $secretKey = '비밀키'; $ip = $_SERVER['REMOTE_ADDR']; $data = array( 'secret' => $secretKey, 'response' => $captcha, 'remoteip' => $ip ); $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"]) { echo "[성공] 통과"; } else { echo "통과 실패"; } ?> | cs |
[ reCaptcha V3 ]
클릭도 필요없다. 자동체킹한다.
화면 우측하단에 표시된다.
일단 구글 캡차 콘솔 어드민으로 간다.
그리고, 마찬가지로 새캡차 사이트를 만든다.
1. write.html 페이지
1 2 3 4 5 6 7 8 9 10 11 12 13 | <form name="f" method="post" enctype="multipart/form-data" action="write_ok.php"> <input type="hidden" id="g-recaptcha" name="g-recaptcha"> </form> <script> grecaptcha.ready(function() { grecaptcha.execute('6Le9nqkaAAAAAGHmohgRWqCZeIlo_ndZI1HwpHfh', {action: 'homepage'}).then(function(token) { document.getElementById('g-recaptcha').value = token; }); }); | cs |
2. write_ok.php 페이지
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <? session_start(); $captcha = $_POST['g-recaptcha']; $secretKey = '비밀키'; $ip = $_SERVER['REMOTE_ADDR']; $data = array( 'secret' => $secretKey, 'response' => $captcha, 'remoteip' => $ip ); $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"]) { echo "[성공] 통과"; } else { echo "통과 실패"; } ?> | cs |