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 3D ISO & LECTURE DE FONT CONSOLE


Information sur la source

Catégorie :Maths & Algorithmes Classé sous : captcha, spam, verification, flood, 3d Niveau : Initié Date de création : 13/12/2007 Date de mise à jour : 20/08/2008 17:20:58 Vu / téléchargé: 5 560 / 211

Note :
9 / 10 - par 5 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Cliquez pour voir la capture en taille normale
ceci permet d'afficher un texte en relief sur une map en 3d iso (sur le principe des tilemaps mais sans tile)

pour l'afficher, on utilise une police de fichier de console, ces polices ne sont pas tres difficiles a lire, les 4 premiers octets ne servent a rien, ensuite, un octet code une ligne d'un caractere (un bit a 1 dit qu'il y a un point) 8 octets codent un caractere.

un conseil : le texte a placer ici doit-etre un mot parce-que sinon, la lisibilite sera mauvaise (l'exemple presente ici affiche des caracteres aleatoires et non un mot aleatoire)

demo en ligne ici http://eelte.megami.fr/test.php
explications supplementaires ici : http://eelte.megami.fr/

la meme source mais traduite en python ici : http://www.pythonfrance.com/codes/CAPTCHA-3D-ISOMETRIQUE_47676.aspx (elle n'est pas de moi.)

 

Source

  • <?php
  • define('PI', 3.141592754);
  • function evoluer(&$val, $i){
  • $val-=$i*2;
  • }
  • /**
  • * @brief renvoie une matrice de hauteurs qui correspond a l'affichage de la chaine de caractere
  • * @param $alphabet le contenu du fichier de font
  • * @param $chaine la chaine a transposer
  • * @param $h la hauteur du texte
  • * @param $h2 la hauteur des ondes
  • * @param $CANGLE l'angle des vagues
  • * @param $CX le coef en X des vagues
  • * @param $CY le coef en Y des vagues
  • * @param $phy l'ajout dans les cos
  • * @return int**
  • **/
  • function getmatrice($alphabet, $chaine, $h=5, $h2=3, $CANGLE=0.055, $CX=0.5, $CY=1, $phy=1){
  • $limX=16*(strlen($chaine)+1);
  • $a = array_fill(0, $limX, 0);
  • // les deformation en vagues
  • for ($k=0;$k<20;$k++){
  • for ($i=0;$i<$limX;$i++){
  • $array[$k][$i]=(
  • cos(($i*$CY+$k*$CX*PI)*$CANGLE +$phy) *
  • sin(($i*$CY+$k*$CX*PI)*$CANGLE +$phy)
  • )*$h2*7;
  • }
  • }
  • $l=strlen($chaine);
  • for ($k=1;$k<=$l;$k++){
  • for ($i=0;$i<8;$i++){
  • for ($j=7;$j>=0;$j--){
  • if (ord($alphabet[$i+4+ord($chaine[$k-1])*8]) & (1<<$j)){
  • evoluer($array[$i*2+2][$k*16+9-$j*2], $h);
  • evoluer($array[$i*2+3][$k*16+9-$j*2], $h);
  • evoluer($array[$i*2+2][$k*16+10-$j*2], $h);
  • evoluer($array[$i*2+3][$k*16+10-$j*2], $h);
  • }
  • }
  • }
  • }
  • return $array;
  • }
  • function getColor($matrice, $couleur){
  • return $couleur * (10-$matrice/3)/10;
  • }
  • /**
  • * @brief affiche la matrice en 3d isometrique
  • * @param $matrice la matrice a afficher
  • * @param $image l'image dans laquelle on dessine
  • * @param $couleur la couleur des trais
  • * @param $white la couleur de fond
  • * @param $a l'angle de vue du plan 3d iso
  • * @param $dx le "scale" en abscisse
  • * @param $dy le "scale" en ordonnee
  • * @param $by le decalage en ordonnee
  • */
  • function iso3dmatrice($matrice, $image, $couleur, $white, $a, $dx=4, $dy=8, $by=10){
  • $sinA=sin($a);
  • $cosA=cos($a);
  • $limx=count($matrice[0])-1;
  • $limy=count($matrice)-1;
  • for ($y=0;$y<$limy;$y++){
  • for ($x=1;$x<$limx;$x++){
  • $a=array(
  • ($x+$y*$cosA)*$dx, $by+$matrice[$y][$x]+($y+$x*$sinA)*$dy,
  • ($x+1+$y*$cosA)*$dx, $by+$matrice[$y+1][$x]+($y+1+$x*$sinA)*$dy,
  • ($x+1+(1+$y)*$cosA)*$dx, $by+$matrice[$y+1][$x+1]+($y+1+($x+1)*$sinA)*$dy,
  • ($x+(1+$y)*$cosA)*$dx, $by+$matrice[$y][$x+1]+($y+($x+1)*$sinA)*$dy
  • );
  • imagefilledpolygon(
  • $image,
  • $a,4, 0xffffff
  • );
  • imagepolygon(
  • $image,
  • $a,4, $couleur
  • );
  • }
  • }
  • }
  • /**
  • * @brief sert a avoir une chaine aleatoire
  • * @return une chaine de 5 caracteres aleatoires
  • */
  • function randSTR(){
  • $alphabet=strtoupper('bcdefghjklmnpqstuvwxyz');
  • $out='';
  • $l=strlen($alphabet)-1;
  • for ($i=0;$i<5;$i++){
  • $out.=$alphabet[mt_rand(0, $l)];
  • }
  • return $out;
  • }
  • $txt=randstr();
  • $rand=mt_rand(0, 0x00FFFF);
  • // VOUS DEVEZ INSERER ICI VOTRE CODE D'ENREGISTREMENT DE $txt et $rand EN SESSION.
  • // on decompose rand en 6 rands ayant pour valeurs, des valeurs comprises entre 0 et 3 (sur 2 bits donc)
  • $rand1=($rand & 0x000003); // ----0011 3
  • $rand2=($rand & 0x00000C) >> 2 ; // ----1100 12 -> C
  • $rand3=($rand & 0x000030) >> 4 ; // 0011----
  • $rand4=($rand & 0x0000C0) >> 6 ; // 1100----
  • $rand5=($rand & 0x000300) >> 8 ;
  • $rand6=($rand & 0x000C00) >> 10;
  • define ('DX', 63 * strlen($txt));
  • define ('DY', 250);
  • $img=imageCreateTrueColor(DX, DY);
  • $white = imagecolorallocate($img, 255, 255, 255);
  • imagecolortransparent($img, $white);
  • $black = imagecolorallocate($img, 0, 0, 255);
  • imagefilledrectangle($img, 0, 0, DX, DY, $white);
  • $alphabet=file_get_contents('alt-8x8.psf');
  • if (isset($rand))
  • $matrice=getmatrice($alphabet, $txt, 3+5/($rand1+1), ($rand2+2), $CANGLE=0.1/($rand3/3+3), ($rand4+3)/5, ($rand5+10)/6, PI*2/($rand1+1));
  • else{
  • $matrice=getmatrice($alphabet, $txt);
  • $rand1=1;
  • }
  • iso3dmatrice($matrice, $img, $black, $white, PI/200*($rand1+2),3,5,20);
  • if (isset($_GET['resizeX']) && isset($_GET['resizeY'])){
  • $b=imageCreateTrueColor($_GET['resizeX'], $_GET['resizeY']);
  • $white = imagecolorallocate($b, 255, 255, 255);
  • imagecolortransparent($b, $white);
  • imagefilledrectangle($b, 0, 0, $_GET['resizeX'], $_GET['resizeY'], $white);
  • imageCopyResized($b, $img, 0, 0, 0, 0, $_GET['resizeX'], $_GET['resizeY'], DX, DY);
  • $img=$b;
  • }
  • header('content-type:image/png');
  • imagepng($img);
  • ?>
<?php

define('PI', 3.141592754);

function evoluer(&$val, $i){
	$val-=$i*2;
}

/**
* @brief renvoie une matrice de hauteurs qui correspond a l'affichage de la chaine de caractere
* @param $alphabet le contenu du fichier de font
* @param $chaine la chaine a transposer
* @param $h la hauteur du texte
* @param $h2 la hauteur des ondes
* @param $CANGLE l'angle des vagues
* @param $CX le coef en X des vagues
* @param $CY le coef en Y des vagues
* @param $phy l'ajout dans les cos
* @return int**
**/
function getmatrice($alphabet, $chaine, $h=5, $h2=3, $CANGLE=0.055, $CX=0.5, $CY=1, $phy=1){

	$limX=16*(strlen($chaine)+1);

	$a = array_fill(0, $limX, 0);

	// les deformation en vagues
	for ($k=0;$k<20;$k++){
		for ($i=0;$i<$limX;$i++){
			$array[$k][$i]=(
				cos(($i*$CY+$k*$CX*PI)*$CANGLE +$phy) *
				sin(($i*$CY+$k*$CX*PI)*$CANGLE +$phy)
			)*$h2*7;
		}
	}

	$l=strlen($chaine);

	for ($k=1;$k<=$l;$k++){
		for ($i=0;$i<8;$i++){
			for ($j=7;$j>=0;$j--){
				if (ord($alphabet[$i+4+ord($chaine[$k-1])*8]) & (1<<$j)){
						evoluer($array[$i*2+2][$k*16+9-$j*2], $h);
						evoluer($array[$i*2+3][$k*16+9-$j*2], $h);
						evoluer($array[$i*2+2][$k*16+10-$j*2], $h);
						evoluer($array[$i*2+3][$k*16+10-$j*2], $h);

				}
			}
		}
	}
	return $array;
}


function getColor($matrice, $couleur){
	return $couleur * (10-$matrice/3)/10;
}

/**
* @brief affiche la matrice en 3d isometrique
* @param $matrice la matrice a afficher
* @param $image l'image dans laquelle on dessine
* @param $couleur la couleur des trais
* @param $white la couleur de fond
* @param $a l'angle de vue du plan 3d iso
* @param $dx le "scale" en abscisse
* @param $dy le "scale" en ordonnee
* @param $by le decalage en ordonnee
*/
function iso3dmatrice($matrice, $image, $couleur, $white, $a, $dx=4, $dy=8, $by=10){
	$sinA=sin($a);
	$cosA=cos($a);

	$limx=count($matrice[0])-1;
	$limy=count($matrice)-1;

	for ($y=0;$y<$limy;$y++){
		for ($x=1;$x<$limx;$x++){
			$a=array(
				($x+$y*$cosA)*$dx, $by+$matrice[$y][$x]+($y+$x*$sinA)*$dy,
				($x+1+$y*$cosA)*$dx, $by+$matrice[$y+1][$x]+($y+1+$x*$sinA)*$dy,
				($x+1+(1+$y)*$cosA)*$dx, $by+$matrice[$y+1][$x+1]+($y+1+($x+1)*$sinA)*$dy,
				($x+(1+$y)*$cosA)*$dx, $by+$matrice[$y][$x+1]+($y+($x+1)*$sinA)*$dy
			);
			imagefilledpolygon(
				$image,
				$a,4, 0xffffff
			);
			imagepolygon(
				$image,
				$a,4, $couleur
			);
			

		}
	}
}

/**
* @brief sert a avoir une chaine aleatoire
* @return une chaine de 5 caracteres aleatoires
*/
function randSTR(){
	$alphabet=strtoupper('bcdefghjklmnpqstuvwxyz');
	$out='';
	$l=strlen($alphabet)-1;
	for ($i=0;$i<5;$i++){
		$out.=$alphabet[mt_rand(0, $l)];
	}
	return $out;
}
	$txt=randstr();
	$rand=mt_rand(0, 0x00FFFF);

// VOUS DEVEZ INSERER ICI VOTRE CODE D'ENREGISTREMENT DE $txt et $rand EN SESSION.

// on decompose rand en 6 rands ayant pour valeurs, des valeurs comprises entre 0 et 3 (sur 2 bits donc)
	$rand1=($rand & 0x000003);			// ----0011  3
	$rand2=($rand & 0x00000C) >> 2 ;		// ----1100  12 -> C
	$rand3=($rand & 0x000030) >> 4 ;		// 0011----
	$rand4=($rand & 0x0000C0) >> 6 ;		// 1100----
	$rand5=($rand & 0x000300) >> 8 ;
	$rand6=($rand & 0x000C00) >> 10;


define ('DX', 63 * strlen($txt));
define ('DY', 250);



$img=imageCreateTrueColor(DX, DY);
$white = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $white);
$black = imagecolorallocate($img, 0, 0, 255);

imagefilledrectangle($img, 0, 0, DX, DY, $white);


$alphabet=file_get_contents('alt-8x8.psf');
if (isset($rand))
	$matrice=getmatrice($alphabet, $txt, 3+5/($rand1+1), ($rand2+2), $CANGLE=0.1/($rand3/3+3), ($rand4+3)/5, ($rand5+10)/6, PI*2/($rand1+1));
else{
	$matrice=getmatrice($alphabet, $txt);
	$rand1=1;
}

iso3dmatrice($matrice, $img, $black, $white, PI/200*($rand1+2),3,5,20);

if (isset($_GET['resizeX']) && isset($_GET['resizeY'])){
	$b=imageCreateTrueColor($_GET['resizeX'], $_GET['resizeY']);
	$white = imagecolorallocate($b, 255, 255, 255);
	imagecolortransparent($b, $white);
	imagefilledrectangle($b, 0, 0, $_GET['resizeX'], $_GET['resizeY'], $white);
	imageCopyResized($b, $img, 0, 0, 0, 0, $_GET['resizeX'], $_GET['resizeY'], DX, DY);
	$img=$b;
}

header('content-type:image/png');
imagepng($img);

?>

Conclusion

l'accessibilite est reduite car certaines personnes ne peuvent pas lire les reliefs
 

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

14 décembre 2007 21:48:24 :
corrections, et ameliorations en tout genre
29 mars 2008 16:10:37 :
amelioration de la lisibilite, de la securite, correction d'une erreur dans la formule de 3d iso (j'avais un +1 qui n'etait pas dans une parenthese et qui aurait du, ca decalait le haut de toutes les lignes de quelques pixels, ca ne se voyait pas beaucoup, mais ca diminuait la lisibilite un petit peu), ajout des imagepolygones, ce qui annule la superposition de cases (les bots ne peuvent pas calculer une "densite" de bleu pour avoir des indices)
15 mai 2008 20:12:45 :
ameliorations diverses
20 août 2008 17:20:58 :
lien vers la source en python

Commentaires et avis

signaler à un administrateur
Commentaire de codefalse le 14/12/2007 00:10:24 administrateur CS

je sais pas vous, mais perso ton image, j'arrive pas à lire ce que c'est. Et en tant que visiteur, si je doit valider en écrivant ce qui ya dans ton image pour poster ou m'inscrire, j'abandonnerai :/

signaler à un administrateur
Commentaire de kankrelune le 14/12/2007 01:22:56 6/10

Assez illisible pour un captcha il faut l'avouer... d'autant plus si tu as une vue imparfaite... mais l'utilisation de la 3D je dis chapeau... .. .

Par contre ce qui me plais moins c'est...

for ($i=0;$i<=8*strlen($chaine)+2;$i++){
$a[]=0;
}

rooo voyons...

for($i=0,$j=8*strlen($chaine)+2;$i<=$j;$i++){
$a[]=0;
}

ou encore...

$a = array_fill(0, 8*strlen($chaine)+2, 'banana');

pareil pour...

for ($y=0;$y<count($matrice)-1;$y++){
   for ($x=0;$x<count($matrice[0])-1;$x++){

==>

for ($y=0,$c=count($matrice)-1;$y<$c;$y++){
    for ($x=0,$l=count($matrice[0])-1;$x<$l;$x++){

Là c'est sous réserve toujours est il que j'aurais plutot fais

$cos=cos($a);
$sin=sin($a);
imageline($image,
    ($x+$y*$cos)*$dx, $matrice[$y][$x]+($y+$x*$sin($a))*$dy,
    ($x+1+$y*$cos)*$dx, $matrice[$y][$x+1]+($y+($x+1)*$sin)*$dy,
    $couleur);

au lieu de

imageline($image,
    ($x+$y*cos($a))*$dx, $matrice[$y][$x]+($y+$x*sin($a))*$dy,
    ($x+1+$y*cos($a))*$dx, $matrice[$y][$x+1]+($y+($x+1)*sin($a))*$dy,
    $couleur);

pourquoi ne pas intégrer getmatrice() à iso3dmatrice(), voir même les fusionner... y a t'il un intérêt à sauvegarder la matrice dans une variable extérieur... pour la remodifier ou autre... si ce n'est pas le cas autant fusionner les deux... .. ?

pour finir à quoi correspond l'argument $a... ça manque de commentaire... le fond y est mais un petit manque dans la forme... .. . ;o)

6/10

@ tchaOo°

signaler à un administrateur
Commentaire de kankrelune le 14/12/2007 01:25:10

oups...

=> $a = array_fill(0, 8*strlen($chaine)+2, 0);

résidu de copier collé... lol... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de coucou747 le 14/12/2007 02:12:57

getmatrice te donne une matrice de hauteur qui correspond a la chaine, iso3dmatrice permet d'afficher cette matrice, il est tres important de les separer, elles ne font pas la meme chose, et les deux peuvent etre utiles dans d'autres scripts.

c'est vrai que j'ai pas commente ca, et que je n'ai pas optimise les boucles

$a est l'angle de decalade en 3d iso

signaler à un administrateur
Commentaire de malalam le 14/12/2007 18:56:23 administrateur CS

Hello,

je ne suis pas non plus convaincu pour un captcha, mais en tous cas l'effet est très sympa. Et le code est court, très sympa :-)

signaler à un administrateur
Commentaire de coucou747 le 14/12/2007 21:51:23

je crois avoir tennu compte de tout les commentaires sur cette mise a jours, vous trouvez ca plus lisible comme ca ?

signaler à un administrateur
Commentaire de codefalse le 14/12/2007 22:47:48 administrateur CS

yééé !! ca commence à etre vraiment très interessant !! :)
Bien joué d'avoir mis l'image à jour aussi ;)

Ca me plait déjà plus personnellement pour un captcha :)
Par contre, une question, est-ce que l'on peux arreter le voilage ?

# * @param $h2 la hauteur des ondes
# * @param $CANGLE l'angle des vagues
# * @param $CX le coef en X des vagues
# * @param $CY le coef en Y des vagues

Si cela permet de modifier l'inclinaison, le "voilage" et tout, alors jte met un 10 :) ta source est nikel ! :)

signaler à un administrateur
Commentaire de coucou747 le 14/12/2007 22:56:24

pour l'arreter :

* @param $h2 la hauteur des ondes

il suffit de mettre ce parametre a 0, on obtient alors :

$matrice=getmatrice($alphabet, randstr(), 10, 0);

signaler à un administrateur
Commentaire de codefalse le 15/12/2007 00:16:15 administrateur CS 10/10

Alors ca vaut vraiment le coup ! :)
10/10 :)
Surtout pour avoir fait une mise à jour :)

signaler à un administrateur
Commentaire de coucou747 le 15/12/2007 06:45:07

heureusement que j'ai mis a jours, c'etait (un peu) fait a la rache avant :)

signaler à un administrateur
Commentaire de kankrelune le 15/12/2007 20:55:31

Rien à redire si ce n'est une petite question... pourquoi définir une constante PI plutot qu'utiliser la constante M_PI... .. ?

@ tchaOo°

signaler à un administrateur
Commentaire de coucou747 le 15/12/2007 21:07:54

par fleme de chercher le nom de la constante

signaler à un administrateur
Commentaire de chankalan le 17/12/2007 10:21:20 10/10

bravo !
je trouve assez illisible dans les paramétrages par défaut, mais en jouant un peu on arrive à faire ce qu'on veut... chapeau

signaler à un administrateur
Commentaire de bobatheboss le 27/06/2008 18:46:31 9/10

Bravo à toi !

Ton code est désormais utilisé par rapidshare.com !
(enfin il reprenne la technique en tout cas...)

Tu a touché les droit d'auteur au moins ;) ?

Bravo et merci de nous faire partager la technique.

PS: Compte tu continuer à développer ton code ?
Améliorer la sécurité, ajouter un permaban IP/FAI pour les bots, un ban minutes pour les nuls, un lecteur flash/wav ou mp3 pour les handicapés, un bouton actualisé, etc...

Donc 9/10 et je mettrais 10 quand il y aura une version complète de chez complète !

signaler à un administrateur
Commentaire de coucou747 le 27/06/2008 20:01:34

c'est pas tellement eux qui reprennent la technique...

sinon, un captcha ne doit pas bannir, le captcha ne fait que differencier un humain d'un bot, il ne ban pas.

pour la version handicapes, il faut plusieurs captchas, et pas un seul.

signaler à un administrateur
Commentaire de GillesWebmaster le 05/08/2008 12:00:40 10/10

Gros effort tant au niveau programmation, que au niveau exécution du script pour un résultat mitigé puisque difficilement lisible!
Mais la technique reste parfaitement maîtrisée et très intéressante!

signaler à un administrateur
Commentaire de laurentmerlin le 19/11/2008 23:16:41

hello, il me manque les fichiers psf.
où puis-je les trouver ?

merci,
Laurent.

signaler à un administrateur
Commentaire de laurentmerlin le 19/11/2008 23:29:44

ok j'ai trouvé le font ici
Le package ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz

le fichier s'ouvre avec win rar, mais il me reste cette erreur

Warning: Cannot modify header information - headers already sent by (output started at F:\users\httpdocs\captcha.php:1) in F:\users\httpdocs\captcha.php on line 159

besoin d'une petit coup de pouce ;-)

signaler à un administrateur
Commentaire de coucou747 le 19/11/2008 23:32:25

sous linux

max@max-desktop:/usr/share/consolefonts$ ls
Arabic-Fixed15.psf.gz             Lat15-Terminus16.psf.gz
Arabic-Fixed16.psf.gz             Lat15-Terminus20x10.psf.gz
Arabic-VGA14.psf.gz               Lat15-Terminus24x12.psf.gz
Arabic-VGA16.psf.gz               Lat15-Terminus28x14.psf.gz
Arabic-VGA8.psf.gz                Lat15-Terminus32x16.psf.gz
Armenian-Fixed13.psf.gz           Lat15-TerminusBold12x6.psf.gz
Armenian-Fixed14.psf.gz           Lat15-TerminusBold14.psf.gz
Armenian-Fixed15.psf.gz           Lat15-TerminusBold16.psf.gz
Armenian-Fixed16.psf.gz           Lat15-TerminusBold20x10.psf.gz
Armenian-Fixed18.psf.gz           Lat15-TerminusBold24x12.psf.gz
CyrAsia-Fixed13.psf.gz            Lat15-TerminusBold28x14.psf.gz
CyrAsia-Fixed14.psf.gz            Lat15-TerminusBold32x16.psf.gz
CyrAsia-Fixed15.psf.gz            Lat15-TerminusBoldVGA14.psf.gz
CyrAsia-Fixed16.psf.gz            Lat15-TerminusBoldVGA16.psf.gz
CyrAsia-Fixed18.psf.gz            Lat15-VGA14.psf.gz
CyrAsia-Terminus12x6.psf.gz       Lat15-VGA16.psf.gz
CyrAsia-Terminus14.psf.gz         Lat15-VGA8.psf.gz
CyrAsia-Terminus16.psf.gz         Lat2-Fixed13.psf.gz
CyrAsia-Terminus20x10.psf.gz      Lat2-Fixed14.psf.gz
CyrAsia-Terminus24x12.psf.gz      Lat2-Fixed15.psf.gz
CyrAsia-Terminus28x14.psf.gz      Lat2-Fixed16.psf.gz
CyrAsia-Terminus32x16.psf.gz      Lat2-Fixed18.psf.gz
CyrAsia-TerminusBold12x6.psf.gz   Lat2-Terminus12x6.psf.gz
CyrAsia-TerminusBold14.psf.gz     Lat2-Terminus14.psf.gz
CyrAsia-TerminusBold16.psf.gz     Lat2-Terminus16.psf.gz
CyrAsia-TerminusBold20x10.psf.gz  Lat2-Terminus20x10.psf.gz
CyrAsia-TerminusBold24x12.psf.gz  Lat2-Terminus24x12.psf.gz
CyrAsia-TerminusBold28x14.psf.gz  Lat2-Terminus28x14.psf.gz
CyrAsia-TerminusBold32x16.psf.gz  Lat2-Terminus32x16.psf.gz
CyrAsia-TerminusBoldVGA14.psf.gz  Lat2-TerminusBold12x6.psf.gz
CyrAsia-TerminusBoldVGA16.psf.gz  Lat2-TerminusBold14.psf.gz
CyrKoi-Fixed13.psf.gz             Lat2-TerminusBold16.psf.gz
CyrKoi-Fixed14.psf.gz             Lat2-TerminusBold20x10.psf.gz
CyrKoi-Fixed15.psf.gz             Lat2-TerminusBold24x12.psf.gz
CyrKoi-Fixed16.psf.gz             Lat2-TerminusBold28x14.psf.gz
CyrKoi-Fixed18.psf.gz             Lat2-TerminusBold32x16.psf.gz
CyrKoi-Terminus12x6.psf.gz        Lat2-TerminusBoldVGA14.psf.gz
CyrKoi-Terminus14.psf.gz          Lat2-TerminusBoldVGA16.psf.gz
CyrKoi-Terminus16.psf.gz          Lat2-VGA14.psf.gz
CyrKoi-Terminus20x10.psf.gz       Lat2-VGA16.psf.gz
CyrKoi-Terminus24x12.psf.gz       Lat2-VGA8.psf.gz
CyrKoi-Terminus28x14.psf.gz       Lat38-Fixed13.psf.gz
CyrKoi-Terminus32x16.psf.gz       Lat38-Fixed14.psf.gz
CyrKoi-TerminusBold12x6.psf.gz    Lat38-Fixed15.psf.gz
CyrKoi-TerminusBold14.psf.gz      Lat38-Fixed16.psf.gz
CyrKoi-TerminusBold16.psf.gz      Lat38-Fixed18.psf.gz
CyrKoi-TerminusBold20x10.psf.gz   Lat38-VGA14.psf.gz
CyrKoi-TerminusBold24x12.psf.gz   Lat38-VGA16.psf.gz
CyrKoi-TerminusBold28x14.psf.gz   Lat38-VGA8.psf.gz
CyrKoi-TerminusBold32x16.psf.gz   Lat7-Fixed13.psf.gz
CyrKoi-TerminusBoldVGA14.psf.gz   Lat7-Fixed14.psf.gz
CyrKoi-TerminusBoldVGA16.psf.gz   Lat7-Fixed15.psf.gz
CyrKoi-VGA14.psf.gz               Lat7-Fixed16.psf.gz
CyrKoi-VGA16.psf.gz               Lat7-Fixed18.psf.gz
CyrKoi-VGA8.psf.gz                Lat7-Terminus12x6.psf.gz
CyrSlav-Fixed13.psf.gz            Lat7-Terminus14.psf.gz
CyrSlav-Fixed14.psf.gz            Lat7-Terminus16.psf.gz
CyrSlav-Fixed15.psf.gz            Lat7-Terminus20x10.psf.gz
CyrSlav-Fixed16.psf.gz            Lat7-Terminus24x12.psf.gz
CyrSlav-Fixed18.psf.gz            Lat7-Terminus28x14.psf.gz
CyrSlav-Terminus12x6.psf.gz       Lat7-Terminus32x16.psf.gz
CyrSlav-Terminus14.psf.gz         Lat7-TerminusBold12x6.psf.gz
CyrSlav-Terminus16.psf.gz         Lat7-TerminusBold14.psf.gz
CyrSlav-Terminus20x10.psf.gz      Lat7-TerminusBold16.psf.gz
CyrSlav-Terminus24x12.psf.gz      Lat7-TerminusBold20x10.psf.gz
CyrSlav-Terminus28x14.psf.gz      Lat7-TerminusBold24x12.psf.gz
CyrSlav-Terminus32x16.psf.gz      Lat7-TerminusBold28x14.psf.gz
CyrSlav-TerminusBold12x6.psf.gz   Lat7-TerminusBold32x16.psf.gz
CyrSlav-TerminusBold14.psf.gz     Lat7-TerminusBoldVGA14.psf.gz
CyrSlav-TerminusBold16.psf.gz     Lat7-TerminusBoldVGA16.psf.gz
CyrSlav-TerminusBold20x10.psf.gz  Lat7-VGA14.psf.gz
CyrSlav-TerminusBold24x12.psf.gz  Lat7-VGA16.psf.gz
CyrSlav-TerminusBold28x14.psf.gz  Lat7-VGA8.psf.gz
CyrSlav-TerminusBold32x16.psf.gz  Thai-Fixed13.psf.gz
CyrSlav-TerminusBoldVGA14.psf.gz  Thai-Fixed14.psf.gz
CyrSlav-TerminusBoldVGA16.psf.gz  Thai-Fixed15.psf.gz
CyrSlav-VGA14.psf.gz              Thai-Fixed16.psf.gz
CyrSlav-VGA16.psf.gz              Thai-Fixed18.psf.gz
CyrSlav-VGA8.psf.gz               Uni1-Fixed15.psf.gz
Ethiopian-Fixed15.psf.gz          Uni1-Fixed16.psf.gz
Ethiopian-Fixed18.psf.gz          Uni1-VGA14.psf.gz
Ethiopian-Goha12.psf.gz           Uni1-VGA16.psf.gz
Ethiopian-Goha14.psf.gz           Uni1-VGA8.psf.gz
Ethiopian-Goha16.psf.gz           Uni2-Fixed13.psf.gz
Ethiopian-GohaClassic12.psf.gz    Uni2-Fixed14.psf.gz
Ethiopian-GohaClassic14.psf.gz    Uni2-Fixed15.psf.gz
Ethiopian-GohaClassic16.psf.gz    Uni2-Fixed16.psf.gz
Georgian-Fixed13.psf.gz           Uni2-Fixed18.psf.gz
Georgian-Fixed14.psf.gz           Uni2-Terminus12x6.psf.gz
Georgian-Fixed15.psf.gz           Uni2-Terminus14.psf.gz
Georgian-Fixed16.psf.gz           Uni2-Terminus16.psf.gz
Georgian-Fixed18.psf.gz           Uni2-Terminus20x10.psf.gz
Greek-Fixed13.psf.gz              Uni2-Terminus24x12.psf.gz
Greek-Fixed14.psf.gz              Uni2-Terminus28x14.psf.gz
Greek-Fixed15.psf.gz              Uni2-Terminus32x16.psf.gz
Greek-Fixed16.psf.gz              Uni2-TerminusBold12x6.psf.gz
Greek-Fixed18.psf.gz              Uni2-TerminusBold14.psf.gz
Greek-Terminus12x6.psf.gz         Uni2-TerminusBold16.psf.gz
Greek-Terminus14.psf.gz           Uni2-TerminusBold20x10.psf.gz
Greek-Terminus16.psf.gz           Uni2-TerminusBold24x12.psf.gz
Greek-Terminus20x10.psf.gz        Uni2-TerminusBold28x14.psf.gz
Greek-Terminus24x12.psf.gz        Uni2-TerminusBold32x16.psf.gz
Greek-Terminus28x14.psf.gz        Uni2-TerminusBoldVGA14.psf.gz
Greek-Terminus32x16.psf.gz        Uni2-TerminusBoldVGA16.psf.gz
Greek-TerminusBold12x6.psf.gz     Uni2-VGA14.psf.gz
Greek-TerminusBold14.psf.gz       Uni2-VGA16.psf.gz
Greek-TerminusBold16.psf.gz       Uni2-VGA8.psf.gz
Greek-TerminusBold20x10.psf.gz    Uni3-Fixed13.psf.gz
Greek-TerminusBold24x12.psf.gz    Uni3-Fixed14.psf.gz
Greek-TerminusBold28x14.psf.gz    Uni3-Fixed15.psf.gz
Greek-TerminusBold32x16.psf.gz    Uni3-Fixed16.psf.gz
Greek-TerminusBoldVGA14.psf.gz    Uni3-Fixed18.psf.gz
Greek-TerminusBoldVGA16.psf.gz    Uni3-Terminus12x6.psf.gz
Greek-VGA14.psf.gz                Uni3-Terminus14.psf.gz
Greek-VGA16.psf.gz                Uni3-Terminus16.psf.gz
Greek-VGA8.psf.gz                 Uni3-Terminus20x10.psf.gz
Hebrew-Fixed13.psf.gz             Uni3-Terminus24x12.psf.gz
Hebrew-Fixed14.psf.gz             Uni3-Terminus28x14.psf.gz
Hebrew-Fixed15.psf.gz             Uni3-Terminus32x16.psf.gz
Hebrew-Fixed16.psf.gz             Uni3-TerminusBold12x6.psf.gz
Hebrew-Fixed18.psf.gz             Uni3-TerminusBold14.psf.gz
Hebrew-VGA14.psf.gz               Uni3-TerminusBold16.psf.gz
Hebrew-VGA16.psf.gz               Uni3-TerminusBold20x10.psf.gz
Hebrew-VGA8.psf.gz                Uni3-TerminusBold24x12.psf.gz
Lao-Fixed14.psf.gz                Uni3-TerminusBold28x14.psf.gz
Lao-Fixed15.psf.gz                Uni3-TerminusBold32x16.psf.gz
Lao-Fixed16.psf.gz                Uni3-TerminusBoldVGA14.psf.gz
Lat15-Fixed13.psf.gz              Uni3-TerminusBoldVGA16.psf.gz
Lat15-Fixed14.psf.gz              Vietnamese-Fixed13.psf.gz
Lat15-Fixed15.psf.gz              Vietnamese-Fixed14.psf.gz
Lat15-Fixed16.psf.gz              Vietnamese-Fixed15.psf.gz
Lat15-Fixed18.psf.gz              Vietnamese-Fixed16.psf.gz
Lat15-Terminus12x6.psf.gz         Vietnamese-Fixed18.psf.gz
Lat15-Terminus14.psf.gz
max@max-desktop:/usr/share/consolefonts$

signaler à un administrateur
Commentaire de coucou747 le 19/11/2008 23:33:38



Warning: Cannot modify header information - headers already sent by (output started at F:\users\httpdocs\captcha.php:1) in F:\users\httpdocs\captcha.php on line 159


t'as probablement mis qqch avant <?php

signaler à un administrateur
Commentaire de laurentmerlin le 19/11/2008 23:41:40

ok, c'est bon. je sais pas pourquoi mais du texte c'était glissé dans la page captcha.php juste avant le début du code php ...

donc ca pouvait pas marcher.  plus d'info sur ce genre d'erreur : http://www.commentcamarche.net/forum/affich-1257704-php-warning-cannot-modify-header-information

signaler à un administrateur
Commentaire de laurentmerlin le 20/11/2008 00:03:55

encore merci pour le coup de main ;-)

mais j'ai un problème au niveau de la session je crois.
je reviens toujours sur la page proposant le captcha quelle que soit ma réponse.

pourrais-tu préciser ce que tu veux dire par

// VOUS DEVEZ INSERER ICI VOTRE CODE D'ENREGISTREMENT DE $txt et $rand EN SESSION.

merci,
Laurent.

signaler à un administrateur
Commentaire de coucou747 le 22/11/2008 13:27:41

pour ca faut l'adapter a ton site.

j'ai mis test.php pour te montrer un exemple

signaler à un administrateur
Commentaire de beubass le 04/12/2008 14:59:01

franchement coucou, peut etre que ton systèeme est fiable a 100%, c'est super, mais moi à ce moment la, je peu t'en faire un systeme fiable a 100%.
Je place un champ caché dans lequel je met une valeur, et apres je demande de deviner cette valeur.
sincerement, c'est illisible ton truc, on voit rien, on est obligé de généré 4 fois l'image pour avoir un texte qui peut etre décrypté a l'oeil.

On voit que tu maitrises bien la programmation, mais faut au final, ton truc est inutilisable.

le code c'est bien, mais faut penser aux utilisateurs...

signaler à un administrateur
Commentaire de coucou747 le 04/12/2008 15:07:47

en fait, il y a des gens qui voient tres bien dans l'espace et qui sauront lire naturellement, sans efforts, ce captcha.

d'autres auront plus de mal...

signaler à un administrateur
Commentaire de beubass le 04/12/2008 15:41:54

Je te propose une alternative au captcha. apres des recherche sur le web, j'ai trouvé ceci :

lien : http://www.deep-know.com/2008/01/04/une-astuce-tres-simple-pour-simuler-un-captcha/

explication :

Une astuce très simple pour simuler un CAPTCHA
En cherchant sur le Web une méthode pour implémenter un système CAPTCHA dans un formulaire, j'ai trouvé une solution très simple qui fonctionne très bien.

Il suffit d'ajouter dans son formulaire un champ du type :

<input class="cfrm" name="host" type="text" value=""/>
Ensuite, dans votre CSS vous ajoutez :

.cfrm { display: none; }
Cette classe CSS va masquer le champ "host", l'utilisateur final ne verra pas le champ dans le formulaire.

Lorsque le formulaire est posté, il suffit de vérifier que le champ "host" est vide. En effet, la plus part des robots rempliront ce champ. Ils ne s'apercevront pas que celui-ci ne fait pas parti du formulaire.

J'ai testé cette astuce sur plusieurs sites et le résultat est sans appel, 99% des posts effectués par les robots sont éliminés !!
-----

T'en pense quoi ???
ça m'a l'air vraiment efficace, tres simple a mettre en place, et surtout, non contraignant pour l'utilisateur.

signaler à un administrateur
Commentaire de coucou747 le 04/12/2008 15:58:34

ta methode marche pour les spams automatiques (sauf si t'es developpeur d'un truc connu genre phpbb ou autre) mais pas pour le flood.

pour te proteger du flood, il te faut un VRAI captcha.

signaler à un administrateur
Commentaire de codefalse le 04/12/2008 16:10:27 administrateur CS

@Beubass : j'avais aussi vu cette méthode. Elle comporte de gros avantages (notamment le fait de ne pas imposer à l'utilisateur des éléments supplémentaires futiles), mais si un robot s'attaque particulièrement à ton site, il va falloir ruser ! Il peux détecter quel champs à un css en display: none et ne pas le remplir.

Tu peux ensuite t'amuser à donner des noms aléatoires à tes champs, mémoriser en session quel champ appartient à quel valeur (zpoefqfsdfq = login), et du coup le bot ne pourra plus se baser sur le nom tel que "spam_captcha". Ce qui lui complique la tache.

Et plutot que lui mettre un display: none, tu devrais aussi lui mettre une position absolute et un top/left en -10000. Le bot doit-être vraiment doué pour se douter que le champ est hors limite ! :p

a voir !

signaler à un administrateur
Commentaire de codefalse le 04/12/2008 16:10:52 administrateur CS

En effet si on prends en compte le flood, c'est une autre affaire :p

signaler à un administrateur
Commentaire de beubass le 04/12/2008 16:12:47

Et si derrière tout ça tu mets en place un système de validation d'inscription par envoie de mail, je pense que le flood est contré.
De plus, le captcha ne contre pas non plus le flood mon cher ami. Le système capatcha a été mis en place pour contre-carrer les attaques des bots, un point c'est tout.

Donc je pense que ce système est finalement le meilleur jusqu'a c'que les robots analyse le css. peut etre que c'est déjà le cas, je me suis pas encore suffisament penché sur la question.

Sincerement, ne prend pas mal tout ce que je dis. en fait, je fais actuellement de la veille technologique concernant le stechnologie du web.

C'est vraiment dans un but de recherche d'efficacité et d'accessibilité d'un point de vue developpeur et utilisateur.


    

signaler à un administrateur
Commentaire de coucou747 le 04/12/2008 16:21:54

bien sur que non... si t'achetes un nom de domaine, alors t'as aucun probleme pour avoir autant d'adresses mails que tu veux...

les captchas ne contrent pas les floods fait par des humains (qui sont vraiment limites...) mais les captchas empechent les robots de flooder...

quand tu attaques un site, tu n'iras pas poster manuellement 50 000 messages, par contre, tu vas demander a un robot de le faire pour toi. et c'est la que mon captcha intervient.

signaler à un administrateur
Commentaire de beubass le 04/12/2008 16:40:08

Juste pour infos, en fait tu parametres ton robot afin d elui demander qu'elles champs remplir ?? si c'est le cas, effectivement, le simulateur de captcha n'est pas efficace.

Mais alors, qu'elle la diffréence entre un robot flooder et un spam-automatique ???

Dans le robot-flooder, tu cible un site bien précis et un spam-auto, il recherche automatiquement des sites avec formluaire sur la toile ???

signaler à un administrateur
Commentaire de coucou747 le 04/12/2008 16:51:40

exactement

les robots floodeurs sont concus pour un formulaire bien precis, alors que les robots spammeurs se baladent et postent (parfois plusieurs fois sur la meme page d'ailleur...)

signaler à un administrateur
Commentaire de beubass le 04/12/2008 16:59:34

ok, je te remercie pour l'info, discussion interressante.

Bonne journée à vous

signaler à un administrateur
Commentaire de codefalse le 04/12/2008 19:09:26 administrateur CS

J'avais fait à l'époque une traduction d'un blog sur divers tests sur les spams.

http://blog.reflectiv.net/2008/09/02/affichez-vos-emails-tout-en-evitant-le-spam/

Ceci est ma version, mais vous trouverez dans ce post le lien vers la version originale :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Salut à tous ! [ par Houzefa ] Ouf j'ai enfin trouvé un moyen de poster dans ce nouveau forum ! ... au fait félicitations à Nix car l'interprétation des crochets dans les codes ne p verification de fichier jpeg entiers [ par kaitennage ] bonjourJ'utilise un script php qui lit une directory de fichiers jpegpour creer 2 composant une mini et une visu puis extrait des metas data-iptc le Mail et anti-spam? [ par Varod ] Bonjour tout le monde,Dans une application de sondage en ligne, j'utilises la fonction mail pr envoyer un lien vers le site ou est hebergé mon applica probleme de conditions [ par popy01970 ] Bonjour a tous je suis en train de faire un script genre pick 3 (quotidienne 3 pour les gens du quebec) j'ai un probleme dans la section des verific Verification avan création d'un compte utilisateur !! [ par Ondine86 ] Bonjours tout le monde, je debute dans le php, et je voudrai savoir si de gentil gens qui si connaise comme vous voudrai bien aider la pauvre petite O Formulaire avec verification dynamique [ par bladebo ] BonjourVoila j'aimerai savoir comment faire pour vérifier un formulaire et faire un affichage qui se modifie si certaines zones du formulaire ne sont un formulaire qui ne passe pas les filtres anti-spam [ par frabern ] Dans un formulaire, j'ai ce message de validation que je fais parvenir aux usagers pour confirmer l'ajout d'anniversaire.Le probl&#232;me est le suiva formulaire verification [ par johnmichel57 ] bonjour, encore moi desole....Voila, j'ai mon formulaire, quand je clique sur envoi il y a verification, tout marche correct, mais si il y a un champ Spam [ par SA7BOOCH ] Bonjour &#224; tous&nbsp;G un petit probl&#233;me avec ma newsletter :&nbsp;lorsque j'envoi les emils aux inscrit mes messages&nbsp;&nbsp;sont consid& spam [ par simon0000 ] salut pk quand j'envois un message de free.fr il est toujour considerer comme spam et est ce que il ya un moyen pour eviter ca .


Nos sponsors