관리 메뉴

웹개발자의 기지개

[PHP] 구글 캡차(Captcha) 달기 - V3, V2 버전 [자동입력방지] 본문

PHP

[PHP] 구글 캡차(Captcha) 달기 - V3, V2 버전 [자동입력방지]

http://portfolio.wonpaper.net 2021. 4. 15. 12:23

구글의 캡차를 달아보자 

최근 구글에는 reCaptcha V2 와 V3가 있는데, V3이 더욱 간소화되었다.

 

[ reCaptcha V2 ]

 

일단 구글 캡차 콘솔 어드민으로 간다.

www.google.com/recaptcha

 

그런다음 다음 화면과 같이 새캡차 사이트를 만든다.

 

그리고, 사이트키와 비밀키를 따로 확인해둔다.

 

1. write.html  페이지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
 
<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  
);
 
$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"]) {
  echo "[성공] 통과";
 
} else {
  echo "통과 실패";
}
?>
cs

 

 

 

 

[ reCaptcha V3 ]

 

클릭도 필요없다. 자동체킹한다. 

화면 우측하단에 표시된다.

 

 

 

 

일단 구글 캡차 콘솔 어드민으로 간다.

www.google.com/recaptcha

 

그리고, 마찬가지로 새캡차 사이트를 만든다.

 

1. write.html  페이지

1
2
3
4
5
6
7
8
9
10
11
12
13
<script src="https://www.google.com/recaptcha/api.js?render=사이트키"></script>
 
<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  
);
 
$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"]) {
  echo "[성공] 통과";
} else {
  echo "통과 실패";
}
 
?>
cs

 

Comments