IMAGE ANTI-SPAM AGRÉABLE À LIRE ET À REGARDER

Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012 - 9 avril 2007 à 13:15
goliath2 Messages postés 3 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 25 novembre 2009 - 2 oct. 2009 à 01:29
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/42137-image-anti-spam-agreable-a-lire-et-a-regarder

goliath2 Messages postés 3 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 25 novembre 2009
2 oct. 2009 à 01:29
Merci SurfMaths, c'est bien çà.

Le code suivant marche bien :

Ce n'était pas une question de header.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 oct. 2009 à 20:23
... ou qu'il faut mettre un header sur ton image...
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
1 oct. 2009 à 10:37
Non, c'est surtout qu'en fait il te faut faire :
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 oct. 2009 à 08:24
il te manque un header
goliath2 Messages postés 3 Date d'inscription lundi 24 novembre 2003 Statut Membre Dernière intervention 25 novembre 2009
1 oct. 2009 à 02:13
J'ai repris le même code, mais je n'arrive pas à le faire marcher.

L'affichage donne quelque chose d'illisible comme ceci :

‰PNG  ??? IHDR?? ???@???5b=9?? ?IDATxœœwxEû>þÌì! PB‹t•Þ”ªÅWÅ.Š€"ÒA€7@é5Ò€7‘šÔ€ HéœB gLöæÞÙð~Ÿ×o¯\¹ö왝yÊý”yfvÚ»éPrr²RJDêׯïºnjjªëº 4‘äääúõ맀€(¥ÌIœzõ”R)))"âºnýúõÍGs‹¹^¯^œ””Óƒùª~ýú"¢”r]׎1çæDDÌ]"bF7íÍ¡”JNN‘ ˜\Ç@ÉÉÉfts£áÂœðuÐiøÂXfà éÜœ7hÐÀu]C¡éÄ|=žÀ@ÜØ y¢1è1çõêÕ³„)1mšñuîÚ„šŒ¡s»aÓ\„ÍÐFŒ¬ôúõëCÚÅšÃ|eN˜?ÜnX㱘٠H ÑØoÆÂG–0«ÏtÈT™P.ˆä‹AÌ3HXÔFDАÆrVŸ û<ƒnœ?4Œžp8¬µ6݁84VJ…Ãas¹n”b TC¢Õ9Ì T™\ŠÊŽÑZ‡Ãat¡h­M·ž¹C‘†xš

Que ce passe - t - il ?

J'ai bien mis le fichier .ttf au même endroit que mon script...

Mon code est le suivant :

<? include "mot.inc.php"; ?>

Je n'ai rien touché au code...

Merci pour votre aide.

David
David
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
17 juin 2007 à 01:11
Oui, je comprend mieu maintenant la méthode.
En fait on filtre l'image pour ne faire resortir que les détails importants. Puis on crée une base de donnée contenant tous les caractères qui ont été trouvés avec leurs images. Il faut donc faire apprendre au système tous les caractères puis une fois cet apprentissage effectué il se débrouille tout seul. Le but du filtre est d'enlever le maximum d'aléatoire tout en conservant le caractère intacte. Donc ce qu'il faut c'est mettre tellement d'aléatoire dans l'image qu'il sera difficile de faire un tel filtre sans perdre l'information.
Déjà, mon système de couleur doit être amélioré pour qu'il soit plus difficile de séparer les caractères du fond de l'image. Ensuite je donne plus d'amplitude aux rotations des lettres et le maximum pour les translations. Une police plus manuscrite et plus fine serais aussi la bienvenue. Une déformation plus poussée finaliserais le travail.
Enfin bon, pour le moment je n'ai pas le temps de m'y atteler. Mais la prochaine fois ce sera bien plus efficace.
Merci de ta participation.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 juin 2007 à 16:04
prende une police plus fine aussi...

mon tableau $tab=array(...
est bien trop court pour lire ton image a chaque fois, il est chiant a remplire, les parties commentees le prermettent, mais bon... j'ai montre ce que je voulais montrer, ca me suffit
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
8 juin 2007 à 14:49
Effectivement, ton script arrive a lire correctement mon image 1 fois sur 20.
C'est un faible rendement mais bien suffisant pour nuire.
Je n'ai pas compris comment il fonctionne mais il a apparement des difficultés avec les rotations.
Le plus simple pour éviter ton script serais donc d'augmenter l'amplitude de la rotation de lettres.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juin 2007 à 23:48
cd deux commentaires plus haut... si tu appliques le programme que j'ai poste, bah tu verras que mon programme "lit" ton image
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
1 juin 2007 à 23:21
Heu, comment çà c'est cassé ? Je vois pas du tout de cassage moi. Peut être me faut il des lunettes.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 mai 2007 à 08:54
bon, moi je mets 4 car c'est pas expert et que c'est casse
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 mai 2007 à 08:52
<?php

function compare($a, $b){
$r=0;
for ($i=0;$i<strlen($a);$i++){
if ($a[$i]!=$b[$i]){
$r++;
}
}
return $r;
}

function is_text($a){
global $c1r, $c1v, $c1b;
$r = $a / 65536;
$v = ( $a / 256 ) % 256;
$b = $a % 256;
return ! ( abs($r-$c1r)<64 && abs($v-$c1v)<64 && abs($b-$c1b)<64 );
}

$img=imageCreateFrompng('4.png')
or die('erreur');
$w = ImageColorAllocate ($img, 255, 255, 255);
$bl = ImageColorAllocate ($img, 0, 0, 0);
$x=imagesX($img);
$y=imagesy($img);

$a = imagecolorat($img, 0, 0);
$c1r = $a / 65536;
$c1v = ( $a / 256 ) % 256;
$c1b = $a % 256;

//just pour y voir plus clair
for ($i=0;$i<$x;$i++){
for ($j=0;$j<$y;$j++){
$a = imagecolorat($img, $i, $j);
if (!is_text($a)) imageSetpixel($img, $i, $j, $w);
else imageSetpixel($img, $i, $j, $bl);
}
}


$chars=array();
$sl=false;
for ($i=0;$i<$x;$i++){
$freecol=true;
for ($j=0;$j<$y;$j++){
if (imagecolorat($img, $i, $j)==$bl){
$freecol=false;
break;
}
}
if ($freecol){
if ($sl!==false){
if ($sl!=$i-1)
$chars[]=array('startX'=>$sl, 'endX'=>$i, 'startY'=>0, 'endY'=>$y-1);
$sl=false;
}
}else if ($sl===false){
$sl=$i;
}
}
foreach ($chars as $a=>$b){
$j=0;
$freeline=true;
while($freeline){
for ($i=$b['startX'];$i<$b['endX'];$i++){
if (imagecolorat($img, $i, $j)==$bl){
$freeline=false;
break;
}
}
$j++;
}
$chars[$a]['startY']=$j;
$j=$y-1;
$freeline=true;
while($freeline){
for ($i=$b['startX'];$i<$b['endX'];$i++){
if (imagecolorat($img, $i, $j)==$bl){
$freeline=false;
break;
}
}
$j--;
}
$chars[$a]['endY']=$j;
}

$npts=array('X'=>6, 'Y'=>8);

$tab=array(
array('H'=>'00000000,00001111,11111000,00001100,00011111,00110000,'),
array('Z'=>'00000000,01000000,01011111,01111111,11000001,00000001,00000001,'),
array('A'=>'00000001,00001111,00111110,01110010,01111110,00000111,'),
array('T'=>'10000000,11100000,11111111,01111001,11000000,01000000,'),
array('Y'=>'00000000,11111000,01011100,00011111,00110000,00000000,'),
array('M'=>'00000000,01111110,11111000,00001100,00011001,00111111,'),
array('N'=>'00000100,00111111,01110000,00111110,00001111,01110011,'),
array('S'=>'00010000,01111001,01101001,11011001,01001101,01000111,'),
array('Y'=>'01000000,11000000,01111101,00011111,00111000,00110000,'),
array('S'=>'00100001,00111111,11111001,11001001,01001101,01101111,'),
array('E'=>'01100000,01110000,01011111,01011011,01000001,00011001,'),
array('U'=>'00101000,11111111,00000111,00000000,00111011,00100110,00000000,'),
array('2'=>'00100000,01000000,01000011,01111111,11100101,00000011,'),
array('I'=>'00000000,01000000,11100001,01110111,01111111,10010011,00000011,'),
array('C'=>'00000100,00001111,01111001,11100001,01000001,01100001,'),
array('I'=>'01000000,11000000,01100001,01111101,01011111,11001001,00000001,'),
array('B'=>'00001000,00011110,11111011,01101001,11011111,01110111,'),
array('U'=>'00100000,11111000,00011111,00000001,11111011,10011111,00000000,'),
array('P'=>'01000000,11111010,11111111,11101100,01111100,00111000,'),
array('S'=>'00000000,00100011,01111001,11011001,01001111,00100110,00000100,'),
array('M'=>'01000000,01111111,01111100,00001100,11111000,11111111,'),
array('P'=>'00000000,01111111,11110100,01100100,11111000,00110000,')

);

foreach ($chars as $a=>$b){
$chars[$a]['pts']='';
for ($i=$b['startX'];$i<$b['endX']; $i+=($b['endX']-$b['startX'])/$npts['X']){
for ($j=$b['startY'];$j<$b['endY']; $j+=($b['endY']-$b['startY'])/$npts['Y']){
if (imagecolorat($img, $i, $j)==$bl){
$chars[$a]['pts'].='1';
}else{
$chars[$a]['pts'].='0';
}
}
$chars[$a]['pts'].=',';
}
$min=100000;
foreach ($tab as $e){
list($c, $d)=each($e);
$d=compare($d, $chars[$a]['pts']);
if ($d<$min){
$min=$d;
$l=$c;
}
}
echo $l;
//echo '\''.$chars[$a]['pts'].'\', '."\n";
}

header('Content-type:image/jpeg');
imagejpeg($img);
?>


voila pourquoi....
sur ce, ici, l'alphabet est restreint, et je dois avouer qu'il est 9h, et que ca fait 5h que je suis dessus... (mais j'ai pris mon temps), avec une plus grosse base de donnee, on aurait plus d'empryntes de lettres... si on prennait aussi des 1 ou des 0 pour deux points qui se joignent, ca pourrait donner un truc plus fiable, mais bon... j'ai montre ce que j'avais a montrer...
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
17 avril 2007 à 17:53
Tu peux quand même m'expliquer pourquoi tu pretends avoir un lib qui casse mon captcha
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 avril 2007 à 17:36
desole, je n'ai plus le temps de jouer a ca, et surtout pas pour chaque source de ce genre...
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
15 avril 2007 à 16:36
Moi je dit que si tu arrive à casser cette image je te félicite mais le hic pour toi ca sera que les paramètres peuvent êtres changés facilement. Evidement que l'on peut facilement séparer les lettres mais elles sont déformées, tournées décalées et brouillées. Donc bonne chance.

Je sais que c'est fesable mais le but c'est de le rendre difficile.
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
10 avril 2007 à 15:07
J'ai beau analyser ton code, je ne le comprends pas.
Peux-tu m'expliquer en gros ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 avril 2007 à 13:25
iow4 :

<?php
function newreq($req, &$session, $host='www.vulgarisation-informatique.com', $port=80, $re=true){
$sock=fsockopen($host, $port) or die('no connection');
fputs($sock, $req);
$result='';
if ($re){
while ($a=fgets($sock)){
$result.=$a;
}
if (false!==($a=strpos($result, 'Set-Cookie'))){
$a=substr($result, $a+strlen('set-Cookie: '));
$a=substr($a, 0, strpos($a, ';'));
$session.='
Cookie: '.$a;
}
return $result;
}
}


function post($host, $page, $post){
$session='';
$result=newreq('POST '.$page.' HTTP/1.1'."\r\n".
'Host: '.$host."\r\n".
'Content-Type: application/x-www-form-urlencoded'."\r\n".
'Content-Length: '.strlen($post)."\r\n\r\n".
$post."\r\n\r\n"
, $session, $host, 80, false);
return $result;
}

?>

voila la lib qui casse ton site en 2 minutes
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
10 avril 2007 à 12:57
Pour le moment aucun y est arrivé et je ne pense pas que quelqu'un créerais un bot spécialement pour mon site :d
C'est sur que c'est simple à cracker : question toujours identique etc
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 avril 2007 à 00:23
iow4, pour un bot cible, je dirais que ... ta protexion est ineficace (mais alors totalement)
Mon script, il cassait specifiquement les images generes par le script d'antho :) c'est en php, le captcha d'antho a change, donc je vous montre le code
http://www.phpcs.com/code.aspx?ID=42153
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
9 avril 2007 à 23:35
Le mieux reste encore la question mathématique très simple comme "combien fait 2+2"
ça marche sur mon site.
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
9 avril 2007 à 22:42
Un captcha visuel texte c'est quand même 1 000 fois mieux :)
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
9 avril 2007 à 21:11
Oui par la technique de reconnaissance des characteres après apprentissage, le bot doit avoir une grande base de connaissance.

Sinon coucou747 tu avais codé en quoi ton soft ? Est-il sous license Open Source ?

C'est intéressant.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
9 avril 2007 à 20:08
chaque fois que je vois ca, ca me donne vraiment envie de faire la partie du bot qui passe la securite :) je l'ai faite pour le site d'anthomicro :)

la, tu peux separer chaque lettre facilement, j'ai pas le temp de coder un truc pour te montrer que c'est attaquable, mais si tu separes les lettres facilement, alors ton script est disons limite...
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
9 avril 2007 à 19:29
Heu, y a une screen...
Au pire tu va sur mon site, y a le script en fonctionnement : http://surfmaths.free.fr/
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
9 avril 2007 à 17:31
c'est dommage qu'il y est pas une petite screen.
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
9 avril 2007 à 15:29
J'ai oublié de préciser que pour des questions de sécurité il vaut mieu que tu mette la variable $autoriser=0; pour éviter que les robots aient acces aux paramètres.
Si non tous devrais marcher.
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
9 avril 2007 à 15:23
Leur code source est compliqué puisqu'ils n'utilisent pas la librairie GD mais la modification se fait facilement.
En fait (dans phpBB 2.2) il faut remplacer dans le fichier 'phpBB2/includes/usercp_confirm.php' a partir de la ligne 69 jusqu'à la fin par ce code source.
Après tu change $mot=""; par $mot=$code;
Et enfin tu place la police TTF que tu veut utiliser dirrectement dans le dossier phpBB2 (ou du moins le dossier racine du forum)
J'ai testé, çà marche nikel.
SurfMaths Messages postés 12 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 1 octobre 2009
9 avril 2007 à 14:35
Si tu veut je me renseigne sur le sujet et j'essaie de l'implémenter dans les forums phpbb. La plus part du temps on stocke le mot dans une session mais il se peut qu'ils le fassent par l'intermédiaire de la base de donnée MySQL
Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012
9 avril 2007 à 13:15
Bonjour, belle realisation, avec le TTF.. j'ai fais la meme chose.. mais comment implementer dans le forum de phpbb par example.. j'ai regarder le code.. et c pas evident..
Rejoignez-nous