Scarnox · Blog

Cloudflare Turnstile: 작동 방식과 풀이 방법 (준비 중)

Cloudflare Turnstile은 보통 방문자에게 아무것도 요구하지 않는 캡차입니다. 브라우저에서 검사를 실행하고, 대부분의 경우 퍼즐 없이 통과합니다. 확신하지 못하면 짧은 대화형 단계를 보여 줄 수도 있습니다. 그다음 위젯이 폼에 토큰을 기록하고, 사이트는 그 토큰을 Cloudflare로 검증합니다. Turnstile용 Scarnox 지원은 준비 중입니다. 이 가이드는 위젯이 어떻게 작동하는지, 다른 챌린지와 왜 자주 혼동되는지, 합법적인 작업을 위한 일반적인 접근법을 설명합니다.

위젯이 삽입되는 방식

페이지에는 cf-turnstile 클래스와 data-sitekey 속성을 가진 컨테이너 요소가 들어 있습니다. Turnstile 스크립트가 로드되어 검사를 실행하고, cf-turnstile-response라는 이름의 숨겨진 입력 필드를 추가합니다. 이 입력 필드의 값이 토큰입니다. 폼은 나머지 필드와 함께 토큰을 제출하고, 사이트의 백엔드는 사이트의 비밀 키와 함께 토큰을 Cloudflare의 검증 엔드포인트로 보냅니다.

다른 토큰 위젯과 마찬가지로 검증은 서버에서 이루어집니다. 그 필드에 아무 값이나 받아들이는 폼은 실제로 보호되고 있지 않습니다.

모드와 스크립트에 대한 의미

Turnstile은 둘 이상의 모드로 실행될 수 있습니다. 관리형 모드에서는 Cloudflare가 대화형 단계를 보여 줄지 결정합니다. 비대화형 모드에서는 위젯이 방문자에게 아무것도 요구하지 않고 상태만 보여 줍니다. 비가시형 모드에서는 아무것도 표시되지 않습니다. 스크립트 입장에서 모드는 화면에 보이는 것을 바꾸지만, 결과는 같습니다. 폼 필드에 토큰이 들어가고, 서버에서 검증됩니다.

토큰은 수명이 짧고 한 번만 사용할 수 있습니다. 위젯이 토큰을 만든 뒤 가능한 한 빨리 폼을 제출하고, 이미 검증된 토큰은 다시 사용하지 마세요.

자동화가 차단되는 이유

Turnstile은 브라우저 환경의 신호와 세션의 행동을 살펴봅니다. 기본 설정의 헤드리스 브라우저, 없거나 일관되지 않은 브라우저 기능 세트, 이력이 없는 새 세션, 의심스러운 네트워크 주소는 모두 결정을 챌린지나 차단 쪽으로 밀 수 있습니다. 이 신호들은 다른 점수 기반 검사가 사용하는 신호와 같은 계열이므로, 접근법도 비슷합니다.

합법적인 접근법

다음은 합법적인 작업에서 효과가 있는 접근법입니다.

  1. Turnstile이 로드되는 페이지에는 실제 브라우저를 사용하세요. 일관된 설정을 가진 일반 브라우저 프로필은, 기능을 줄여 만든 자동화 빌드보다 챌린지를 덜 받습니다. 흔한 신호는 헤드리스 브라우저 감지 가이드에 나와 있습니다.
  2. 세션을 유지하세요. 워크플로의 여러 페이지에 걸쳐 쿠키를 유지해서, 방문자가 매 요청마다 새 사용자처럼 보이지 않게 하세요.
  3. 요청 속도를 조절하세요. 사람과 비슷한 일정한 속도는 어떤 요령보다도 챌린지를 크게 줄입니다.
  4. 보호된 사이트의 규칙을 먼저 읽으세요. 많은 보호된 사이트가 API나 피드를 공개합니다. 브라우저 워크플로를 만들기 전에 이를 확인하세요. Cloudflare로 보호된 사이트 스크래핑 가이드에서 이 접근법을 더 깊이 다룹니다.
  5. 개발 중에는 테스트 키를 사용하세요. Cloudflare는 개발용 테스트 사이트 키를 공개하며, 실제 검사 없이 예측 가능한 결과를 냅니다. 이는 내 연동 테스트용이지, 운영 트래픽용이 아닙니다.
  6. 운영자에게 문의하세요. 사이트를 운영한다면 자동화 테스트가 사용하는 경로에 대해 Turnstile 설정을 조정할 수 있습니다. 운영하지 않는다면 허용 목록이나 API를 요청하세요.

Turnstile 솔버가 할 일

토큰 기반 Turnstile 솔버는 sitekey와 페이지 URL을 받아, cf-turnstile-response 필드에 넣을 유효한 토큰을 만들고 코드에 돌려줍니다. 여러분의 코드는 그 토큰을 폼에 넣고 즉시 제출합니다. 이는 현재 운영 중인 PopularCaptcha 연동과 같은 패턴이며, 작업 유형만 다릅니다.

Scarnox는 아직 Turnstile을 실시간으로 풀지 않습니다. 오늘 실시간으로 쓸 수 있는 작업 유형은 PopularCaptcha(프록시 없음) 하나뿐입니다. Turnstile은 준비 중이며, 출시되면 요청 세부 사항이 API 레퍼런스에 올라갑니다. 그 전에 가정한 인터페이스에 맞춰 개발하지 마세요.

흔한 실수

Turnstile 연동은 몇 가지 예측 가능한 방식으로 실패하는 경향이 있습니다. 가장 흔한 것은 만료된 토큰이나 이미 검증된 토큰을 사용하는 것입니다. 토큰은 한 번만 쓸 수 있으므로, 폼 제출이 실패한 뒤 재시도할 때는 이전 값이 아니라 새 위젯 결과가 필요합니다. 두 번째는 다른 환경의 sitekey를 쓰는 것입니다. 개발용 키를 운영 페이지에 쓰거나 그 반대로 하면, 여러분의 코드 버그처럼 보이는 검증 실패가 생깁니다. 무엇인가를 디버그하기 전에 페이지가 어떤 키를 쓰는지 먼저 확인하세요.

또 다른 흔한 실수는 대화형 단계를 실패로 취급하는 것입니다. 관리형 모드에서 Turnstile은 일부 방문자에게 짧은 단계를 보여 줄 수 있는데, 조용한 통과를 기대하는 스크립트는 거기서 멈춰 버립니다. 위젯의 결과를 기다리고, 위젯이 추가 작업을 요구하는 경우도 처리하도록 흐름을 만드세요.

마지막으로, 실제 페이지에서 확인하지 않고 필드 이름을 하드코딩하지 마세요. cf-turnstile-response 입력 필드가 표준이지만, 사이트마다 위젯을 다르게 감쌀 수 있으며, 렌더링된 폼을 읽는 것이 추측하는 것보다 빠릅니다.

스크래핑은 책임감 있게

Turnstile로 보호된 사이트를 스크래핑하는 것은 흔한 작업이며, 다른 스크래핑과 똑같은 주의가 필요합니다. robots.txt와 이용 약관을 확인하세요. 요청 속도를 낮게 유지하고, 필요 없는 개인 데이터는 수집하지 마세요. API가 있다면 그것을 우선하세요. 주요 법적 질문은 웹 스크래핑은 합법인가 가이드에서 다룹니다.

준비하기

계정을 만들고 무료 체험 크레딧으로 시작하세요. 카드 등록은 필요 없습니다. Turnstile 지원이 출시되면, 실제 사이트에 무엇인가를 실행하기 전에 내 페이지에서 먼저 테스트할 수 있습니다.

다음 단계