CAPTCHA PHP SIMPLE

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 30 juin 2009 à 16:05
cs_claude77260 Messages postés 54 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 8 avril 2013 - 14 oct. 2012 à 19:22
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/50244-captcha-php-simple

cs_claude77260 Messages postés 54 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 8 avril 2013
14 oct. 2012 à 19:22
marche super et bien suffisant pour le commun des mortels
merci du partage

mettre error_reporting(0)
aprés
// On initialise les sessions
session_start();

pour effacer les erreurs de variables du au php + recent
cavalier2400 Messages postés 120 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 1 décembre 2010 1
25 avril 2011 à 09:42
Merci, j'ai placé la captcha sur mon site, mais je reçois ce message d'erreur avertissement session_start()...Cannot send session cache limiter - headers already sent; mais au niveau de mon ordinateur local je ne reçois aucune erreur.
J'ai utilisé le code sans aucune modification, (mon lien http://guelmachess.net/livreor.php), merci
toutoos Messages postés 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 octobre 2009
31 juil. 2010 à 18:22
Bonjour,

Voila après un an d'inactivité je reprend le codage de ce captcha. Il est vrai qu'avec le temps j'ai compris que le captcha était sincèrement faible niveau protection et un peu simple niveau codage et donc ne résistera pas longtemps à un robot.

J'ai effectué beaucoup de recherche sur le sujet pendant cette longue année d'inactivité. Je pense pouvoir vous faire un bon code avec plus de sécurité, plus d'innovation. Je posterai une nouvelle source avec le nouveau captcha pour vous tenir au courant.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 juil. 2009 à 22:41
Hello,

j'appuie Kankrelune : il ne faut pas confondre le captcha, et le code qui s'en sert.
Je ne vais donc parler que du captcha : il est assez faible, certes. Il ne bloquera pas longtemps un robot, mais suffira à éloigner les floodeurs, ce qui est largement suffisant pour des sites amateurs.
Essaye peut-être de varier les polices, et le fond...déforme les polices aussi, et change leur inclinaison.
Mais ça reste un captcha...pourquoi ne pas essayer d'innover un peu dans ce domaine ? C'est à la mode et ce serait nettement plus intéressant :-)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
8 juil. 2009 à 11:47
Je pense surtout que tu te mélange allègrement les pinceaux popGG... le code de la captcha est recréé à chaque exécution du script et est normalement, en toute logique, détruit après vérification... si tu fais F5 tu renvois la valeur du formulaire avec l'ancien code captcha donc ça ne passe pas... donc pour ce qui est de l'antiflood aucun soucis... .. .

Pour ce qui est de la reconnaissance des caractères c'est l'ocr dont je parle mais ça demande un boot spécifique ce qui ne sera pas le cas la plupart du temps donc...

"je pense qu'un ocr réussira quand même à le casser mais c'est amplement suffisant comme anti flood"

après tout dépend du site, et de la partie du site, à protéger... par contre ton code je vois pas l'intérêt... je fais comment si je suis un gros posteur et que je veux poster plusieurs message sur plusieurs sujet en simultané sur un forum... tu différencie comment un boot qui flood d'un mec qui fait simplement 2 post d'affiler parce qu'il a oublié de dire quelque chose... bref inutile surtout que la captcha à le même rôle mais a d'autre avantage en plus que ta fonction n'a pas... .. .

Par contre pour ce qui est du code...

Niveau génération de ton code captcha, toutoos, tu t'y prend mal... il doit être généré non pas dans ta partie formulaire mais directement dans ta captcha... un simple appel vers le fichier captcha.php (via la balise img) et tout le reste est automatiquement traité et non pas d'un coté je fais le code et de l'autre je génère l'image... qui plus est a chaque affichage de ta captcha ton code doit changer il est donc logique que ça soit elle qui génère ce code... donc au début de ton fichier captcha.php tu met...

if(!isset($_SESSION)) {
session_start();
}
$_SESSION['captcha'] = '';
$chaine = array(
'a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p',
'q','r','s','t','u','v','w','x',
'y','z','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V',
'W','X','Y','Z'
);

$nb = 0;
while( $nb++ < 6 ) {
$_SESSION['captcha'] .= $chaine[rand(0,51)];
}

et si tu veux une captcha multipage tu peux insérer un id... personnellement je rajoute un temps d'expiration... .. .

2nd truc... il est totalement inutile d'utiliser md5 ça ne change rien si ce n'est que ça bouffe des ressources pour rien... si ton code est faux en md5 c'est qu'en clair il était faux... .. . ;o)

Je met 6 bon code mais peut être un peut trop simple et surtout gros problème de conception au niveau de la génération du code... .. .

@ tchaOo°
toutoos Messages postés 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 octobre 2009
1 juil. 2009 à 22:27
Je ne demande qu'a me perfectionner

Pour la lecture! je vous assure que ce n'est déjà pas évident à lire sur la photo il parait simple mais des fois il faut s'y reprendre à plusieurs fois.

Et pour le flood j'ai ma petite idée ne vous inquiétez pas!
popGG Messages postés 23 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 9 novembre 2007
1 juil. 2009 à 13:36
"pouvoir en fournir un complet à chaqu'un qui en désire un"

Si tu veux faire un captcha complet, je pense que tu devrais regarder le flood. De même, essaie de compliquer un peu la lecture de l'image (fusionne des caracteres, donne leurs un angle de lecture ou utilise une police (font) personnalisée, etc...)

Pense également que certaines personnes pourront utiliser ton captcha pour valider un simple message sur un forum, ou valider le téléchargement d'un fichier. Non seulement pour l'inscription d'un utilisateur.

Actuellement, ton captcha seul ne sert à rien niveau protection.

Bonne continuation pour la suite ;)

Buena suerte y persiste siempre en lo que haces!
toutoos Messages postés 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 octobre 2009
1 juil. 2009 à 12:52
Ajout par rapport au post précédent!

Enfin je veux dire que je l'utilise avec des vérifications mais derrière je vérifie les doublons et dans le cas de présence d'une erreur il faudra donc la corriger et le captcha aura donc changé!
toutoos Messages postés 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 octobre 2009
1 juil. 2009 à 12:48
Enfin je veu dire qu'en général quand on utilise cette fonction c'est pour une inscription ou un truc comme ça! donc en toute logique on vérifie que une entrée dans la base n'existe pas déjà (enfin moi je l'utilise comme ca).
popGG Messages postés 23 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 9 novembre 2007
1 juil. 2009 à 12:41
upss. Les tabulations n'apparaissent pas. Du coup, mon mail antérieur devient illisible :s
popGG Messages postés 23 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 9 novembre 2007
1 juil. 2009 à 12:34
Je suis pas pro-php donc je ne te garantie pas que ce que je vais te livrer soit efficace à 100%. Le but est d'éviter les répétitions de formulaire:

Tout d'abord, crée une class Util où tu pourras insérer cette petite fonction:
function antiFlood($veriFlood){
$bool=false;
if(isset($_SESSION['antiflood'])){
for($i=0 ; $i<count($veriFlood) ; $i++){
if(isset($_SESSION['antiflood'][$i])){
if($veriFlood[$i]!=$_SESSION['antiflood'][$i]){
$bool=true;
}
}else{
$bool=true;
}
}
}else{
$bool=true;
}
if($bool === true){
$_SESSION['antiflood']=$veriFlood;
}
return $bool;
}


Maintenant, l'utilisation est simple. A chaque action qui implique un enregistrement, je fais un truc du genre:

$veriFlood = array($paramForm1,$paramForm2,$paramForm3,$paramForm4);
if($Util->antiFlood($veriFlood) === false){
$erreurs[]=' ';
}

Où paramForm1/4 sont tes entrées du formulaire.
Je pense qu'on pourra trouver un moyen plus jolie et générique pour remplir le array $veriFlood...


if($erreurs==null){
// pas de flood
}else{
// flood. On enregistre rien!
}

Comme je t'ai dit, c'est un point de départ et je pense que tu peux trouver un truc plus simpa sur Internet.

Hasta luego
toutoos Messages postés 56 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 17 octobre 2009
1 juil. 2009 à 12:17
popGG :

En faite tu voudrais que je mette un petit effacement du formulaire pour faire une petite remise a zéro? ou que je fasse une zoulie petite redirection je ne sais pas moi.

Si tu à une proposition à me faire vas y je suis tout ouï!
popGG Messages postés 23 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 9 novembre 2007
1 juil. 2009 à 10:22
"mais c'est amplement suffisant comme anti flood"

Désolé mais je suis pas aussi convaincu pour l'anti-flood...
Un simple F5 et hop, tout ce que t'as foutu dans ton formulaire (code captcha inclus) est réutilisé: répétition des messages, etc...
il reste plus qu'à mettre un bot pour remplir ta table SQL.

La captcha est une bonne chose mais n'oublie pas de revérifier l'anti-flood!!!
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
30 juin 2009 à 16:05
Slt... le résultat à l'air pas trop mal... je pense qu'un ocr réussira quand même à le casser mais c'est amplement suffisant comme anti flood... .. .

Si tu veux un exemple plus complexe regarde dans mes sources... dans mon profil... .. .

@ tchaOo°