Cloudflare Turnstile
i CapMonster Cloud

Rozwiązywanie CAPTCHA, instalacja na stronie i testowanie.

Cennik rozwiązania Cloudflare Turnstile

CAPTCHA
Cena (USD)
$ 1.30
1000 tokenów
Odziedziczyłeś stronę z już wdrożoną captchą lub ochroną, ale bez dostępu do kodu źródłowego? Naturalnie pojawia się pytanie, jaka technologia jest używana, czy działa poprawnie i jak ją przetestować.

W tym artykule staraliśmy się odpowiedzieć na wszystkie najważniejsze pytania. Pierwszym krokiem w rozwiązywaniu problemu jest ustalenie, jaki system ochrony jest używany. W tym celu możesz skorzystać z listy popularnych captcha i systemów ochrony antybotowej, gdzie znajdziesz przykłady graficzne oraz kluczowe cechy, które pomogą szybko rozpoznać, z czym masz do czynienia.

Jeśli okaże się, że na Twojej stronie używany jest Cloudflare Turnstile, kolejnym krokiem będzie dokładniejsze poznanie jej właściwości i sposobu działania. W tym artykule możesz również zapoznać się z instrukcją integracji systemu Cloudflare Turnstile, aby w pełni zrozumieć, jak funkcjonuje on na Twojej stronie. Dzięki temu nie tylko lepiej poznasz obecną ochronę, ale też świadomie zaplanujesz jej dalsze utrzymanie.

Czym jest Cloudflare Turnstile
Czym jest Cloudflare Turnstile
Cloudflare Turnstile to nowoczesna CAPTCHA od firmy Cloudflare, która chroni strony internetowe przed automatycznymi działaniami. Dla odwiedzających witryny weryfikacja jest prawie niewidoczna, nie ma potrzeby wykonywania zadań: zwykle wystarczy jedno kliknięcie w pole wyboru, po czym system decyduje, czy przepuścić odwiedzającego, czy zablokować go przy podejrzeniu bota. W przeciwieństwie do Cloudflare Challenge, CAPTCHA Turnstile jest umieszczana bezpośrednio na stronie, a nie w osobnym oknie—zazwyczaj w formularzach logowania lub rejestracji.

Jak rozwiązać Cloudflare Turnstile przez CapMonster Cloud

Podczas testowania formularzy z Cloudflare Turnstile często trzeba zweryfikować, czy captcha jest poprawnie zintegrowana i działa.

Możesz ręcznie sprawdzić captchę na swojej stronie.

  • Otwórz stronę formularza i upewnij się, że captcha się wyświetla.
  • Spróbuj wysłać formularz bez rozwiązania — serwer powinien zwrócić błąd.
  • Po poprawnym rozwiązaniu formularz musi wysłać się bez problemów.

Do automatycznego rozwiązywania wykorzystaj narzędzia takie jak CapMonster Cloud, które przyjmują parametry captcha, przetwarzają je na serwerach i zwracają gotowy token. Wstaw go do formularza, aby przejść weryfikację bez udziału użytkownika.

Praca z CapMonster Cloud poprzez API zazwyczaj obejmuje następujące kroki:

Tworzenie zadaniaTworzenie zadania
arrow
Wysyłanie żądania APIWysyłanie żądania API
arrow
Odebranie wynikuOdebranie wyniku
arrow
Umieszczenie tokenu na stronieUmieszczenie tokenu na stronie
arrow
Rozpoznawanie Cloudflare Turnstile z użyciem gotowych bibliotek
Serwis CapMonster Cloud udostępnia gotowe biblioteki do wygodnej pracy w językach Python, JavaScript (Node.js) i C#.
Python
JavaScript
C#
Rozwiązanie, wstawianie tokena i wysyłanie formularza
Przykład w Node.js dla pełnego cyklu rozpoznawania CAPTCHA na Twojej stronie internetowej. Możliwe podejścia: użyć żądań HTTP do pobrania HTML i parametrów CAPTCHA, wysłać odpowiedź i przetworzyć wynik; lub za pomocą narzędzi do automatyzacji (np. Playwright)—otworzyć stronę, poczekać na CAPTCHA, wysłać parametry (do testowania można wysłać zarówno poprawne, jak i niepoprawne dane), uzyskać rozwiązanie przez klienta CapMonster Cloud, wstawić token do formularza i zobaczyć wynik.
python
// npm install playwright @zennolab_com/capmonstercloud-client

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";

async function main() {
  // 1. Rozwiązanie Turnstile przez CapMonster Cloud
  const cmcClient = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
  );

  const turnstileRequest = new TurnstileRequest({
    websiteURL: 'http://tsmanaged.zlsupport.com',
    websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
  });

  const result = await cmcClient.Solve(turnstileRequest);
  const token = result.solution.token;
  console.log('Otrzymano token Turnstile:', token);

  // 2. Uruchomienie Playwright
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('http://tsmanaged.zlsupport.com');

  // 3. Wypełnienie loginu i hasła
  await page.fill('#username', 'your_username');
  await page.fill('#password', 'your_password');

  // 4. Oczekiwanie na pojawienie się ukrytego pola tokena
  await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });

  // 5. Wstawianie tokena i uczynienie pola widocznym
  await page.evaluate((t) => {
    const tokenInput = document.querySelector('#token');
    if (tokenInput) {
      tokenInput.type = 'text';  // uczynić pole widocznym
      tokenInput.value = t;      // wstawić token
      console.log('Token wstawiony do pola token');
    } else {
      console.error('Pole #token nie znalezione');
    }
  }, token);

  // 6. Sprawdzenie, czy token został rzeczywiście wstawiony
  const checkValue = await page.$eval('#token', el => el.value);
  console.log('Sprawdzanie wartości tokena:', checkValue);

  // 7. Wysyłanie formularza
  await page.click('button[type="submit"]');
  console.log('Formularz wysłany z tokenem Turnstile');

  // await browser.close();
}

main().catch(err => console.error(err));
Jak podłączyć Cloudflare Turnstile do swojej witryny
Aby pewnie poruszać się po działaniu CAPTCHA na Twojej witrynie, rozumieć logikę jej weryfikacji, ponownie podłączyć lub przekonfigurować, zalecamy przestudiowanie tej sekcji. Opisuje ona proces podłączania ochrony—pomoże to szybko zrozumieć wszystkie niuanse.

1. Przejdź do strony Cloudflare Turnstile, kliknij Zacznij teraz.

2. Zarejestruj się w serwisie.

3. W Turnstile Widgets kliknij niebieski przycisk Add Widget.

HowTo Connect image 1

4. Skonfiguruj Cloudflare Turnstile, określ:

  • Widget name—nazwa CAPTCHA (dla wygody, np. Login form).
  • Hostname Management—domeny, na których CAPTCHA będzie działać (np. example.com).
  • Widget Mode:
    • Managed—optymalna opcja, CAPTCHA sama decyduje, czy pokazać pole wyboru.
    • Non-interactive—weryfikacja jest wykonywana automatycznie bez kliknięć.
    • Invisible—całkowicie niewidoczna.
  • Pre-clearance—ustaw na Yes, jeśli witryna przechodzi przez Cloudflare Proxy (aby nie powtarzać CAPTCHA).

5. Po utworzeniu widgetu otrzymasz dwa klucze—Site Key i Secret Key.

HowTo Connect image 2

6. Podłącz część kliencką

1) Podłącz skrypt Turnstile

Automatyczne renderowanie (widget jest tworzony automatycznie przy ładowaniu strony):

markup
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Kontrola programowa (sam tworzysz widget przez JavaScript):

markup
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>

Ważne: skrypt musi być ładowany z dokładnego adresu URL. Proxy lub cache mogą powodować awarie.

2) Utwórz kontener dla widgetu

Automatycznie:

markup
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>

Programowo:

markup
<div id="turnstile-container"></div>

3) Konfiguracja widgetu

Przez atrybuty data:

markup
<div class="cf-turnstile"
            data-sitekey="<YOUR_SITEKEY>"
            data-theme="light"
            data-size="normal"
            data-callback="onSuccess">
          </div>

Przez JavaScript:

javascript
const widgetId = turnstile.render("#turnstile-container", {
  sitekey: "<YOUR_SITEKEY>",
  theme: "light",
  size: "normal",
  callback: token => console.log("Token:", token)
});

4) Praca z tokenami

javascript
const token = turnstile.getResponse(widgetId);      // pobierz token
const isExpired = turnstile.isExpired(widgetId);    // sprawdź wygaśnięcie
turnstile.reset(widgetId);                          // zresetuj
turnstile.remove(widgetId);                         // usuń
turnstile.execute("#turnstile-container");         // wykonanie ręczne

5) Integracja z formularzem

markup
<form id="my-form" method="POST">
  <input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
  <button type="submit">Wyślij</button>
</form>

<script>
function onSuccess(token) {
  document.getElementById("cf-turnstile-response").value = token;
}
</script>

Przykład koduPrzykład kodu
arrow

6) Skonfiguruj część serwerową

Proces weryfikacji po stronie serwera:

  • Klient: użytkownik przechodzi Turnstile na stronie → token jest tworzony.
  • Formularz jest wysyłany: token wraz z danymi formularza jest wysyłany na serwer.
  • Serwer: wykonuje żądanie POST do API Siteverify Cloudflare z tokenem i sekretem.
  • Cloudflare: zwraca JSON z wynikiem (success: true/false) i dodatkowymi informacjami (action, hostname, czas ukończenia).
  • Serwer: decyduje, czy zezwolić, czy odrzucić akcję użytkownika.

API Siteverify:

javascript
POST
https://challenges.cloudflare.com/turnstile/v0/siteverify

Parametry żądania:

  • secret (wymagane): tajny klucz Turnstile z panelu Cloudflare
  • response (wymagane): token otrzymany na kliencie
  • remoteip (opcjonalne): adres IP użytkownika (zalecane)
  • idempotency_key (opcjonalne): unikalny UUID do ochrony przed powtórzonymi weryfikacjami

Właściwości tokena:

  • Maksymalna długość: 2048 znaków
  • Ważny przez 5 minut
  • Jednorazowy
  • Po wygaśnięciu lub ponownej weryfikacji API zwróci błąd timeout-or-duplicate

Przykład weryfikacji w PHPPrzykład weryfikacji w PHP
arrow

Background
Możliwe błędy i debugowanie
Bug Icon
Nieprawidłowe parametry
CAPTCHA nie wyświetla się lub zwraca błędy takie jak invalid-input-secret, missing-input-response, invalid-input-response. Sprawdź aktualność sitekey i secret key, a także ustawienia w Panelu Cloudflare.
Bug Icon
Limit czasu rozwiązania
Token wygasł (ważny przez 300 sekund) lub nie został otrzymany na czas. Upewnij się o stabilnym połączeniu i prawidłowej integracji z API.
Bug Icon
Pusty lub nieprawidłowy token
Parametr cf-turnstile-response jest brakujący lub nieprawidłowy. Sprawdź przekazywanie tokena do formularza i serwera.
Bug Icon
Odpowiedź success=false
Token jest nieważny, wygasły lub już użyty. Każdy token można zweryfikować tylko raz. Włącz logowanie żądań i odpowiedzi Siteverify do analizy.
Sprawdzenie odporności ochrony
Po integracji upewnij się, że system faktycznie chroni stronę przed automatycznymi działaniami.
Rekomendacje dotyczące bezpieczeństwa i optymalizacji
Weryfikuj tokeny tylko na serwerze, nigdy nie wywołuj API Siteverify z frontendu—to ujawni Twój tajny klucz.
Używaj zmiennych środowiskowych lub systemu zarządzania sekretami zamiast przechowywać klucze w kodzie.
Sprawdzaj dodatkowe pola (<span class="font-bold">hostname</span>, <span class="font-bold">action</span>), aby upewnić się, że żądanie pochodzi z Twojej witryny.
Używaj HTTPS—wszystkie wywołania do Siteverify powinny być wykonywane przez bezpieczne połączenie.
Zaimplementuj obsługę błędów—gdy API jest niedostępne, pokaż użytkownikowi jasny komunikat bez ujawniania danych wewnętrznych.
Ogranicz użycie sitekey według domen.
Dodaj do formularza linki do <span class="font-bold">Polityki prywatności</span> i <span class="font-bold">Warunków korzystania z Cloudflare</span>, jeśli wymaga tego Twoja organizacja lub polityka prywatności.
Wnioski

Jeśli przejąłeś stronę internetową, na której jest już zainstalowany captcha lub inny system zabezpieczeń, a jednocześnie nie masz dostępu do kodu — to nic strasznego! Dość łatwo jest ustalić, jaka dokładnie technologia jest używana. Aby sprawdzić poprawność działania, możesz skorzystać z usługi rozpoznawania CapMonster Cloud w odizolowanym środowisku testowym, żeby upewnić się, że mechanizm przetwarzania tokenów i logika weryfikacji działają prawidłowo.

W przypadku Cloudflare Turnstile wystarczy rozpoznać system, przeanalizować jego zachowanie i upewnić się, że zabezpieczenie działa poprawnie. W artykule pokazaliśmy, jak zidentyfikować Cloudflare Turnstile oraz gdzie znaleźć instrukcje dotyczące jego podłączenia lub ponownej konfiguracji, aby móc pewnie utrzymywać ochronę i kontrolować jej działanie.

Conclusion

Często zadawane pytania o Cloudflare Turnstile

Aby rozwiązać Cloudflare Turnstile za pomocą CapMonster Cloud:

Wyślij żądanie POST do https://api.capmonster.cloud/createTask z następującymi parametrami JSON:

json
{
  "clientKey": "API_KEY",
  "task": {
    "type": "TurnstileTask",
    "websiteURL": "[page_URL_with_Turnstile]",
    "websiteKey": "[Turnstile_website_key]"
  }
}
  • clientKey: Twój klucz API CapMonster Cloud
  • task.type: TurnstileTask
  • task.websiteURL: Adres URL strony, na której rozwiązywana jest captcha
  • task.websiteKey: Klucz Turnstile site key. Zobacz, jak go znaleźć.

API zwraca taskId.

Odpytuj https://api.capmonster.cloud/getTaskResult z clientKey i taskId, aż status odpowiedzi stanie się ready.

Gdy zadanie zostanie rozwiązane, odpowiedź zawiera token i odpowiadający userAgent.

Przekaż obie wartości do tej samej sesji przeglądarki, która wyśle formularz.

Szczegóły i przykłady znajdziesz w dokumentacji zadania Turnstile.

Cloudflare Turnstile obsługuje trzy tryby widżetu:

  • Managed: Turnstile decyduje, czy pokazać interaktywną weryfikację, czy przepuścić odwiedzającego po cichu, na podstawie ryzyka.
  • Non-interactive: Działa bez interakcji użytkownika, ale nadal wyświetla widoczny widżet podczas sprawdzania.
  • Invisible: Również działa bez interakcji użytkownika, ale widżet nie jest pokazywany odwiedzającemu.

Gdy backend otrzyma token Turnstile od klienta:

Wyślij go metodą POST do https://challenges.cloudflare.com/turnstile/v0/siteverify z parametrami:

  • secret: Tajny klucz widżetu z panelu Cloudflare
  • response: Token z widżetu po stronie klienta
  • remoteip (opcjonalnie): Adres IP odwiedzającego
  • idempotency_key (opcjonalnie): UUID wygenerowany przez Ciebie do bezpiecznego ponowienia walidacji

Endpoint akceptuje zarówno application/x-www-form-urlencoded, jak i application/json.

Jeśli token pomyślnie przeszedł weryfikację, Cloudflare zwraca success: true.

Użyj page.evaluate() lub innej metody na poziomie DOM, aby wstrzyknąć token do pola z [name="cf-turnstile-response"] przed wysłaniem formularza.

Pamiętaj, że niektóre integracje korzystają również z callbacków lub niestandardowych handlerów JavaScript. W takim przypadku wywołaj funkcję callback JS widżetu (zdefiniowaną w data-callback) i przekaż otrzymany token do weryfikacji serwerowej.

Błąd timeout-or-duplicate z Turnstile siteverify zwykle oznacza, że token wygasł przed weryfikacją lub został przesłany więcej niż raz. Tokeny Turnstile są jednorazowe i wygasają po pięciu minutach.

Do debugowania błędów: