Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CAPTCHA ( ANTI-SPAM, ANTI-ROBOT )


Information sur la source

Catégorie :Sécurité & Cryptage Classé sous : captcha, antispam, antirobot, sécurité Niveau : Débutant Date de création : 25/04/2007 Date de mise à jour : 25/04/2007 18:02:02 Vu / téléchargé: 7 961 / 885

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Génération d'une image pour anti-robot/anti-spam

A chaque chargement de la page, voici ce qui change :

1/ La couleur de fond
2/ La chaîne de caractère
3/ La couleur de chaque caractère ( plus foncé que la couleur de fond dans tous les cas )
4/ La police de chaque caractère
5/ L'angle de chaque caractère
6/ La taille de chaque caractère
7/ La position vertical de chaque caractère

Aucun caractère sort de l'image.
De temps en temps il y a des chiffres qui se chevauchent suivant l'angle, le chiffre, sa taille et sa position, mais ça reste dans 99% des cas, lisible. ( pour ma part )
 

Source

  • <?php
  • session_start();
  • srand(); //initialisation du générateur mais plus obligatoire > PHP 4.2
  • // Définition du content-type
  • header("Content-type: image/png");
  • $lettres = 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');
  • $code = $lettres[rand(0,25)].rand(100,1000000);
  • $longueurcode = strlen($code);
  • $_SESSION['code'] = $code; //pour pouvoir tester si le code saisie est bien égal à celui saisie ;)
  • $largeur = $longueurcode * 25;
  • $hauteur = 40;
  • $image = imagecreatetruecolor($largeur, $hauteur);
  • $couleurfond = imagecolorallocate($image, rand(150,255),rand(150,255),rand(150,255));
  • imagefilledrectangle($image, 0, 0, $largeur, $hauteur, $couleurfond);
  • $fontchiffre = array('1.ttf','2.ttf');
  • $fontlettre = array('3.ttf');
  • imagettftext($image, rand(15,30), rand(-45,15), 10, 35, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontlettre[0], $code[0]);
  • for ($i = 1; $i < $longueurcode; $i++)
  • {
  • $largeurx = 20 * $i + 30;
  • $hauteury = rand(25,40);
  • imagettftext($image, rand(27,32), rand(0,45), $largeurx,$hauteury, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontchiffre[rand(0,1)], $code[$i]);
  • }
  • imagepng($image); //génère l'image
  • imagedestroy($image); //détruit l'image
  • ?>
<?php
session_start();

srand(); //initialisation du générateur mais plus obligatoire > PHP 4.2

// Définition du content-type
header("Content-type: image/png");

$lettres = 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');

$code = $lettres[rand(0,25)].rand(100,1000000); 
$longueurcode = strlen($code);

$_SESSION['code'] = $code; //pour pouvoir tester si le code saisie est bien égal à celui saisie ;)

$largeur = $longueurcode * 25;
$hauteur =  40;

$image = imagecreatetruecolor($largeur, $hauteur);

$couleurfond = imagecolorallocate($image, rand(150,255),rand(150,255),rand(150,255));

imagefilledrectangle($image, 0, 0, $largeur, $hauteur, $couleurfond);

$fontchiffre = array('1.ttf','2.ttf');
$fontlettre = array('3.ttf');

imagettftext($image, rand(15,30), rand(-45,15), 10, 35, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontlettre[0], $code[0]);

for ($i = 1; $i < $longueurcode; $i++) 
{
    $largeurx = 20 * $i + 30;
    $hauteury = rand(25,40);
    imagettftext($image, rand(27,32), rand(0,45), $largeurx,$hauteury, imagecolorallocate($image, rand(10,100) ,rand(10,100),rand(10,100)), $fontchiffre[rand(0,1)], $code[$i]);
}

imagepng($image); //génère l'image
imagedestroy($image); //détruit l'image

?>

Conclusion

Un petit truc avec la police 3.ttf, elle s'affiche en majuscule, alors que la lettre est en minuscule, mais bon ça, c'est le créateur de la police qui a voulu tout mettre en majuscule, la seule différence, c'est que la lettre est inversé pour les majuscules.. ><
Pour ma part, vu que j'ai mis que des minuscules, lors du test, j'utilise la fonction php strtolower() pour le code saisie.

Voilà voilà, si quelqu'un arrive a bousillé mon captcha, si c'était possible qu'il me le fasse savoir pour que je puisse l'améliorer.
C'est ma première source que je poste ici, en espérant qu'elle puisse aider des personnes.

Si vous avez des questions, ou des critiques, n'hésitez pas.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

25 avril 2007 09:55:09 :
Modification dans la présentation du code.
25 avril 2007 17:59:59 :
Ajout du zip ><
25 avril 2007 18:02:02 :
Ajout du zip ><

Commentaires et avis

signaler à un administrateur
Commentaire de maxroucool le 25/04/2007 23:36:34

J'étais justement en train de chercher un captcha et c'est le seul de ceux que j'ai trouvé qui soit simple, codé en quelques lignes et lisible!
Tres bien, j'ai juste changé les polices pour en mettre des plus basiques (arial, courrier, times) car je ne les trouve pas tres lisibles les tiennes.

signaler à un administrateur
Commentaire de wizad le 26/04/2007 00:45:42

Comme d'habitude ce système posent d'énorme problème notamment pour les déficients visuel. Mais bon  on finit par s'y habituer. De plus il existe déja de nombreuse captcha. Ah et au fait l'attribut alt n'est pas là pour faire joli. ;)

signaler à un administrateur
Commentaire de WanaDien le 26/04/2007 00:56:41

Maxroucoul : Ouais pour les polices je suis d'accord, mais c'était les seules que je trouvais "gommées" donc plus difficile à détecter pour les robots, mais après chacun à le choix de prendre la police qu'il souhaite :)

Wizad : Oui pour le visuel je suis d'accord, c'est pour ça que quand j'aurai le temps, je ferrai une version audio, cependant la police peut être changer là, c'est pas très difficile ....
Je met rien dans l'attribut alt car ça sert à rien de préciser que c'est l'image du code a recopié, étant donné que quand le formulaire en général tu mets "Recopier le code si dessous" et que l'image tu l'as met en dessous ... Après chacun est libre de mettre ou pas un commentaire au passage de la souris sur l'image.
Et si je supprime l'attribut alt, ce n'est plus valide en xhtml strict.


Cordialement. Sullivan.

signaler à un administrateur
Commentaire de wizad le 26/04/2007 01:03:34

bon je vais chipoter un peu : un fichier xhtml strict nécéssite que tous les attributs alt soit présent et correctement remplis. Pour une raison toute bete : il arrive pour n'importe quel raison d'être amené à utiliser des navigateur en mode text. Il est toujours intérréssant de savoir qu'il s'agit d'une captcha (et d'ailleur qu'il vaux mieux chercher un autre site vu qu'on pourra pas lire l'image).

signaler à un administrateur
Commentaire de WanaDien le 26/04/2007 01:14:29

lol, tu cherches vraiment la petite bête :p
Mais même s'il n'y a rien dans le contenu de "alt", ça reste valide xhtml strict, donc c'est qu'il n'y a pas de soucis.
Dans un formulaire tu précises : "recopier le code dans l'image si dessous", donc tu as pas besoin de rajouter que l'image est une captcha, car c'est préciser au dessus, que tu sois sur un navigateur en text ou pas. Après chacun son avis.
Le champs alt, personnellement, je le remplis quand je précise rien sur l'image, sinon ça fait trop, et j'aime pas ><, après si vraiment c'est obligatoire à 100% de préciser, bah je le ferrai, mais personne m'en avait fait la remarque, ni même mes profs, donc, j'ai conclus que ce n'était pas grave de rien préciser dans le alt.

signaler à un administrateur
Commentaire de neigedhiver le 29/04/2007 21:26:59

Salut,

"Après chacun est libre de mettre ou pas un commentaire au passage de la souris sur l'image."
Euh... le commentaire au passage de la souris, c'est l'attribut title, qui lui, est optionnel.
Quitte à pinailler encore un peu plus : sans l'attribut alt, ce n'est pas valide XHTML transitional, frameset et strict.

Citation :
**********
Mozilla Firefox and the alt Attribute

If you use the alt attribute in Firefox on images and image maps the text will not show on mouse-over as in other browsers.

Firefox uses the alt attribute the way it's meant to be used, like an alternative text if the image won't load, not as a mouse-over text.

Firefox does support mouse-over comments on images or image maps if you use a title attribute in the <img> tag.

E.g. <img src="image.gif" alt="bla" title="bla bla bla"
**********
Source : http://www.w3schools.com/tags/tag_img.asp

Mais c'était juste pour pinailler, hein ;)

signaler à un administrateur
Commentaire de masterofquebec le 22/05/2007 20:15:17

10/10, Mais comment puige l'inclure dans mon script d'upload ?
j'ai le fichier add.php qui est le formulaire et un autre qui est upload.php (c'est lui qui fais la vérification) ?

signaler à un administrateur
Commentaire de jabirmed le 27/06/2008 01:38:56

merci pour le code
mais comment changer les polices vers arial, courrier, times ?

merci d'avance

signaler à un administrateur
Commentaire de WanaDien le 27/06/2008 12:24:43

Tu mets tes polices dans le dossier du captcha

Et tu modifies ses lignes :

# $fontchiffre = array('1.ttf','2.ttf');
# $fontlettre = array('3.ttf');

A la place de 1.ttf, par exemple tu mets nom_de_ta_police.tff

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Sécurité [ par thebigbang ] Bonjout,Je suis webmaster et je voudrais sécurisé, enfin c'est une facon de parler, un peu plus mon site ...il conmporte un dossier "admin" et lorsque quand on parle sécurité [ par Tomcube ] Oui, nous ne vivons pas dans un monde sans criminels !! ^^ (me prenez pas pour un débile lol) Et sur internet les criminels c les hackers. Donc pour l Sécurité-fichiers-dossiers [ par stageSAP ] Bonjour,Pour mon site, je protège l'accès aux pages grâce aux variables de sessions et cela marche très bien. Je travaille en local pour l'instant. Su Sécurité pour un script de commentaires !!! et droits d'auteur?? [ par perig ] BonjourJe suis désolé, je n'ai pas fini de vous embêter avec mes questions !!!! Voilà la question du jour :J'ai crée un script qui pe avertissement de sécurité [ par mojira ] comment fait on pour provoquer une boite de dialogue nommée avertissement de sécurité?celle ci se produit quand un site propose d'installer et d' exé Sécurité de travail [ par Trigun222 ] Salut,Je me suis trouvé une passion, c'est l'infographie et l'informatique en général, j'aimerais bien m'y engager et avoir un métier là dedans, mais Question sécurité [ par zzzzzz ] Salut j'ai un formulaire et une zone de texte.J'aimerai savoir si il est necessaire de filtré les touches. voir si il y a pas de &lt; par exemple ? j Question de sécurité [ par zzzzzz ] Salutj'ai pas mal de page en php. Je me demandais quels sont les risques rééls sur les url. genre on rajoute un code apres l'url ? on pourrai ainsi in Sécurité & Cryptage des sources [ par GregPeck ] Bonjour,Je viens de créer à ma boite un logiciel de gestion de planning en php mysql sur un serveur linux. Les gens peuvent créer leur planning sur no $_SERVER['SERVER_NAME'] sécurité ? [ par inconnuanonyme ] SalutJe touche un peu au php et voici ma question :supposons que je possède un site chez free :http://site.free.frsur lequel se trouve l'index index.p


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.