Comparisons

Browser Integrity Check Cloudflare et défi CAPTCHA : guide pour vos applications

Périmètre sûr : Ce guide s'applique à vos propres applications et à vos environnements de QA, de préproduction ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne porte pas sur l'automatisation de sites tiers.

Un 403 et un 503 renvoyés par Cloudflare n'appellent pas la même réaction. Le premier vient presque toujours du Browser Integrity Check (BIC) : il inspecte vos en-têtes HTTP et rejette le trafic qui ne ressemble pas à un navigateur, sans proposer d'énigme. Le second signale un défi CAPTCHA — Turnstile, Managed Challenge ou vérification JavaScript — qu'un navigateur légitime peut franchir. La règle tient en une phrase : un BIC se répare côté requête, un défi CAPTCHA se résout.

BIC ou défi CAPTCHA : les distinguer d'un coup d'œil

Les deux protections cohabitent dans le même panneau Cloudflare, mais opèrent à des étages différents du traitement d'une requête.

Critère Browser Integrity Check Défi CAPTCHA
Ce qui est vérifié Les en-têtes HTTP uniquement Le comportement et l'environnement du navigateur
JavaScript requis Non (niveau en-tête) Oui
Ce que voit l'utilisateur Rien, ou une erreur 403 Un widget ou une page de vérification
Statut HTTP en cas d'échec 403 503
Résoluble Non — corrigez les en-têtes Oui — résolvez le défi
Cookie délivré Aucun cf_clearance
CaptchaAI utile Non — corrigez la requête Oui
Activé par défaut Oui (toutes les offres Cloudflare) Non (configuré par règle)
Portée Chaque requête Uniquement les règles WAF correspondantes

Ce que le Browser Integrity Check inspecte

Le BIC s'exécute avant tout défi JavaScript ou CAPTCHA et ne regarde que les en-têtes de la requête. Il repère un User-Agent absent, vide ou porteur d'un identifiant de bibliothèque (python-requests, curl, wget), un ordre d'en-têtes inhabituel, l'absence des en-têtes Accept, Accept-Language ou Accept-Encoding, les signatures de robots connues et les IP réputées malveillantes. En QA, vous pouvez le désactiver sur vos endpoints internes depuis le tableau de bord Cloudflare, sur une application qui vous appartient.

Pour franchir le BIC, il suffit d'émettre des en-têtes cohérents avec un vrai navigateur : un User-Agent Chrome complet, les en-têtes Accept* et les en-têtes Sec-Fetch-* modernes. Aucune résolution de CAPTCHA n'entre ici en jeu.

Quand le défi CAPTCHA Cloudflare se déclenche

Une fois le BIC franchi, les règles WAF évaluent le score de risque, l'IP et le chemin appelé. Si votre seuil est dépassé, Cloudflare renvoie un 503 et présente un défi que CaptchaAI résout dans vos tests, via la méthode adaptée au type.

Type de défi Déclencheur Visible ? Méthode CaptchaAI
Widget Turnstile Intégré au formulaire par le développeur Widget sur le formulaire turnstile
Managed Challenge Correspondance à une règle WAF Adaptatif (invisible ou case à cocher) turnstile
JavaScript Challenge Mode IUAM ou règle WAF Page « Vérification de votre navigateur » cloudflare_challenge
Interactive Challenge Suspicion élevée Défi en pleine page cloudflare_challenge

Une fois le défi résolu, Cloudflare délivre un cookie cf_clearance à conserver et rejouer sur les requêtes suivantes de la même session.

Exemple Node.js pour créer une tâche Turnstile :

import fetch from 'node-fetch';

const API_KEY = process.env.CAPTCHAAI_KEY;

export async function createTurnstileTask(siteKey, pageUrl) {
  const res = await fetch('https://api.captchaai.com/createTask', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      clientKey: API_KEY,
      task: {
        type: 'TurnstileTaskProxyless',
        websiteURL: pageUrl,
        websiteKey: siteKey,
      },
    }),
  });
  const data = await res.json();
  return data.taskId;
}

Le réflexe de diagnostic le plus rentable : rejouez la requête avec deux profils d'en-têtes, l'un minimaliste, l'autre complet. Un 403 qui devient 200 vient du BIC ; un 503 signale un défi à résoudre ; un 403 persistant pointe vers l'IP ou une règle WAF. La section Dépannage détaille chaque cas.

Observabilité et journalisation

Quel que soit le langage retenu, instrumentez vos appels CAPTCHA pour obtenir des métriques exploitables : durée totale d'obtention du token, code retour HTTP, identifiant de tâche et taille de la file d'attente interne. Ces signaux distinguent immédiatement un pic de 403 (en-têtes) d'un pic de 503 (défis).

Séparez les journaux par environnement et corrélez les identifiants à votre traçage distribué, par exemple OpenTelemetry. Côté conformité, appliquez le principe de minimisation du RGPD : ne journalisez pas les en-têtes ou cookies porteurs de données personnelles au-delà du diagnostic, et fixez une durée de rétention. Si vos workers tournent sur OVHcloud, Scaleway ou une région AWS eu-west-3 (Paris), suivez la latence de résolution dans le même tableau de bord que vos temps de réponse d'origine.

Liste de contrôle

  • Le périmètre reste strictement limité à vos propres applications ou à des sources autorisées.
  • La clé CaptchaAI est stockée dans un secret d'intégration continue ou un coffre, jamais dans le code source.
  • Chaque blocage est diagnostiqué (403 contre 503) avant toute correction.
  • Les durées d'appel et les codes retour sont tracés pour chaque exécution.
  • Une stratégie de retry idempotent couvre les erreurs transitoires, et le cookie cf_clearance est réutilisé au sein d'une même session.

Dépannage

Symptôme Cause Correctif
403 avec en-têtes minimalistes, 200 avec en-têtes navigateur BIC seul Envoyez un profil d'en-têtes de type navigateur
403 quelles que soient les combinaisons d'en-têtes IP bloquée ou règle WAF Changez d'IP ou vérifiez vos règles WAF
503 avec page de vérification Défi CAPTCHA (pas le BIC) Résolvez le défi avec CaptchaAI
403 intermittent Rate limiting ou blocage lié à la session Réduisez le débit, conservez la session
En-têtes corrects mais 403 persistant Empreinte TLS (JA3) Utilisez curl_cffi ou un vrai navigateur

FAQ

Comment distinguer un blocage BIC d'un défi CAPTCHA ?

Refaites l'appel avec deux profils d'en-têtes. Un 403 qui disparaît dès que vous envoyez des en-têtes navigateur complets vient du BIC. Un 503, ou un 403 qui persiste avec tous les profils, relève d'un défi CAPTCHA ou d'un blocage d'IP.

CaptchaAI peut-il résoudre un Browser Integrity Check ?

Non. Le BIC ne présente aucune énigme résoluble : la correction est côté client, en émettant un profil d'en-têtes cohérent. CaptchaAI intervient sur les défis qui apparaissent ensuite — Turnstile, Managed Challenge et vérifications JavaScript, renvoyés en 503.

Oui. Rattachez-le à votre session HTTP et rejouez-le sur les appels suivants ; sans lui, chaque requête relance un défi et gonfle vos temps de résolution.

Comment tester ces protections en restant conforme au RGPD ?

Travaillez sur vos environnements de préproduction, avec des données synthétiques plutôt que réelles. Minimisez ce que vous journalisez, fixez une durée de rétention et documentez la base juridique de tout traitement lié à une source externe autorisée.

Guides connexes

Passez d'un blocage subi à un diagnostic maîtrisé sur vos propres environnements. – Créez votre clé CaptchaAI.

Les commentaires sont désactivés pour cet article.