Captcha
| Auteurs | Messages |
|---|---|
| # Posté le 05/11/2010 à 21h10 | |
Rang: membre |
Salut, j'ai codé un nouveau système de routine anti robot, je viens vous en faire profiter : -Je dispose d'une image comprenant des caractères à la suite (dans l'exemple les caractères font 16*16 ) vous pouvez les récupérer à cette adresse, ce sont des vieilles fonts de demos. -Aprés je genere ma captcha dans un fichier php que j'affiche comme une image fichier : captcha.php : Code: <?php header("Content-Type: image/png"); session_start(); $arrayChars=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","0","1","2","3","4","5","6","7","8","9"); $img= imagecreate(80, 16); $imgFont= imagecreatefrompng("./../GFXs/font.png"); // fichier image de caractères. $_SESSION['captcha']=""; for($i=0;$i<5;$i++) { $key=rand(0, count($arrayChars)-1); imagecopymerge($img,$imgFont ,($i*16) ,0 ,($key*16) ,0 , 16, 16, 100); $_SESSION['captcha'].=$arrayChars[$key]; } $_SESSION["captcha"]=sha1($_SESSION["captcha"]); imagepng($img); ?> Dans ce fichier j'utilise une variable de session ($_SESSION["captcha"] dans laquelle se trouve le code antibot crypté. Pour afficher ma captcha j'ai juste à utiliser une balise img : Code: <img src="captcha.php" width="80" height="16" alt="captcha"/> -Avec un formulaire je récupère alors le code tapé par l'utilisateur (par exemple dans une balise texte nommé captcha : Code: <input type="text" name="captcha" value="" size="5" maxlength="5" /> Puis je verifie dans un script de verification de formulaire : Code: $captcha=$_post['captcha']; $captcha=strtolower($captcha); //la session etant en minuscule je met tout en minuscule (insensible à la casse); if(sha1($captcha)!=$_SESSION['captcha']) { //le code n'est pas bon } else { // le code est bon } Voila en espérant que ça en aide. Tchao |
| # Posté le 28/12/2010 à 20h58 | |
Rang: administrateur |
Bonjour. Merci beaucoup de faire partager ce bout de code. Les robots de spams étant si dérangeants, un tel tutoriel est bien pratique. J'ai une toute petite suggestion d'amélioration. Il peut être judicieux de retirer le "o" (la lettre) et "0" (le chiffre) pour éviter d'éventuelles erreurs. J'espère que ce script est efficace. ![]() Ma page préférée? Le dossier référencement qui présente une multitude d'informations utiles.
Sinon hors internet je suis développeur web PHP. |
| # Posté le 30/12/2010 à 18h45 | |
Rang: membre |
Oui on peut enlever le 'o' et le '0' par contre il faudra les enlever des fonts, sur cette font on distingue bien le '0' qui a une barre au milieu. |

