Comparisons

CAPTCHA texte vs CAPTCHA image : comparaison pour développeurs

Périmètre sûr : ce guide porte sur les CAPTCHA que vous déployez — vos applications, vos environnements de préproduction et de production, ou des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne traite pas de l'automatisation de sites tiers que vous ne contrôlez pas.

Si vous protégez un formulaire aujourd'hui, le CAPTCHA texte n'est plus le réflexe par défaut : il filtre mal les scripts et pénalise vos visiteurs réels. La grille d'images protège mieux, mais coûte 10 à 30 secondes à chaque utilisateur. La comparaison « captcha texte vs captcha image » a donc souvent une troisième réponse : un défi invisible comme Cloudflare Turnstile.

Réponse courte : quel type de CAPTCHA pour quel formulaire

Votre situation Choix cohérent Pourquoi
Formulaire de contact, trafic faible CAPTCHA texte auto-hébergé Aucune donnée sortante
Connexion, paiement, inscription Grille d'images (reCAPTCHA v2) Reconnaissance d'objets coûteuse à automatiser
Application grand public Cloudflare Turnstile ou reCAPTCHA v3 Aucun clic dans le cas nominal
Exigences d'accessibilité fortes Défi invisible + contrôles serveur Ni texte déformé ni grille au lecteur d'écran

Comparaison détaillée : sécurité, friction et accessibilité

Les chiffres ci-dessous reposent sur des mesures observées et des retours d'utilisateurs. Les résultats varient selon l'environnement, le volume et le moment de la journée.

Critère CAPTCHA texte CAPTCHA image en grille
Résistance à l'automatisation Faible : l'OCR lit la plupart des chaînes déformées Élevée : impose une classification d'images
Temps de résolution humain 5–10 s 10–30 s
Taux d'échec humain de l'ordre de 15–20 % de l'ordre de 8–15 %
Accessibilité Mauvaise sans alternative audio Très mauvaise au lecteur d'écran
Données envoyées à un tiers Aucune si auto-hébergé Oui pour les services hébergés
Prise en charge CaptchaAI Image/OCR, < 0,5 s Grille d'images, < 1 s

Comment fonctionne un CAPTCHA texte

Le serveur génère une chaîne aléatoire, lui applique des déformations, puis la restitue sous forme d'image PNG ou JPEG ; l'utilisateur saisit les caractères et le serveur compare la saisie à la chaîne stockée en session, généralement sans tenir compte de la casse. Les techniques de durcissement ne changent pas : glyphes déformés, bruit de fond, chevauchement des caractères, polices et couleurs aléatoires. Chacune complique la lecture automatique et la lecture humaine dans les mêmes proportions — c'est le défaut structurel de cette famille.

Comment fonctionne un CAPTCHA image en grille

Le serveur pioche des images dans un jeu de données étiqueté, les affiche en grille 3×3 ou 4×4 avec une consigne (« sélectionnez les feux tricolores »), puis compare les cases cochées à la vérité terrain. Certaines implémentations enchaînent plusieurs tours, ce qui allonge encore le temps de résolution. reCAPTCHA v2 est l'implémentation que vous croiserez le plus souvent dans cette famille. hCaptcha et FunCaptcha (Arkose Labs) ne sont pas pris en charge par CaptchaAI : si vos tests en dépendent, tenez-en compte dès la conception. GeeTest v4 est annoncé comme à venir ; GeeTest v3 est disponible.

Ce que l'API CaptchaAI traite dans vos tests

Le type déployé conditionne votre chaîne de non-régression : vos tests doivent franchir votre propre défi. CaptchaAI expose 15 méthodes, dont 12 en disponibilité générale et 3 en bêta.

  • Texte déformé : méthode Image/OCR, plus de 27 500 variantes, moins de 0,5 s.
  • Grille d'images : Grid Image en moins de 1 s, reCAPTCHA v2 en moins de 60 s.
  • Défis invisibles : Turnstile en moins de 10 s, Cloudflare Challenge en moins de 15 s, GeeTest v3 en moins de 12 s.
  • En bêta : CaptchaFox (bêta), Friendly Captcha (bêta), Lemin (bêta), sans métriques publiées.

La facturation se fait au thread simultané, jamais à la résolution : le plan BASIC ($15/mois, 5 threads) couvre une suite d'intégration.

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']

def submit_recaptcha_v2(sitekey: str, page_url: str) -> str:
    payload = {
        'clientKey': API_KEY,
        'task': {
            'type': 'NoCaptchaTaskProxyless',
            'websiteURL': page_url,
            'websiteKey': sitekey,
        },
    }
    resp = requests.post('https://api.captchaai.com/createTask', json=payload, timeout=30)
    resp.raise_for_status()
    return resp.json()['taskId']

L'identifiant renvoyé sert au polling du résultat. Tracez-le avec la durée d'obtention du token et le code retour HTTP : c'est votre clé de corrélation en intégration continue.

Accessibilité, RGPD et marchés francophones

Aucune des deux familles n'est réellement accessible : le texte déformé est illisible sans alternative audio, et la grille est inutilisable au lecteur d'écran. Si l'accessibilité fait partie de vos obligations, la seule réponse honnête est un défi invisible complété par des contrôles serveur : limitation de débit et validation métier.

En France, en Belgique et en Suisse s'ajoute le RGPD : un défi hébergé par un tiers transmet l'adresse IP et des signaux de navigation hors de votre périmètre. Documentez ce traitement et appliquez le principe de minimisation. Un CAPTCHA texte auto-hébergé sur OVHcloud ou Scaleway n'envoie rien à l'extérieur : c'est son argument le plus solide.

Exemple type : une équipe SaaS lyonnaise garde son CAPTCHA texte maison sur le formulaire de devis (trafic faible, aucune donnée sortante) et bascule la page de connexion sur Turnstile. Deux réponses différentes, parce que les deux risques le sont aussi.

Liste de contrôle avant mise en production

  • Le type retenu correspond au risque réel du formulaire, pas à une habitude.
  • Une alternative accessible existe pour qui ne peut pas résoudre le défi.
  • Le traitement des données est documenté si le défi est hébergé par un tiers.
  • La clé CaptchaAI vit dans un secret CI, jamais dans le code source.
  • Durées d'appel, codes retour et retry sont journalisés par environnement.

FAQ

Un CAPTCHA texte maison est-il plus simple à justifier au regard du RGPD ?

Souvent oui, puisqu'aucune donnée ne quitte votre infrastructure. Cela ne vous dispense pas de documenter le traitement, et ne compense pas sa faible résistance aux scripts : c'est un argument de conformité, pas de sécurité.

CaptchaAI prend-il en charge hCaptcha ?

Non — hCaptcha n'est pas pris en charge, pas plus que FunCaptcha (Arkose Labs) : aucune méthode de l'API ne les résout aujourd'hui. GeeTest v4 est annoncé comme à venir ; GeeTest v3, lui, est bien disponible.

Faut-il migrer un ancien CAPTCHA texte vers Cloudflare Turnstile ?

C'est le chemin le plus courant sur une page de connexion à fort trafic : vous supprimez la friction visible et vous gagnez en filtrage. Gardez le CAPTCHA texte sur les pages à faible enjeu, et basculez derrière un drapeau de configuration.

Combien de threads prévoir pour valider un formulaire en intégration continue ?

Comptez les tests qui appellent l'API en parallèle, pas le nombre total de résolutions : la facturation porte sur le thread simultané, avec des résolutions illimitées par thread. Ne changez de palier que si vos exécutions attendent un thread libre.

Guides connexes

Mesurez vos propres temps de résolution avant de figer le choix d'un type de CAPTCHA. – Obtenez votre clé CaptchaAI.

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