begin process at 2012 02 15 20:36:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

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

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


 Description

Bonjour,
Encore une source on ne peut plus répandu mais bien utile lorsque l'on veut developper un systeme antispam pour forum, livre d'or, commentaires etc...
En réalité, ma source permet d'afficher un code cachée dans une image ( aller voir l'exemple sur http://pproject.webzzanine.net/image.php si vous ne comprenez pas ). J'ai également mis une fonction qui genere un code alphanumerique simple du nombre de caractere que l'on souhaite. A vous de coder le reste comme bon vous semble pour l'utiliser, par exemple, pour gener un peu l'action des robots qui voudraient spammer vos pages.

Source

  • <?php
  • function make_img($content = '')
  • {
  • $timage = array((strlen($content)*18)+10,15); // array(largeur, hauteur) de l'image; ici la largeur est fonction du nombre de lettre du contenu, on peut bien sur mettre une largeur fixe.
  • $content = preg_replace( '/(\w)/', '\\1 ', $content); // laisse plus d'espace entre les lettres
  • $image = imagecreatetruecolor($timage[0], $timage[1]); // création de l'image
  • // definition des couleurs
  • $white = imageColorAllocate($image, 255, 255, 255);
  • $grey = imageColorAllocate($image, 210, 210, 210);
  • $text_color = imageColorAllocate($image, rand(0, 150), rand(0, 50), rand(0, 60));
  • imageFill($image, 0, 0, $white); // on remplit l'image de blanc
  • // on remplit l'image avec des polygones (couleurs claires)
  • for ($i = 0; $i < rand(3, 5); $i++)
  • {
  • $x = rand(3, 10);
  • $poly = array();
  • for ($j = 0; $j < $x; $j++)
  • {
  • $poly[] = rand(0, $timage[0]);
  • $poly[] = rand(0, $timage[1]);
  • }
  • imageFilledPolygon($image, $poly, $x, imageColorAllocate($image, rand(130, 255), rand(130,255), rand(130, 255)));
  • }
  • // Création des pixels gris
  • for ($i = 0; $i < $timage[0] * $timage[1] / rand(15, 18); $i++)
  • {
  • imageSetPixel($image, rand(0, $timage[0]), rand(0, $timage[1]), $grey);
  • }
  • // affichage du texte demandé; on le centre en hauteur et largeur (à peu près ^^")
  • imageString($image, 5, ceil($timage[0]-strlen($content)*8)/2, ceil($timage[1]/2)-9, $content, $text_color);
  • $type = function_exists('imageJpeg') ? 'jpeg' : 'png';
  • @header('Content-Type: image/' . $type);
  • @header('Cache-control: no-cache, no-store');
  • ($type =='png') ?imagePng($image) : imageJpeg($image);
  • ImageDestroy($image);
  • exit();
  • }
  • function generer_code($car) {
  • $string = "";
  • $chaine = "abcdefghijklmnpqrstuvwxy123456789";
  • for($i=0; $i<$car; $i++) {
  • $string .= $chaine[rand()%strlen($chaine)];
  • }
  • return $string;
  • }
  • make_img(generer_code(5));
  • ?>
<?php

function make_img($content = '')
{
	$timage = array((strlen($content)*18)+10,15); // array(largeur, hauteur) de l'image; ici la largeur est fonction du nombre de lettre du contenu, on peut bien sur mettre une largeur fixe.
	$content = preg_replace( '/(\w)/', '\\1 ', $content); // laisse plus d'espace entre les lettres
	$image  = imagecreatetruecolor($timage[0], $timage[1]); // création de l'image

	// definition des couleurs
	$white  = imageColorAllocate($image, 255, 255, 255);
	$grey   = imageColorAllocate($image, 210, 210, 210);
	$text_color = imageColorAllocate($image, rand(0, 150), rand(0, 50), rand(0, 60));

	imageFill($image, 0, 0, $white); // on remplit l'image de blanc
	
	// on remplit l'image avec des polygones (couleurs claires)
	for ($i = 0; $i < rand(3, 5); $i++)
	{
		$x = rand(3, 10);
		$poly = array();
		for ($j = 0; $j < $x; $j++)
		{
			$poly[] = rand(0, $timage[0]);
			$poly[] = rand(0, $timage[1]);
		}
		imageFilledPolygon($image, $poly, $x, imageColorAllocate($image, rand(130, 255), rand(130,255), rand(130, 255)));

	}
	
	// Création des pixels gris
	for ($i = 0; $i < $timage[0] * $timage[1] / rand(15, 18); $i++)
	{
		imageSetPixel($image, rand(0, $timage[0]), rand(0, $timage[1]), $grey);
	}

	// affichage du texte demandé; on le centre en hauteur et largeur (à peu près ^^")
	imageString($image, 5, ceil($timage[0]-strlen($content)*8)/2, ceil($timage[1]/2)-9, $content, $text_color);

	$type = function_exists('imageJpeg') ? 'jpeg' : 'png';
	@header('Content-Type: image/' . $type);
	@header('Cache-control: no-cache, no-store');
	($type =='png') ?imagePng($image) : imageJpeg($image);
	ImageDestroy($image);

	exit();
}

function generer_code($car) {
	$string = "";
	$chaine = "abcdefghijklmnpqrstuvwxy123456789";
	for($i=0; $i<$car; $i++) {
	$string .= $chaine[rand()%strlen($chaine)];
	}
	return $string;
} 

make_img(generer_code(5));

?>

 Conclusion

Je peux ameliorer la source si ça peut être utile à certain ( en la transformant en un vrai systeme antispam par exemple ) mais je pense qu'il est plus interessant de faire les choses par soi même ^^.
Tout commentaires sont les bienvenus.


 Sources du même auteur

CALENDRIER SIMPLE, FACILEMENT MODIFIABLE, AFFICHAGE COMPLET

 Sources de la même categorie

Source avec Zip Source avec une capture ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR ... par stephelle
Source avec Zip CRYPTAGE REVERSIBLE par Mokost
Source avec Zip Source avec une capture CREATION DE COMPTE AVEC CRYPTAGE ET ESPACE DE CONNEXION SEC... par bm1982
Source avec Zip PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
CRYPTAGE/DECRYPTAGE MCRYPT par sephirothgeek

 Sources en rapport avec celle ci

FONCTION ENVOI DE MAIL PHP QUI PERMET DE PASSER LE FILTRE AN... par alienat
Source avec Zip CLASSE : GÉNÉRATEUR DE MINIATURE STRICTE OPTIMISÉ par GauldoMagique
Source avec Zip Source avec une capture CODE BARE!!! par toutoos
Source avec Zip Source avec une capture CLASS PERMETTANT DE CRÉER UNE IMAGE POUR LA VALIDATION D'UN ... par patcui
Source avec Zip CODE BROUILLÉ POUR FORMULAIRE * BASE DE SCRIPT * par igratuit

Commentaires et avis

Commentaire de cerede2000 le 27/05/2007 01:08:55

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

Commentaire de coucou747 le 27/05/2007 02:49:57 administrateur CS

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

Commentaire de coucou747 le 27/05/2007 03:15:09 administrateur CS

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

Commentaire de greenzest le 27/05/2007 12:05:42

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

Commentaire de coucou747 le 27/05/2007 17:02:41 administrateur CS

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

générer des miniatures avec gd 1.6 [ par vegetaline ] muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave Help me [ par YuGiOhFlash ] [size=3] Help je cherche un code:Explication G une page index ou il fo ecrir un code pour voir des images.une page calculetrice pour mettre les images Image sur click .. [ par nicolas66 ] Bonsoir @ tous !Je voulais juste savoir comen il était possible d'afficher une image créee avec php dans la meme page ou il y a un formulaire sur clic imagecolorallocate [ par xylo2 ] Salut !J'ai fait un truc tout basique, je voudrais ajouter un texte sur une image pré-existante.Voici mon code :&lt;?if (!isset($mat)) $mat="Toto";< Probleme code de securité [ par zzzzzz ] Voila je suis debutant en php et j'ai inclue un fichier code.php avec comme contenu: header("Content-type: image/jpeg"); $nbr = rand(10000,100000); PROBLEME GENERATION IMAGE AVEC GD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [ par zzzzzz ] C'est desesperent! jen'arrive toujours pas a comprendre d'ou viens le prob depuis hier :(en fait j'ai un fichier code.php de contenue:&lt;?$nbr = rand echo avec imagecreatefromjpeg ?? [ par PsYk0PaT ] Bonjour,J'ai ce bout de code qui fonctionne à merveille: $image = imageCreateFromJpeg("la_map.jpg"); $colorCyan = imageColorAllocate$image,0,255,255); code perso: balises spéciales [ par Samiby ] Bonjour,Je programme actuellement un blog, et pour poster des lessages, j'ai créé un code personnalisé.J'ai un prblème avec les images.La syntaxe de m image et GD [ par papipsycho ] salut a tous voila jai un pb donc jai un script qui marche tres bien pour cree des image et prendre des inf dans ma BDD(un script que jai recupere ici ftp_put [ par panpan ] Hello.J'ai un probleme avec ftp_putQuand j'execute mon scripte d'upload, l'image est bien uploader sur le serveur, mais internet explorer m'affiche ce


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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,374 sec (3)

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