네트워크SecurityCAPTCHABot DetectionWeb

CAPTCHA는 어떻게 사람과 봇을 구분할까?

문제 원본 → 챌린지 생성 → 사용자 응답 → 서버 검증

시각화 로드 중...

개요

Network Overview

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)는 자동화된 접근과 정상 사용자를 구별하기 위한 도전·응답 방식입니다. 회원가입, 로그인, 댓글, 비밀번호 재설정, 티켓 구매 등에서 대량 자동화 요청을 줄이는 데 활용합니다. CAPTCHA 하나만으로 모든 봇을 차단할 수는 없으며, 속도 제한·위험도 평가·계정 보호와 함께 사용합니다.

CAPTCHA 유형

  • 문자 인식: 왜곡된 글자나 숫자를 읽고 입력합니다. 접근성 및 OCR 공격에 취약할 수 있습니다.
  • 이미지 선택: 여러 사진에서 특정 사물(예: 횡단보도)을 선택합니다. 사진의 정답 라벨은 서버에서 관리합니다.
  • 수학 문제: 서버가 두 피연산자와 연산자를 생성합니다. 정답은 서버에만 보관하고 브라우저에는 문제만 보냅니다.
  • 체크박스·행동 기반: 클릭 자체보다 브라우저·세션의 위험 신호를 평가하며 필요할 때 추가 문제를 제시할 수 있습니다.
  • 비가시적·위험 점수 기반: 사용자가 문제를 직접 풀지 않고 서버가 토큰과 위험 평가 결과를 검증합니다.

문제 이미지와 양식은 어디서 가져올까?

직접 구현: (1) 이용 권한을 확보한 사진이나 자체 제작 이미지를 저장소·객체 스토리지에 준비하고, (2) 정답 라벨과 문제 ID를 서버 DB에 등록하고, (3) 서버가 무작위로 문제를 골라 이미지 URL 또는 짧은 수명의 서명 URL과 선택 UI 구성을 내려줍니다. 이미지 URL 자체는 비밀이 아닙니다. 정답·검증 규칙은 서버에 둡니다. 수학 CAPTCHA는 이미지 수집 없이 서버에서 숫자와 연산을 생성하고 텍스트, SVG 또는 서버에서 렌더링한 이미지로 전달할 수 있습니다. 텍스트를 이미지로 바꾸는 것만으로 보안이 보장되지는 않습니다.

외부 서비스: reCAPTCHA, hCaptcha, Turnstile 등의 공식 클라이언트 위젯 또는 스크립트를 연동합니다. 챌린지 이미지와 UI는 대체로 제공업체가 관리합니다. 서비스별로 항상 이미지 문제가 표시되는 것은 아닙니다. 사이트 백엔드는 제공업체의 검증 API에 응답 토큰을 보내 확인합니다.

검증과 보안 경계

문제 ID와 만료 시간, 사용 여부를 서버에 보관하고 정답을 비교한 뒤 일회성으로 소진합니다. 브라우저에 정답이나 비밀 키를 포함하지 않습니다. 외부 서비스 토큰도 프런트엔드의 성공 표시만 신뢰하지 말고 백엔드에서 공식 검증 API로 확인해야 합니다. 재사용·만료·위조 토큰은 거부합니다. 접근성 대체 수단, 개인정보 최소 수집, 실패 시 재시도 정책도 설계해야 합니다.

실제 이미지와 시각화의 관계

아래 흐름도의 이미지 저장소는 개념적 구성 요소 입니다. 실제 사진을 외부 사이트에서 임의로 스크래핑하는 구현이 아닙니다. 서비스 제공업체의 내부 이미지 수집·선정 알고리즘은 공개된 범위 이상으로 단정할 수 없습니다.

학습 목표

  • CAPTCHA의 목적과 대표 유형을 설명할 수 있다.
  • 수학 문제 생성과 이미지 데이터셋 기반 문제 구성의 차이를 이해한다.
  • 브라우저 응답과 서버 측 정답·토큰 검증의 보안 경계를 설명할 수 있다.

자주 하는 오해

  • 프런트엔드에서 정답을 검사하거나 정답을 HTML/JavaScript에 포함하면 쉽게 노출됩니다.
  • 이미지 URL을 숨기는 것과 정답을 보호하는 것은 별개의 문제입니다.
  • 체크박스를 클릭했다고 무조건 사람으로 판정되는 것은 아닙니다.
  • CAPTCHA 성공 토큰을 서버 검증 없이 신뢰해서는 안 됩니다.

핵심 정리

  • 문제는 브라우저에, 정답과 검증 권한은 서버에 둡니다.
  • 이미지형은 권한 있는 데이터셋과 정답 라벨이 필요하지만 수학형은 동적 생성할 수 있습니다.
  • 외부 제공업체 사용 시 챌린지 운영과 사이트 백엔드의 토큰 검증 책임을 구분합니다.

학습 확인

문제 1

수학 CAPTCHA에서 정답 12를 어디에 보관해야 안전한가요?

문제 2

외부 CAPTCHA 서비스의 응답 토큰을 받았을 때 애플리케이션 서버가 해야 할 일은?

핵심 단계

  1. 1

    문제 원본 준비 — 이미지 CAPTCHA는 권한이 확보된 사진과 정답 라벨을 저장하고, 수학 CAPTCHA는 서버가 숫자·연산자를 생성한다.

  2. 2

    챌린지 발급 — 서버가 문제 ID, 만료 시간, 일회성 상태를 기록하고 문제와 UI 구성만 전달한다.

  3. 3

    브라우저 표시 — 이미지 그리드, 수식 또는 제공업체 위젯을 렌더링한다.

  4. 4

    사용자 응답 — 선택한 이미지 ID나 계산 결과 또는 제공업체 토큰을 제출한다.

  5. 5

    서버 검증 — 정답 비교 또는 제공업체 검증 API 호출, 만료·재사용 여부 확인을 수행한다.

  6. 6

    판정 및 소진 — 성공이면 보호 작업을 진행하고, 실패이면 제한된 재시도나 새 문제를 제공한다.

핵심 개념 및 실무 적용 분야

✓회원가입 폼에서 반복 생성되는 자동화 계정 방지
✓로그인·비밀번호 재설정 엔드포인트의 자동화 요청 완화
✓이미지 선택형: 사진 저장소 → 문제 ID/정답 라벨 → 3×3 선택 그리드 → 서버 비교
✓수학형: 서버에서 7 + 5 생성 → 브라우저에 '7 + 5 = ?' 표시 → 서버에서 12 검증
✓외부 서비스형: 위젯 토큰 발급 → 애플리케이션 서버 → 제공업체 검증 API