CAPTCHA, GENERATEUR UNE IMAGE AVEC LE CODE VOULUT ( SYSTEME ANTISPAM )

Signaler
Messages postés
71
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
6 septembre 2013
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
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/42855-captcha-generateur-une-image-avec-le-code-voulut-systeme-antispam

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
en y reflechissant, dans mon code, ceci :
for ($i=0;$i<$x;$i++){
for ($j=0;$j<$y;$j++){
$a = imagecolorat($img, $i, $j);
if (!is_text($a)){
imageline($img, $i, $j, $i, $j, $w);
}
}
}
n'est meme pas obligatoire
Messages postés
6
Date d'inscription
jeudi 15 juin 2006
Statut
Membre
Dernière intervention
27 mai 2007

Hmmm ok. Merci à tout les deux pour vos interventions, vraiment interessant ton code coucou747 c'est vrai que du mon image est vraiment super facile à contourner... Je posterai pas un nouveau code catpcha "amélioré" ( avec par exemple le systeme de questions ou operations mathematiques simple ) puisqu'il y en a déjà de très bien sur phpcs.

A bientôt tout le monde ;)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
<?php
function is_text($a){
$r = $a / 65536;
$v = ( $a / 256 ) % 256;
$b = $a % 256;
return !($r>100 && $v>100 && $b> 100);
}

$img=imageCreateFromjpeg('1q9yb.png')
or die('erreur');
$w = ImageColorAllocate ($img, 255, 255, 255);
$bl = ImageColorAllocate ($img, 0, 0, 0);
$x=imagesX($img);
$y=imagesy($img);
for ($i=0;$i<$x;$i++){
for ($j=0;$j<$y;$j++){
$a = imagecolorat($img, $i, $j);
if (!is_text($a)){
imageline($img, $i, $j, $i, $j, $w);
}
}
}
$text_width = imagefontwidth(5);
$text_height = imagefontheight(5);
$py=ceil($y-$text_height)/2-1;
$chaine = 'abcdefghijklmnpqrstuvwxy123456789';
for ($i=0;$i<5;$i++){
$max=$x*$y;
$px= ceil($x-5*$text_width)/2+$i*$text_width*2+1;
//imagerectangle($img, $px-2*$text_width, $py, $px-$text_width, $py+$text_height-1, $bl);
//si tu veux t'amuser a cerner tes lettres...
for ($j=0;$j<strlen($chaine);$j++){
$image = imagecreatetruecolor($x, $y);
$white = imageColorAllocate($image, 255, 255, 255);
$black = imageColorAllocate($image, 0, 0, 0);
imageFill($image, 0, 0, $white);
imageString($image, 5, $px-2*$text_width, $py, $chaine[$j], $black);
$compare=0;
for ($k=$px-2*$text_width; $k<$px-$text_width; $k++){
for ($l=$py; $l<$py+$text_height-1; $l++){
$a = imagecolorat($img, $k, $l);
$b = imagecolorat($image, $k, $l);
if (is_text($a)!=is_text($b)){
$compare++;
}
}
}
if ($compare<$max){
$lettre=$chaine[$j];
$max=$compare;
}
}
echo $lettre;
}
?>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
if ($r>100 && $v>100 && $b> 100){
polution
}else{
texte
}
c'est disons un debut, mais en aucun cas une protection (et evitez le troll la protection parfaite n'existe pas, car je ne suis pas un geni, alors si j'arrive a la passer, beaucoup d'autres le peuvent)

cerede2000, t'as des images tres compliquees a lire...
http://www.phpcs.com/codes/CAPTCHA-VISUELLE_42607.aspx ca c'est pas mal par exemple (enfin perso, j'y passerais plus d'une nuit, et je ne ferais pas un algo a la rache comme ce que je peux faire ici...)

la, l'ecriture est droite, avec une police classique, ensuite, savoir ou sont positionnes les caracteres c'est un jeux d'enfant... differentier les caracteres de la polution aussi...

je posterais probablement plus tard un code qui renvoi le texte a partir d'une de ces image
Messages postés
71
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
6 septembre 2013

Malheureusement ce système n'est plus antispam... Les robots sont capable de lire des images comme celle que tu génère ;)
Pour un système réellement antispam il faut utiliser d'autre méthode, comme poser des questions simple, demander ne description d'image...