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_clearanceest 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.
Le cookie cf_clearance doit-il être réutilisé entre les requêtes ?
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
- Le démarrage rapide CaptchaAI
- La QA CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos formulaires
- L'intégration CAPTCHA en CI
- Résoudre reCAPTCHA v2 via l'API
- Résoudre Cloudflare Turnstile via l'API
Passez d'un blocage subi à un diagnostic maîtrisé sur vos propres environnements. – Créez votre clé CaptchaAI.