Comment fonctionnent les CAPTCHAs ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour

je parle ici des captchas de base, pas des machins de Google où on doit choisir les images montrant des océans ^^

dans mon exemple il y a une image avec du texte généré (exemple "4z3rty") et l'utilisateur doit entrer ça dans le champ situé en dessous de l'image

j'aimerais développer un système comme ça mais je vois pas trop comment ça marche

Mon Test

donc pour tester je regarde ce que fait le navigateur sur un site qui utilise à peu près ce système.

pour aller chercher l'image, ça me fait une requête GET sur : "LESITE/captcha.php?t=CHAINE-ALÉATOIRE"

par contre je m'attendais à ce que cette "page"/"image" me glisse un cookie pour savoir de quel captcha on parle

parce que si je vais directement sur la page "LESITE/captcha.php?t=CHAINE-ALÉATOIRE" ou que je réactualise l'image, le captcha change

Mais il n'en est rien, l'adresse "LESITE/captcha.php?t=CHAINE-ALÉATOIRE" ne renvoi pas de cookie

ce que j'imaginais est que lors de chaque requête :

  1. l'image est générée à partir d'un code qu'il faut rentrer
  2. le "bon code" est stocké en format texte côté serveur (bdd / session / fichier texte ou autre)
  3. l'image est renvoyée au client
  4. un "identifiant" est renvoyé en cookie. Cet identifiant ne contient pas le "bon code" à rentrer, ce serait trop facile, mais juste un chaîne permettant de savoir c'est de quel code/image que l'on parle…

Vraisemblablement ça ne fonctionne pas comme ça.

J'ai donc poussé mes tests plus loin.

Si je charge la page d'inscription (celle qui contient le captcha), que je réactualise l'image par exemple en l'ouvrant dans un nouvel onglet (donc nouvelle requête / le code du captcha change), et que j'entre le code généré par la nouvelle image… je me dis que normalement ça devrait marcher.

Il se trouve que non, et que c'est bien le code originel du CAPTCHA affiché sur la page d'inscription qui est demandé.

Petit schéma pour ceux qui n'ont pas suivi mes explications :

1
2
3
4
5
6
7
8
GET /inscription.php (page qui contient l'image et le formulaire du captcha)
GET /captcha.php?t=iu4dez3uixc56qt (via la balise HTML image)

cette image affiche "AZERTY"

GET /captcha.php?t=iu4dez3uixc56qt (requête directe sur l'image avec la même valeur pour "t")

cette image affiche "QWERTY"

sauf que si je rentre "QWERTY" sur ma page inscription.php, ça me renvoi une erreur. Mais si je rentre "AZERTY", ça marche.

Comment ce genre de système est possible sans cookie ?

Merci !

+0 -0

Pourrais-tu nous donner un lien vers le site ? Parce que sur les captcha google avec texte que je voyais y'a pas si longtemps, quand j'ouvrais deux pages sans remplir les captchas, le captcha de la première ouverte devenait invalide. Puis j'ai testé sur site au hasard, ça fonctionne comme tu dis (le site se souvient du dernier qu'il m'a envoyé avec un cookie/session PHPSESSID et donc si j'ouvre deux pages je peux entrer le captcha de la dernière ouverte sur la première). Ça a l'air assez bancal et pas trop difficile de faire mieux, pourtant…

+0 -0

Peut être une histoire de session plutôt que de cookie.

Nicox11

Perdu. Les sessions sont bien stockées cotée serveur, mais l'identifiant de session est stocké dans un cookie client :)
Après, il est rare d'avoir des navigateurs bloquant les cookies de sessions.

Sans cookie, tu peux stocker un identifiant directement dans le formulaire (<input type="hidden">), et associer la réponse au captcha à cet identifiant côté serveur.

+0 -0

Peut être une histoire de session plutôt que de cookie.

Nicox11

Perdu. Les sessions sont bien stockées cotée serveur, mais l'identifiant de session est stocké dans un cookie client :)
Après, il est rare d'avoir des navigateurs bloquant les cookies de sessions.

Sans cookie, tu peux stocker un identifiant directement dans le formulaire (<input type="hidden">), et associer la réponse au captcha à cet identifiant côté serveur.

SeeoX

Merci d'avoir éclairé ma petite lanterne qui disait des bêtises :p

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte