begin process at 2012 05 27 22:03:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CAPTCHA 3D ISO & LECTURE DE FONT CONSOLE

CAPTCHA 3D ISO & LECTURE DE FONT CONSOLE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :9 396 / 363

Auteur : coucou747

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (37)
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-ISOME TRIQUE_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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec une capture IMAGES GENETIQUES
Source avec Zip Source avec une capture RUBIX CUBE
Source avec Zip INTERPRETEUR BRAINFUCK
Source avec Zip PROXY HTTP : SAUVEZ VOS VIDEOS PREFEREES.
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CAPTCHA AJAX ANTI-BOT par darkvador59
Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
Source avec Zip Source avec une capture POURQUOI LES CAPTCHA NE SONT-ILS PAS TOUS SUR ? par coucou747
Source avec Zip Source avec une capture IMAGE ANTI-SPAM par coockiesch

Commentaires et avis

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 :/

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°

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°

Commentaire de coucou747 le 14/12/2007 02:12:57 administrateur CS

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

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 :-)

Commentaire de coucou747 le 14/12/2007 21:51:23 administrateur CS

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

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 ! :)

Commentaire de coucou747 le 14/12/2007 22:56:24 administrateur CS

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);

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 :)

Commentaire de coucou747 le 15/12/2007 06:45:07 administrateur CS

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

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°

Commentaire de coucou747 le 15/12/2007 21:07:54 administrateur CS

par fleme de chercher le nom de la constante

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

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 !

Commentaire de coucou747 le 27/06/2008 20:01:34 administrateur CS

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.

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!

Commentaire de laurentmerlin le 19/11/2008 23:16:41

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

merci,
Laurent.

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 ;-)

Commentaire de coucou747 le 19/11/2008 23:32:25 administrateur CS

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$

Commentaire de coucou747 le 19/11/2008 23:33:38 administrateur CS



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

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

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.

Commentaire de coucou747 le 22/11/2008 13:27:41 administrateur CS

pour ca faut l'adapter a ton site.

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

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...

Commentaire de coucou747 le 04/12/2008 15:07:47 administrateur CS

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...

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.

Commentaire de coucou747 le 04/12/2008 15:58:34 administrateur CS

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.

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 !

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

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.


    

Commentaire de coucou747 le 04/12/2008 16:21:54 administrateur CS

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.

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 ???

Commentaire de coucou747 le 04/12/2008 16:51:40 administrateur CS

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...)

Commentaire de beubass le 04/12/2008 16:59:34

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

Bonne journée à vous

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 :)

Commentaire de valbarel le 10/03/2009 09:28:53

Bel objet mathématique. Répond-t-il aux besoins ?

J'ai de bons yeux donc pas de problèmes pour moi au niveau de la lisibilité de ton captcha 3D, dans la majorité des cas. Par contre, si l'on veut l'utiliser dans un site ouvert à tous, beaucoup n'arriveront pas à lire ce type de captcha (ou ne feront pas l'effort d'essayer la nouveauté). De plus, les mal-voyants ont besoin d'une version audio (on ne peut plus continuer à exclure les personnes différentes du web, entre autre).

C'est pourquoi je me demandais si tu avais testé le fameux reCAPTCHA de Carnegie Mellon University, version PHP. C'est une version avec un serveur dédié utilisant un couple (clef publique, clef privée). Le Défi image aide indirectement à numériser des livres (pour comprendre, lire http://recaptcha.net/) et le Défi audio existe en plusieurs langues, dont le français.

J'ai tout testé : du point de vu des fonctionnalités (réponses aux besoins), je n'ai pas (encore) trouvé mieux.

Commentaire de coucou747 le 10/03/2009 12:00:46 administrateur CS

non, comme beaucoup de choses que j'ai faites et montres ici, je l'ai fait pour le defis, mais c'est un captcha assez peu accessible.

 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


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales