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

cerede2000 Messages postés 71 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 6 septembre 2013 - 27 mai 2007 à 01:08
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 27 mai 2007 à 17:02
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 mai 2007 à 17:02
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
greenzest Messages postés 6 Date d'inscription jeudi 15 juin 2006 Statut Membre Dernière intervention 27 mai 2007
27 mai 2007 à 12:05
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 ;)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 mai 2007 à 03:15
<?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;
}
?>
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
27 mai 2007 à 02:49
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
cerede2000 Messages postés 71 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 6 septembre 2013
27 mai 2007 à 01:08
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...
Rejoignez-nous