
웹 폼에서 봇을 막기 위해 CAPTCHA를 많이 씀. Django에서 사용할 수 있는 대표적인 CAPTCHA 3가지를 직접 테스트해봄.
| CAPTCHA | 제공사 | Django 패키지 |
|---|---|---|
| reCAPTCHA v2 | django-recaptcha | |
| hCaptcha | Intuition Machines | django-hcaptcha |
| Turnstile | Cloudflare | django-turnstile |
Google에서 제공하는 가장 널리 사용되는 CAPTCHA 서비스임. "I'm not a robot" 체크박스 방식으로, 행동 분석 기반으로 봇을 탐지함. 의심스러운 경우 이미지 선택 챌린지가 나옴.
가장 높은 인지도와 풍부한 레퍼런스, 안정적인 서비스가 장점임. 다만 Google에 데이터가 전송되기 때문에 프라이버시 이슈가 있음.
from django_recaptcha.fields import ReCaptchaField
from django_recaptcha.widgets import ReCaptchaV2Checkbox
class MyForm(forms.Form):
captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox())
reCAPTCHA의 프라이버시 친화적 대안으로 떠오른 서비스임. GDPR 준수가 잘 되어 있고, Cloudflare가 한때 이걸 기본 CAPTCHA 로 채택했었음. 무료 티어가 제공됨.
프라이버시 보호와 GDPR 친화적인 점이 장점임. 다만 reCAPTCHA보다 인지도가 낮고, 간혹 챌린지가 어려울 때가 있음.
from hcaptcha.fields import hCaptchaField
class MyForm(forms.Form):
captcha = hCaptchaField()
Cloudflare에서 2022년에 출시한 최신 CAPTCHA임. 대부분의 경우 사용자 상호작용이 필요 없고, 완전 무료로 제공됨. 프라이버시 보호도 잘 되어 있음.
사용자 경험이 가장 좋고 완전 무료인 게 장점임. 다만 상대적으로 신생 서비스라 레퍼런스가 적음.
from turnstile.fields import TurnstileField
class MyForm(forms.Form):
captcha = TurnstileField()
개발 환경에서 테스트할 때 각 서비스에서 제공하는 테스트 키를 사용하면 됨. 테스트 키는 항상 검증을 통과함.
| 서비스 | Site Key | Secret Key |
|---|---|---|
| reCAPTCHA | 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI | 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe |
| hCaptcha | 10000000-ffff-ffff-ffff-000000000001 | 0x0000000000000000000000000000000000000000 |
| Turnstile | 1x00000000000000000000AA | 1x0000000000000000000000000000000AA |
| 항목 | reCAPTCHA | hCaptcha | Turnstile |
|---|---|---|---|
| UX | 보통 | 보통 | 최고 |
| 프라이버시 | 낮음 | 높음 | 높음 |
| 가격 | 무료~유료 | 무료~유료 | 완전 무료 |
| 레퍼런스 | 많음 | 보통 | 적음 |