본문 바로가기
프로그래밍/PHP

자동등록방지 구글 reCAPTCHA(리캡챠) 설치하기 - PHP

by pentode 2018. 4. 4.

로봇에 의한 스팸글 등록 및 자동회원 가입을 막기 위한 구글 reCAPTCHA 를 설치하는 방법에 대해서 알아보겠습니다.

 

구글 reCAPTCHA는 글쓰기 또는 회원 등록 페이지에서 사용자의 동작을 분석하여 로봇으로 판단이 되면 이미지중에 특정 부분을 선택하는 창이 띄워 사람임을 확인하도록 합니다. 리캡챠를 사용하기 위해서선 구글에 가입을 하여 사이트키와 프라이빗키를 발급받은 후, 리캡챠를 사용할 도메인을 등록하여야 합니다.

 

현재 제공되는 방식을 사용자가 로봇이 아님을 나타내기 위해서 직접 클릭해야 하는 reCAPTCHA v2 와 클릭하지 않아도 자동으로 판단하는 Invisible reCAPTCHA가 있습니다. 각각의 사용하는 방법에 대해서 알아 보겠습니다.

 

구글 계정이 있다고 가정을 하고 다음 사이트로 들어가 키를 발급 받습니다.

 

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


 

1. 키의 발급

위 사이트에서 Get Started 로 들어가서 sign up for an API key pair 을 클릭하여 들어갑니다.

 

Register a new site

 

 

- Label 에 나중에 구분 가능하도록 명칭을 적습니다.
- reCAPTCHA V2Invisible reCAPTCHA 중에 원하는 타입을 선택합니다.(어떤 걸 선택하더라도 나중에 등록 폼을 코딩할 때 타입을 바꿀  수 있습니다.)
- 도메인 리스트에 사용할 도메인을 입력합니다. 한줄에 도메인 하나씩해서 여러개를 입력할 수 있습니다. (테스트용으로 localhost를 사용하려면 그것도 적어 줍니다.)

- 등록을 하면  Site keySecret key 가 발급이 됩니다. Site key는 등록폼에서 즉, 클라이언트 측에서 사용이 되고, Secret key 는 서버측에서 submit 된 값을 검증하기 위해서 사용됩니다.

 

 

2. reCAPTCHA V2 타입 등록폼 작성 하기

사람임을 확인하기 위해서 클릭을 해야 하는 형태입니다.

 

reCAPTCHA V2 등록폼

  

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<title>reCAPTCHA 테스트</title>
	<script src='https://www.google.com/recaptcha/api.js'></script>
	<script type="text/javascript">
	/* 서브밋 전에 리캡챠 체크 여부 를 확인합니다. */
	function FormSubmit() {
		if (grecaptcha.getResponse() == "") {
			alert("리캡챠를 체크해야 합니다.");
			return false;
		} else {
			return true;
		}
	}
	</script>
</head>
<body>
	<br/>
	<form name="testForm" method="post" action="./process.php" onsubmit="return FormSubmit();">
	이름 : <input type="text" name="name" /><br />
	전화번호 : <input type="text" name="tel" /><br />
	<input type="submit" name="submit" value="제출"><br /><br/>
	<div class="g-recaptcha" data-sitekey="발급받은 Site key"></div>
	</form>
</body>
</html>

 

 

3. Invisible reCAPTCHA 타입 등록폼 작성 하기

 

Invisible reCAPTCHA 타입 등록폼

 

 

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<title>reCAPTCHA 테스트</title>
	<script src='https://www.google.com/recaptcha/api.js'></script>
	<script type="text/javascript">
	function FormSubmit() {
		document.testForm.submit();
	}
	</script>
</head>
<body>
	<br/>
	<form name="testForm" method="post" action="./process.php">
	이름 : <input type="text" name="name" /><br />
	전화번호 : <input type="text" name="tel" /><br />
	<button class="g-recaptcha" data-sitekey="발급받은 Site key" data-callback='FormSubmit'>제출</button>
	</form>
</body>
</html>

  

이 타입은 사용자가 체크를 할 필요가 없이 사용자의 행동을 분석하여 자동으로 로봇인지 판단하여 폼 제출시 이미지 선택창이 뜹니다.


 

4. PHP 서버측 검증 코드

 

<?php
if(isset($_POST['g-recaptcha-response'])) {
	$captcha=$_POST['g-recaptcha-response'];
}
if(!$captcha) {
	echo '등록폼에 리캡챠를 확인하세요.';
}

$secretKey = "발급받은 Secret key";
$ip = $_SERVER['REMOTE_ADDR'];

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip);
$responseKeys = json_decode($response,true);
if(intval($responseKeys["success"]) !== 1) {
	echo '검증을 통과하지 못했습니다.';
} else {
	echo '검증을 통과 했습니다.';
}
?>

 

 

5. Deprected된 reCAPTCHA V1의 이미지

다음 이미지는 reCAPTCHA V1의 이미지 입니다. reCAPTCHA V1 은 deprecated 되어서 더이상 사용되지 않습니다. 이걸 사용하고 있다면 업그레이드 해야 합니다.

 

Deprected된 reCAPTCHA V1의 이미지

  

이것으로 reCAPTCHA 를 PHP 로 적용하는 방법에 대해서 알아 봤습니다.

 

반응형