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 !

PROTÉGER LES FORMULAIRES DES ROBOTS GRÂCE A UNE IMAGE.


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Débutant Date de création : 08/02/2005 Date de mise à jour : 10/02/2005 14:22:42 Vu / téléchargé: 5 921 / 756

Note :
8,6 / 10 - par 5 personnes
8,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Cliquez pour voir la capture en taille normale
C'est un script qui permet de créer une image avec des chiffres et des lettres dynamiquement pour vérifier que c'est bien un humain qui écrit ;).
Vous en avez surment déjà vu, je crois que pour l'inscription au forum IPB y en a une. Bon d'abors renseigné-vous, vous devez posséder la librairie GD, peu d'Hébergeur gratuit en dispose, pour savoir sa faites un phpinfo().

10/02:  Voila je l'ai amélioré en suivant vos conseil, les changements sont: une police perso, le création aleatoires de points de différentes couleurs, la création de 2 lignes verte qui se place aléatoirement, le code qui se décale horizontalement et verticalement aléatoirement (:d ) et l'amelioraiton de la page de validation.
Enjoy !
Merci pour vos remarque, faites en autant cette fois ci ;)
 

Source

  • <?PHP
  • #########
  • # image.php#
  • #########
  • session_start(); //on demarre les sessions
  • $image = imagecreate(100,25); //On créer une image de 100 px sur 25
  • $gris = imagecolorallocate($image,230,230,230); //gris
  • $noir = imagecolorallocate($image,0,0,0); //noir
  • $bleu = imagecolorallocate($image,0,0,255); //bleu
  • $rouge = imagecolorallocate($image,255,0,0); //rouge
  • $vert = imagecolorallocate($image,0,255,0); //vert
  • imagefill($image,0,0,$gris); //on la rempli de gris
  • $nbr = rand(235684,999999); //on génére un nombre
  • $md5 = md5($nbr); //on le code en md5
  • $code = substr($md5,0,8); //on le limite a 8 caracteres
  • $_SESSION['code'] = $code;
  • $font = imageloadfont("8x13iso.gdf"); //on insere un police
  • $x = mt_rand(15,20);
  • $y = mt_rand(0,7);
  • imagestring($image,$font,$x,$y,$code,$noir); //on écrit sur l'image
  • $pointb = 1;
  • while($pointb <= 50) // Boucle pour faire 50 point bleu
  • {
  • $x = mt_rand(0,100);
  • $y = mt_rand(0,25);
  • ImageSetPixel($image, $x, $y, $bleu);
  • $pointb++;
  • }
  • $pointn = 1;
  • while($pointn <= 50) // Boucle pour faire 50 point noir
  • {
  • $x = mt_rand(0,100);
  • $y = mt_rand(0,25);
  • ImageSetPixel($image, $x, $y, $noir);
  • $pointn++;
  • }
  • $pointr = 1;
  • while($pointr <= 50) // Boucle pour faire 50 point rouge
  • {
  • $x = mt_rand(0,100);
  • $y = mt_rand(0,25);
  • ImageSetPixel($image, $x, $y, $rouge);
  • $pointr++;
  • }
  • $ligne = 1;
  • while($ligne <= 2) //Tracer 2 lignes
  • {
  • $x1 = mt_rand(0,100);
  • $y1 = mt_rand(0,25);
  • $x2 = mt_rand(0,100);
  • $y2 = mt_rand(0,25);
  • ImageLine($image, $x1, $y1, $x2, $y2, $vert);
  • $ligne++;
  • }
  • imagepng($image); //on dessine l'image
  • ?>
  • form.html
  • <html>
  • <head>
  • </head>
  • <body>
  • <div align="center">
  • <img src="image.php"/>
  • <form action="valide.php" method="post" name="code">
  • Tapez ce qu'il y a sur l'image au dessus: <input name="code" type="text">
  • <input name="Envoyer" type="submit" value="Envoyer">
  • </form>
  • </div>
  • </body>
  • </html>
  • valide.php
  • <?
  • //valide.php
  • session_start(); //On demarre la session.
  • $code = $_SESSION['code'];
  • //On simplifie les variables.
  • $code1 = $_POST['code'];
  • if(isset($code1) && !empty($code1))
  • {
  • if($code == $code1) //On test si le code qui a été tapé correspond au vrai code
  • {
  • echo "code bon !!"; //Si oui on dit qu'il est bon
  • }
  • else
  • {
  • echo "code mauvais"; //Sinon on dit qu'il est mauvais.
  • }
  • }
  • else
  • {
  • echo "Vous avez accédé a cette page illégalement où vous n'avez tapé aucun code, réesayez.";
  • }
  • ?>
<?PHP
#########
# image.php#
#########

session_start();    //on demarre les sessions

$image = imagecreate(100,25); //On créer une image de 100 px sur 25

$gris = imagecolorallocate($image,230,230,230); //gris

$noir = imagecolorallocate($image,0,0,0); //noir

$bleu = imagecolorallocate($image,0,0,255); //bleu

$rouge = imagecolorallocate($image,255,0,0); //rouge

$vert = imagecolorallocate($image,0,255,0); //vert

imagefill($image,0,0,$gris); //on la rempli de gris

$nbr = rand(235684,999999); //on génére un nombre

$md5 = md5($nbr); //on le code en md5

$code = substr($md5,0,8); //on le limite a 8 caracteres

$_SESSION['code'] = $code;

$font = imageloadfont("8x13iso.gdf"); //on insere un police

$x = mt_rand(15,20);
$y = mt_rand(0,7);

imagestring($image,$font,$x,$y,$code,$noir); //on écrit sur l'image

$pointb = 1;

while($pointb <= 50) // Boucle pour faire 50 point bleu
{
$x = mt_rand(0,100);
$y = mt_rand(0,25);
ImageSetPixel($image, $x, $y, $bleu);
$pointb++;
}

$pointn = 1;

while($pointn <= 50) // Boucle pour faire 50 point noir
{
$x = mt_rand(0,100);
$y = mt_rand(0,25);
ImageSetPixel($image, $x, $y, $noir);
$pointn++;
}


$pointr = 1;

while($pointr <= 50) // Boucle pour faire 50 point rouge
{
$x = mt_rand(0,100);
$y = mt_rand(0,25);
ImageSetPixel($image, $x, $y, $rouge);
$pointr++;
}

$ligne = 1;

while($ligne <= 2) //Tracer 2 lignes
{
$x1 = mt_rand(0,100);
$y1 = mt_rand(0,25);
$x2 = mt_rand(0,100);
$y2 = mt_rand(0,25);
ImageLine($image, $x1, $y1, $x2, $y2, $vert);
$ligne++;
}


imagepng($image); //on dessine l'image

?>

form.html

<html>
<head>
</head>

<body>
<div align="center">
<img src="image.php"/>

<form action="valide.php" method="post" name="code">
Tapez ce qu'il y a sur l'image au dessus: <input name="code" type="text">
<input name="Envoyer" type="submit" value="Envoyer">
</form>
</div>
</body>
</html>

valide.php

<?
//valide.php

session_start(); //On demarre la session.

$code = $_SESSION['code'];
//On simplifie les variables.
$code1 = $_POST['code'];    

if(isset($code1) && !empty($code1))
{
	if($code == $code1) //On test si le code qui a été tapé correspond au vrai code
	{
		echo "code bon !!"; //Si oui on dit qu'il est bon
	}
	else
	{
		echo "code mauvais"; //Sinon on dit qu'il est mauvais.
	}
}
else
{
	echo "Vous avez accédé a cette page illégalement où vous n'avez tapé aucun code, réesayez.";
}

?>

Conclusion

Ce code n'est pas infaillible ;) il est sencée être le plus simple possible.
 

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

10 février 2005 14:22:46 :
10/02: Voila je l'ai amélioré en suivant vos conseil, les changements sont: une police perso, le création aleatoires de points de différentes couleurs, la création de 2 lignes verte qui se place aléatoirement, le code qui se décale horizontalement et verticalement aléatoirement (:d ) et l'amelioraiton de la page de validation. Enjoy ! Merci pour vos remarque, faites en autant cette fois ci ;)

Commentaires et avis

signaler à un administrateur
Commentaire de Anthomicro le 08/02/2005 21:01:13

Salut,

<? est à remplacer par <?php, ensuite il manque des isset() pour tester l'existence des variables...

Bref c'est pas codé correctement.

a +

signaler à un administrateur
Commentaire de fyav le 09/02/2005 10:46:27

aurait tu un petit aperçu
car je pense que ton image est trop facilement déchiffrable par un robot (un barre en diagonale ne suffit pas à "crytper" ton image, c'est plutôt considéré comme un parasite non important)

signaler à un administrateur
Commentaire de iomega le 09/02/2005 14:27:18

Hello et bravo pour ta source.
Moi je trouve quelle est très intéressante ta source
et cela marche par contre cela m'affiche en haut de la page ceci "&#8240;PNG  IHDRdýPLTEæææ1úmËhIDATx½c` ;øQÃ`¤ÿùo0&#8225;±çÃi&#710;32&#8225;M´±ýìã0ÏBÆ&#732;'/!yT.±Áà0T_}&#402;a3¼&#8212; !Á`Ì̵ÁpO¦ó &uml;íòì&#8225;1ÐëD4¹uÕÜZIEND®B`&#8218;
Sais-tu le pourquoi ?
j'ai une autre question
Ta source on peut l'utiliser dans quelle cas de situation ?
peux-tu me donner des exemples
merci a+

l

signaler à un administrateur
Commentaire de iomega le 09/02/2005 16:41:25

Re Hello
A quoi cela sert d'ajouter une ligne en diagonales sur l'image a part que ce soir moins lisible
merci a+

signaler à un administrateur
Commentaire de coucou747 le 09/02/2005 17:00:58

Salut
iomega, je te conseille de lire le nom des fichiers...

image.php retourne une image et non du texte html...

essai de lire avant de critiquer, c'est évident comme méthode...

Ensuite, j'ai vu mieux comme technique : usage de polices perso (plus dificilement déchifrables par les robots) et décalages en x et y aléatoires... + parasites, de la même couleur que le texte...

signaler à un administrateur
Commentaire de iomega le 09/02/2005 17:10:06

Salut coucou747,
Aucunement je n'ai voulu critiqué son travail
le commentaire pour la diagonale sur l'image c'est une question.
Je ne comprends a quoi cela sert car je suis novice en php
D'ailleurs j'en profite pour te poser la question
Merci de ton aide
A+

signaler à un administrateur
Commentaire de coucou747 le 09/02/2005 17:14:32

mais la diagonale est faite ici pour empècher les robots de comprendre ce qui est écrit sur l'image...

signaler à un administrateur
Commentaire de iomega le 09/02/2005 17:19:16

Ah ok,
apparement c'est pas assez efficace la diagonale y-a-t-il mieux ? en utilisant son code source ?
merci encore pour ton aide

signaler à un administrateur
Commentaire de coucou747 le 09/02/2005 18:41:17

mieux, bah inscrit toi sur hotmail....

son code, bah je crois qu'il est comment dire... simplet...

signaler à un administrateur
Commentaire de malik7934 le 09/02/2005 20:14:44

je me posais la question suivante: est-ce que plutôt que de générer  une image avec 8 caractères, ce ne serait pas plus perturbant pour un robot de voir 8 images différentes, espacée par un petit dessin par exemple, avec 1 seul caractère? Je ne vois pas très bien comment fonctionne ces robots...

Coucou747, ça avance la stégano?!

signaler à un administrateur
Commentaire de fyav le 09/02/2005 20:24:07

oui c'est aussi une bonne idée, mais le meilleur est de brouiller l'image façon "incription à hotmail" et ça ce n'est lisible que par l'oeil humain
mailk7934: pour répondre à ta question ce type de "robots" sont en fait des systèmes OCR= reconnaissance de caractère, qui sont très courants dans les logiciels de scan (d'ailleur souvent fournis en bundle)

signaler à un administrateur
Commentaire de iomega le 10/02/2005 07:44:50

Bonjour à tous,
j'ai une question pour fyav je n'ai pas compris lorsque tu dis qu'il faut brouiller l'image facon "inscription...
as-tu un exemple
merci beaucoup
A+

signaler à un administrateur
Commentaire de fyav le 10/02/2005 08:33:09

va sur www.hotmail.com et créé toi une adresse email  (donc ouvre un compte)
en bas du formulaire d'inscription, on te demande de taper le code que tu vois dans l'image: c'est une image cryptée.

signaler à un administrateur
Commentaire de Anthomicro le 12/02/2005 13:01:21

Salut,

<? ET <?PHP sont à remplacer par <?php en minuscules...

Ensuite ton code HTML :

<body>
<div align="center">
<img src="image.php"/>

<form action="valide.php" method="post" name="code">
Tapez ce qu'il y a sur l'image au dessus: <input name="code" type="text">
<input name="Envoyer" type="submit" value="Envoyer">
</form>
</div>
</body>
</html>


à remplacer par ça (j'ai pas mis le doctype mais c'est un extrait) :

<body style="text-align:center">
<img src="image.php" />
<form action="valide.php" method="post">
<p>Tapez ce qu'il y a sur l'image au dessus: <input name="code" type="text" />
<input type="submit" value="Envoyer" /></p>
</form>
</body>

a ++

signaler à un administrateur
Commentaire de Anthomicro le 12/02/2005 13:03:35

Pareil ça c'est inutile et source d'erreurs :

$code = $_SESSION['code'];
//On simplifie les variables.
$code1 = $_POST['code'];    

if(isset($code1) && !empty($code1))

Tu auras une erreur de undefined si $_POST['code'] n'existe pas...

Donc if(isset($_POST['code']) AND !empty($_POST['code']))

a +

signaler à un administrateur
Commentaire de grandvizir le 12/02/2005 18:28:47

L'antiflood par les images sont testables (par exemple) dans Hotmail, Altavista ou les Blogs de CS. Pour ces derniers on peut dire que c'est très réussi... ;)

signaler à un administrateur
Commentaire de diaoul29 le 15/02/2005 23:03:46

à changer:

imagepnp($image, "image.png")

<img src="image.png"/>

c'est plus propre...

signaler à un administrateur
Commentaire de grandvizir le 17/02/2005 18:57:17

imagepnp => imagepng, peut-être ?

signaler à un administrateur
Commentaire de coucou747 le 17/02/2005 22:15:28

gne
faut pas confondre le html et le php...

signaler à un administrateur
Commentaire de diaoul29 le 17/02/2005 23:26:48

imagepnp => imagepng, peut-être ?

oui, pardon....

signaler à un administrateur
Commentaire de bailly_remy le 04/03/2005 11:37:45

Bonjour,

J'ai modifié cette source pour créer en fait un menu avec des images au contenu "dynamique".

Le pb est que cela ne marche pas avec firefox.

Je voudrais pouvoir utiliser des polices pour personaliser le menu, mais celles ci sont au format .TTF et ca me dis
Warning: imageloadfont(): Error reading font.

Est on obligé d'utiliser des polices .gdf  ?

merci

signaler à un administrateur
Commentaire de bailly_remy le 04/03/2005 11:38:21

Bonjour,

J'ai modifié cette source pour créer en fait un menu avec des images au contenu "dynamique".

Le pb est que cela ne marche pas avec firefox.

Je voudrais pouvoir utiliser des polices pour personaliser le menu, mais celles ci sont au format .TTF et ca me dis
Warning: imageloadfont(): Error reading font.

Est on obligé d'utiliser des polices .gdf  ?

merci

signaler à un administrateur
Commentaire de Anthomicro le 04/03/2005 12:35:03

Il te faut installer freetype ;-)

a ++

signaler à un administrateur
Commentaire de nicolasdu83 le 25/09/2005 11:22:02

Ca marche très bien !
Bravo !!!

signaler à un administrateur
Commentaire de mjmica le 23/03/2006 11:43:58

je viens de l'installer sans problème.
Je comprend que les robots ne puissent pas trop lire le texte car moi même j'ai bien du mal...
Est il possible de grossir la taille de la police ??

signaler à un administrateur
Commentaire de Barbitoris le 20/06/2006 11:22:50

"Est il possible de grossir la taille de la police ??"
(c'est vrai que c'est tout petit ... je vais essayé par moi même de remédier à ce problème)


Sinon ça marche très bien merci ...Simple et efficace ! :D

signaler à un administrateur
Commentaire de metis15 le 23/12/2006 22:22:16

Ca me semble bien ce truc, j'ai essayé, ça marche.
Mais le code à copier est minuscule.
Je suis niveau zéro en codage.
Est-ce possible d'avoir le code à copier en plus gros ?
Merci pour les tuyaux.

signaler à un administrateur
Commentaire de martinaur le 07/04/2007 15:05:57

Bonjour,
j'ai juste une petite question, c'est peut être une betise mais bon...
voila, es ce qu'il serait pas plus simple d'enregistrer quelques images avec par exemple un chien ou un chat, et en mettre une au hasard et demander qu'es qu'on voit.. les robots ne doivent pas pouvoir decrypter l'image si?
Enfin voila c'est juste par curiosité :)

A++

signaler à un administrateur
Commentaire de fyav le 07/04/2007 16:02:46

l'idée de l'image d'un chien ou d'un chat est très bonne, le seul détail c'est qu'il faut prévoir ce que va taper le visiteur :
ex: l'image d'un chien : le visiteur peut taper :
chien, caniche, chienne, toutou, etc..
Il faut trouver des images qui ne peuvent pas avoir plusieurs significations ....
de plus tu limite les possibilités de codage à quelques noms communs, donc faciles à craquer !
comparer à un code à XX chiffres et lettres mélangées !

signaler à un administrateur
Commentaire de Maxime33 le 02/12/2007 23:46:07

Bon code, cela dit j'ai un ptit souci:
Je dois retaper le code 2 à 3 fois avant qu'il soit validé, alors que je tape le bon code.
D'où cette probabilité d'erreurs vient-elle svp? Thanks

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

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,63 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é.