IT & 웹개발

CAPTCHA, reCAPTCHA – 봇을 차단하는 보안 기술

kkwako 2025. 3. 27. 16:00

1. CAPTCHA와 reCAPTCHA란?

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)는 사람이 컴퓨터인지 봇인지 판별하기 위해 개발된 보안 기술입니다. 이는 웹사이트에서 자동화된 스팸 및 봇 공격을 방지하는 역할을 합니다. CAPTCHA는 사용자가 특정한 테스트를 통과해야만 시스템에 접근할 수 있도록 하여 악성 봇이 자동으로 로그인하거나 폼을 제출하는 것을 차단합니다.

CAPTCHA의 대표적인 유형은 다음과 같습니다.

  • 텍스트 CAPTCHA: 왜곡된 문자나 숫자를 입력하도록 요구
  • 이미지 CAPTCHA: 여러 개의 이미지 중 특정한 항목(예: 신호등, 자동차 등)을 선택하도록 요구
  • 퍼즐 CAPTCHA: 조각난 이미지 퍼즐을 맞추는 방식
  • 음성 CAPTCHA: 화면을 볼 수 없는 사용자를 위해 음성을 듣고 입력하도록 제공
  • 수학 문제 CAPTCHA: 간단한 덧셈이나 뺄셈 문제를 해결하도록 요구

이러한 CAPTCHA는 기본적인 보안 기능을 제공하지만, 시간이 지남에 따라 머신러닝과 인공지능(AI) 기술이 발전하면서 기존 방식이 쉽게 우회될 수 있다는 한계가 있습니다. 이를 해결하기 위해 Google은 reCAPTCHA라는 더 강력한 CAPTCHA 솔루션을 개발하여 웹사이트 보안을 강화했습니다.

2. reCAPTCHA의 발전 과정

Google의 reCAPTCHA는 기존의 CAPTCHA보다 더 높은 수준의 보안과 사용자 편의성을 제공합니다. reCAPTCHA는 머신러닝과 AI 기술을 활용하여 사용자가 실제 사람인지 봇인지 자동으로 판별하는 기능을 갖추고 있습니다.

reCAPTCHA는 크게 다음과 같은 버전으로 발전해 왔습니다.

  • reCAPTCHA v1 (기본 이미지 CAPTCHA): 사용자가 왜곡된 문자를 직접 입력해야 했으며, 시간이 지남에 따라 OCR(광학 문자 인식) 기술로 인해 보안성이 약해짐
  • reCAPTCHA v2 ("I'm not a robot" 체크박스 방식): 사용자가 "I'm not a robot" 버튼을 클릭하면 마우스 움직임 및 행동을 분석하여 인간 여부를 판단, 필요할 경우 추가 이미지 선택을 요구
  • reCAPTCHA v3 (완전 자동화된 보안 분석): 사용자의 행동 패턴을 분석하여 봇 여부를 자동 판별, 사용자가 별도의 CAPTCHA를 입력할 필요 없음
  • reCAPTCHA Enterprise: 기업용 보안 기능을 강화한 버전으로, 사용자 행동 점수 기반 위험 평가 제공

특히 reCAPTCHA v3는 사용자의 행동 패턴을 학습하여 점수를 부여(0.0~1.0)하며, 웹사이트 관리자가 특정 임계값을 설정하여 봇을 차단할 수 있습니다. 예를 들어, 점수가 0.3 이하인 경우 CAPTCHA를 추가로 요구하거나, 특정 동작을 제한하는 방식으로 활용됩니다.

3. CAPTCHA 및 reCAPTCHA의 활용 사례

CAPTCHA와 reCAPTCHA는 다양한 보안 요구사항을 충족하기 위해 여러 웹사이트 및 애플리케이션에서 사용됩니다. 대표적인 활용 사례는 다음과 같습니다.

(1) 로그인 보안 강화

많은 웹사이트에서는 로그인 페이지에 CAPTCHA를 적용하여 Brute Force(무차별 대입) 공격을 방지합니다. 봇이 자동으로 로그인 정보를 입력하고 반복 시도하는 것을 차단할 수 있습니다.

(2) 회원가입 보호

회원가입 폼에 CAPTCHA를 적용하면 자동 회원가입 봇을 방지할 수 있습니다. 스팸 계정을 대량 생성하여 악용하는 사례를 차단할 수 있으며, 실제 사용자만 가입할 수 있도록 보장합니다.

(3) 댓글 및 폼 스팸 방지

블로그, 게시판, 문의 폼 등의 입력 폼에 CAPTCHA를 추가하면 자동 스팸 댓글을 차단할 수 있습니다. 이는 스팸 링크 삽입을 통한 검색 엔진 최적화(SEO) 스팸을 막는 데에도 효과적입니다.

(4) 온라인 투표 조작 방지

온라인 투표 시스템에서 CAPTCHA를 적용하면 자동화된 봇이 특정 후보에게 대량 투표하는 것을 막을 수 있습니다. 이는 공정한 투표 환경을 조성하는 데 유용합니다.

(5) API 및 자동화 요청 제한

API 요청 시 특정 엔드포인트에 CAPTCHA를 적용하면 **악성 트래픽 및 DDoS(서비스 거부 공격)**를 방어하는 데 도움을 줄 수 있습니다. 예를 들어, API 호출 전 reCAPTCHA 검증을 거쳐야만 데이터를 제공하도록 설정할 수 있습니다.

4. reCAPTCHA 적용 방법

Google의 reCAPTCHA를 웹사이트에 적용하는 방법을 살펴보겠습니다.

(1) reCAPTCHA v2 적용 예제

  1. Google reCAPTCHA 관리자에 접속하여 사이트를 등록
  2. reCAPTCHA v2 (체크박스 방식) 선택 후 사이트 키 및 시크릿 키 발급
  3. HTML 페이지에 reCAPTCHA 추가
html
복사편집
<form action="submit.php" method="POST"> <input type="text" name="username" placeholder="아이디"> <input type="password" name="password" placeholder="비밀번호"> <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div> <button type="submit">로그인</button> </form> <script src="https://www.google.com/recaptcha/api.js"></script>
  1. 서버에서 reCAPTCHA 검증 처리(PHP 예제)
php
복사편집
$secret = 'YOUR_SECRET_KEY'; $response = $_POST['g-recaptcha-response']; $remoteIp = $_SERVER['REMOTE_ADDR']; $verifyUrl = "https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteIp"; $responseData = file_get_contents($verifyUrl); $result = json_decode($responseData, true); if ($result['success']) { echo "인증 성공!"; } else { echo "봇 의심!"; }

(2) reCAPTCHA v3 적용 예제

  1. Google에서 reCAPTCHA v3 사이트 키 발급
  2. 웹페이지에 reCAPTCHA 스크립트 추가
html
복사편집
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script> <script> grecaptcha.ready(function() { grecaptcha.execute('YOUR_SITE_KEY', {action: 'submit'}).then(function(token) { document.getElementById("g-recaptcha-response").value = token; }); }); </script> <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
  1. 서버에서 reCAPTCHA v3 검증 처리
php
복사편집
$secret = 'YOUR_SECRET_KEY'; $response = $_POST['g-recaptcha-response']; $verifyUrl = "https://www.google.com/recaptcha/api/siteverify"; $data = ['secret' => $secret, 'response' => $response]; $options = ['http' => ['method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($data)]]; $context = stream_context_create($options); $result = file_get_contents($verifyUrl, false, $context); $responseData = json_decode($result, true); if ($responseData['success'] && $responseData['score'] > 0.5) { echo "인증 성공!"; } else { echo "봇 의심!"; }

5. 결론

CAPTCHA와 reCAPTCHA는 웹사이트의 보안을 강화하고, 자동화된 봇 공격을 방지하는 데 필수적인 기술입니다. 최신 reCAPTCHA v3는 사용자의 행동을 분석하여 보안성을 유지하면서도 사용자 경험을 해치지 않는 방향으로 발전하고 있습니다. 보안은 점점 더 중요해지고 있으며, CAPTCHA를 적절하게 활용하여 웹사이트를 안전하게 보호하는 것이 필요합니다.

 

CAPTCHA, reCAPTCHA – 봇을 차단하는 보안 기술