CAPTCHA AJAX ANTI-BOT

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 10 avril 2012 à 11:23
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009 - 16 avril 2012 à 07:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54207-captcha-ajax-anti-bot

cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
16 avril 2012 à 07:41
Bonjour,

Je n'ai pas testé le code donc je ne vais pas donner mon avis sur le coté utilisateur, par contre j'aurai un conseil au niveau développement.
Il ne faudrait pas utiliser le test "==" pour comparer 2 valeurs surtout si l'une d'elle provient de l'utilisateur (variable $_POST).
En effet le test "==" compare 2 valeurs après avoir essayé de les "transtyper" pour avoir les 2 valeurs dans le même type.
Cela génère parfois des résultats surprenants.
exemple :
<?php
if ('une chaine' == 0){
echo "une chaine est équivalente à 0";
}
?>
Cela affichera "une chaine est équivalente à 0".
Pour effectuer un vrai test il faut utiliser l'opérateur de comparaison "===" qui impose une égalité au niveau des valeurs, mais aussi au niveau du type des données (sans transtypage).
Je n'ai pas testé si c'est exploitable dans le code ici, mais pour lever tous les doutes, il faudrait prendre l'habitude de toujours écrire "===" pour les tests.
Les tests doivent être plus rigoureux, mais cela va dans le sens de la sécurité.

Bonne continuation.

EM.
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
12 avril 2012 à 19:05
Voila Citt, les problèmes sont corrigés.

N'hésitez pas à me prévenir si il y a un soucis.
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
12 avril 2012 à 17:51
concernant l'image "/captcha/imgs/item-livre.png" je pense qu'une solution serait de faire '"/captcha/imgs/item.php?img=".rand() ' avec le rand en session ' $_SESSION['item-".$rand."]="livre" ' . Je le met en ligne des que j'ai un peu de temps. d'un autre coté un OCR sur l'image ca touche tous les captcha actuels...

et le mec qui suit l'installe a part avoir des logs,je vois pas ce qui fonctionne pas. J'avoue que s'est pas terrible, j'ai un peu zappé le isset.
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
12 avril 2012 à 15:46
Je veut dire que lorsqu'il y a marqué LIVRE dans l'image GD, le nom d l'image de la vignette se nomme "/captcha/imgs/item-livre.png" donc le robot fera facilement son choix (OCR sur l'image GD pour récupéré le texte, puis recup de l'id de l'image qui comprend ce nom).

Concernant les erreurs, c'est juste que tu propose une source à installer avec des erreurs, perso je suis dev donc je sais à quoi cela correspond mais le mec qui suit juste ton installation ça marche pas.

La mise en place de commentaire serait comme même un plus pour ceux qui veulent personnalisé l'image GD !

Le "display:none" sur ta checkbox ne trompe plus beaucoup de robot, un indent en négatif ou autre chose serait mieux !
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
12 avril 2012 à 15:02
c'est pas possible que ca passe si tu desactives le js vue que les sessions sont pas déclarées : "if($_POST['captcha'] == $_SESSION['captcha-..." regarde la fonction validate().

pour les erreurs il faut simplement rajouter if( isset($...) ) aux lignes que tu as citées.

Les vignettes ont un nom et ce nom et celui de l'image générée, c'est ça que tu veux dire?

je vais corriger tout ça dans la prochaine version ^^
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
12 avril 2012 à 14:45
Je viens de tester la sécurité et je dirait que le script est original mais la sécurité pas du tout.

Ta validation du captcha se fait pas Javascript donc si tu le désactive et hop sa passe !
Le nom de tes vignettes porte le nom dans l'image :(
citt Messages postés 209 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 9 février 2012 3
12 avril 2012 à 14:24
Je viens de tester ton code est bam sans rien toucher 4 erreurs :
- Notice: A session had already been started - ignoring session_start() in ~\www\captcha\captcha.php on line 2
- Notice: Undefined index: type in ~\www\captcha\captcha.php on line 5
- Notice: Undefined index: type in ~\www\captcha\captcha.php on line 9
- Notice: Undefined index: type in ~\www\captcha\captcha.php on line 13

Sinon je le trouve original et la je teste la sécurité ;)
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
11 avril 2012 à 10:47
Si si j'accepte les critiques, c'est juste que c'est pas 1 chance sur 5 (cf source). Pour le checkbox c'est dans le cas d'un bot floodant plein de sites.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 avril 2012 à 09:58
Bonjour,

Je ne sais pas d'où tu tiens ces chiffres...

Le danger n'est pas un bot qui essaye de flooder plusieurs sites mais un bot bien particulier qui va viser le tiens, et dans ce cas là, tu es mal !

Mais bon, je préfère en rester, là, tu as l'air de ne pas trop apprécier les critiques que je fais à ton programme malgré le fait que je le trouve assez original.
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
11 avril 2012 à 09:43
rien qu'avec un on passe plus de 90% des bots( si la case a été coché alors c'est un bot...)

Après tu peux le mettre sur ton site, si ça marche pas tu reviendra ici le dire à tout le monde et voila.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 avril 2012 à 08:05
Bonjour,

Ok pour le principe, c'est original. Par contre, si un bat apprend à utiliser ta captcha, c'est terminé, elle ne servira plus à rien.

Je ne pense pas que l'argument "ce système est sécurisé parce qu'il est encore inconnu" soit valide.

Et je pense que si quelqu'un doit prouver quelque chose, c'est toi...

On peut partir d'une constatation simple : soit un automate qui utilise un algorithme aléatoire pour passer les captcha. Dans le cas d'une lettre (ce qui n'est déjà pas terrible), la captcha ne laisse passer qu'une requete sur 26 et dans ton cas, c'est une sur 5, même si tu peux modifier le nombre d'images à ajouter.

Autre inconvénient, tu as besoin de js.

Mais bon, ta source est intéressant et le principe est original. En revanche, je n'utiliserais pas cela pour mon site.
darkvador59 Messages postés 9 Date d'inscription lundi 9 août 2004 Statut Membre Dernière intervention 10 avril 2012
10 avril 2012 à 18:56
Bonjour,

je ne suis pas totalement de ton avis, il n'y a que 5 icônes mais ces 5 icônes ont déjà un nombre généré aléatoirement, donc impossible pour un bot n’exécutant pas le javascript de passer...

De plus les bot ne connaissent pas ce captcha, ils ne peuvent donc pas le "casser".
Tu me répondras certainement que si un bot apprend à utiliser ce captcha, il ne servira plus a grand chose (1/5 : parmis les bots le connaissant), mais heureusement le code peut être modifier par tout le monde, et il suffit d'une toute petite modification pour qu'un bot ne sache plus quoi faire.

Ce captcha protège contre 99,9% des bots à l'heure actuelle ( en faite c'est 100% puisque ce captcha est inconnu mais je me laisse une marge d'erreur :-) ), si tu me dis le contraire cite moi la preuve.

je l'ai mis sur GitHub ( https://github.com/patrocle ) pour qu'il soit plus simple à modifier.

PS: avec une lettre de l'alphabet, tout le monde connait le principe surtout les bots. J'ai partager cette source puisque c'est un captcha inhabituel, tout le monde peut apprendre à en faire un.
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 avril 2012 à 11:23
Bonjour,

Le principe ne me semble pas extraordinaire. En effet, une requête sur cinq passera, tu ne filtre pas grand chose. Faire la même chose en utilisant une seule lettre de l'alphabet est 5 fois plus sécurisé...
Rejoignez-nous