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