Accueil > > > IMAGE ANTI-SPAM
IMAGE ANTI-SPAM
Information sur la source
Description
Un petit script tout simple qui crée une image anti-spam... Deux versions (correspondant aux deux zones de la capture): - une simple (mais plus facilement lisible par des scripts OCR) - et la seconde ben... moins lisibles (pour les gens comme pour les robots, ^^) Dans le cas d'une utilisation de la seconde version, il serait pas mal de remplir le formulaire avec les valeurs déjà entrées en cas d'erreur de code car ca risque de se produire (on peut aussi enlenver le 0, le O et le D des caractères disponibles).
Source
- <?php
- session_start();
-
- // type de flood
- $name = $_GET['name'];
- // nb de caractères
- $strlen = (int) $_GET['strlen'];
-
- // taille de l'image ( width )
- $width = $strlen * 30 + 20;
- $height = 60;
-
- // création
- $img = imagecreatetruecolor( $width, $height );
- // antialising, c'est plus bô! :-)
- imageantialias( $img, 1 );
-
- // chaine
- $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- $chaine = '';
- for( $i = 0; $i < $strlen; $i++ )
- $chaine .= $string[ mt_rand( 0, 35 ) ];
-
- $_SESSION[ $name ] = $chaine;
-
- // couleur de départ
- $c1 = array( mt_rand( 200, 255), mt_rand( 200, 255), mt_rand( 200, 255) );
- // couleur finale
- $c2 = array( mt_rand( 150, 200), mt_rand( 150, 200), mt_rand( 150, 200) );
-
- $colors = array( imagecolorallocate( $img, 70, 130, 255 ) , imagecolorallocate( $img, 255, 237, 175 ), imagecolorallocate( $img, 166, 250, 186 ), imagecolorallocate( $img, 253, 188, 251 ), imagecolorallocate( $img, 255, 255, 255 ) );
-
- // création de l'image
- for( $i = 0; $i < $width; $i++ )
- {
- $r = $c1[0] + $i * ( $c2[0] - $c1[0] ) / $width;
- $v = $c1[1] + $i * ( $c2[1] - $c1[1] ) / $width;
- $b = $c1[2] + $i * ( $c2[2] - $c1[2] ) / $width;
- $color = imagecolorallocate( $img, $r, $v, $b );
-
- imageline( $img, $i, 0, $i, $height, $color );
- }
-
- // caractères
- for( $i = 0; $i < $strlen; $i++ )
- {
- $col = imagecolorallocate( $img, mt_rand( 0, 120 ), mt_rand( 0, 120 ), mt_rand( 0, 120 ) );
- imagettftext( $img, mt_rand( 20, 25 ), mt_rand( -30, 30 ), 10 + $i * 30, 35, $col, 'comic.ttf', $chaine[ $i ] );
- }
-
- // quelques lignes qui embêtent
- for( $i = 0; $i < 8; $i++ )
- {
- imageline( $img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $colors[mt_rand( 0, 4 )] );
- }
-
- $noir = imagecolorallocate( $img, 0, 0, 0 );
-
- // bordure
- imageline( $img, 0, 0, $width, 0, $noir );
- imageline( $img, 0, 0, 0, $height, $noir );
- imageline( $img, $width - 1, 0, $width - 1, $height, $noir );
-
- // header: image
- header("Content-type: image/png");
- imagepng( $img );
- imagedestroy( $img );
- ?>
-
- ########################################################################
- Seconde version:
- <?php
- session_start();
-
- // type de flood
- $name = $_GET['name'];
- // nb de caractères
- $strlen = (int) $_GET['strlen'];
-
- // taille de l'image ( width )
- $width = $strlen * 23 + 20;
- $height = 60;
- // taille de chaque zone de couleur
- $widthColor = $width / 4;
-
- // création
- $img = imagecreatetruecolor( $width, $height );
- // antialising, c'est plus bô! :-)
- imageantialias( $img, 1 );
-
- // chaine
- $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
- $chaine = '';
- for( $i = 0; $i < $strlen; $i++ )
- $chaine .= $string[ mt_rand( 0, 35 ) ];
-
- $_SESSION[ $name ] = $chaine;
-
- // couleur de départ
- $c1 = array( mt_rand( 200, 255), mt_rand( 200, 255), mt_rand( 200, 255) );
- // couleur finale
- $c2 = array( mt_rand( 70, 180), mt_rand( 70, 180), mt_rand( 70, 180) );
- // pas pour chaque composante de couleur
- $diffsColor = array( ( $c1[0] - $c2[0] ) / $widthColor, ( $c1[1] - $c2[1] ) / $widthColor, ( $c1[2] - $c2[2] ) / $widthColor );
-
- $start = 0;
- $end = $widthColor;
-
- for( $j = 0; $j < 4; $j++ ) // boucle pour chacune des 4 zones
- {
- $r = $j % 2 == 0 ? $c1[0] : $c2[0]; // composante r de départ
- $v = $j % 2 == 0 ? $c1[1] : $c2[1]; // idem v
- $b = $j % 2 == 0 ? $c1[2] : $c2[2]; // idem b
-
- // création des lignes
- for( $i = $start; $i < $end; $i++ )
- {
- if( $j % 2 == 0 )
- {
- $r -= $diffsColor[0];
- $v -= $diffsColor[1];
- $b -= $diffsColor[2];
- }
- else
- {
- $r += $diffsColor[0];
- $v += $diffsColor[1];
- $b += $diffsColor[2];
- }
-
- $color = imagecolorallocate( $img, $r, $v, $b );
-
- imageline( $img, $i, 0, $i, $height, $color );
- }
-
- $start += $widthColor;
- $end += $widthColor;
- }
-
- $colorsChar = array(); // on va mémoriser les couleurs des caractères
-
- // caractères
- for( $i = 0; $i < $strlen; $i++ )
- {
- $colorsChar[$i] = imagecolorallocate( $img, mt_rand( 0, 120 ), mt_rand( 0, 120 ), mt_rand( 0, 120 ) );
- imagettftext( $img, mt_rand( 20, 25 ), mt_rand( -35, 35 ), 10 + $i * 23, 35, $colorsChar[$i], 'comic.ttf', $chaine[ $i ] );
- }
-
- // quelques lignes qui embêtent
- for( $i = 0; $i < 10; $i++ )
- {
- imageline( $img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $colorsChar[mt_rand( 0, $strlen - 1 )] );
- }
-
- $noir = imagecolorallocate( $img, 0, 0, 0 );
-
- // bordure
- imageline( $img, 0, 0, $width, 0, $noir );
- imageline( $img, 0, 0, 0, $height, $noir );
- imageline( $img, $width - 1, 0, $width - 1, $height, $noir );
-
- // header: image
- header("Content-type: image/png");
- imagepng( $img );
- imagedestroy( $img );
- ?>
<?php
session_start();
// type de flood
$name = $_GET['name'];
// nb de caractères
$strlen = (int) $_GET['strlen'];
// taille de l'image ( width )
$width = $strlen * 30 + 20;
$height = 60;
// création
$img = imagecreatetruecolor( $width, $height );
// antialising, c'est plus bô! :-)
imageantialias( $img, 1 );
// chaine
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$chaine = '';
for( $i = 0; $i < $strlen; $i++ )
$chaine .= $string[ mt_rand( 0, 35 ) ];
$_SESSION[ $name ] = $chaine;
// couleur de départ
$c1 = array( mt_rand( 200, 255), mt_rand( 200, 255), mt_rand( 200, 255) );
// couleur finale
$c2 = array( mt_rand( 150, 200), mt_rand( 150, 200), mt_rand( 150, 200) );
$colors = array( imagecolorallocate( $img, 70, 130, 255 ) , imagecolorallocate( $img, 255, 237, 175 ), imagecolorallocate( $img, 166, 250, 186 ), imagecolorallocate( $img, 253, 188, 251 ), imagecolorallocate( $img, 255, 255, 255 ) );
// création de l'image
for( $i = 0; $i < $width; $i++ )
{
$r = $c1[0] + $i * ( $c2[0] - $c1[0] ) / $width;
$v = $c1[1] + $i * ( $c2[1] - $c1[1] ) / $width;
$b = $c1[2] + $i * ( $c2[2] - $c1[2] ) / $width;
$color = imagecolorallocate( $img, $r, $v, $b );
imageline( $img, $i, 0, $i, $height, $color );
}
// caractères
for( $i = 0; $i < $strlen; $i++ )
{
$col = imagecolorallocate( $img, mt_rand( 0, 120 ), mt_rand( 0, 120 ), mt_rand( 0, 120 ) );
imagettftext( $img, mt_rand( 20, 25 ), mt_rand( -30, 30 ), 10 + $i * 30, 35, $col, 'comic.ttf', $chaine[ $i ] );
}
// quelques lignes qui embêtent
for( $i = 0; $i < 8; $i++ )
{
imageline( $img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $colors[mt_rand( 0, 4 )] );
}
$noir = imagecolorallocate( $img, 0, 0, 0 );
// bordure
imageline( $img, 0, 0, $width, 0, $noir );
imageline( $img, 0, 0, 0, $height, $noir );
imageline( $img, $width - 1, 0, $width - 1, $height, $noir );
// header: image
header("Content-type: image/png");
imagepng( $img );
imagedestroy( $img );
?>
########################################################################
Seconde version:
<?php
session_start();
// type de flood
$name = $_GET['name'];
// nb de caractères
$strlen = (int) $_GET['strlen'];
// taille de l'image ( width )
$width = $strlen * 23 + 20;
$height = 60;
// taille de chaque zone de couleur
$widthColor = $width / 4;
// création
$img = imagecreatetruecolor( $width, $height );
// antialising, c'est plus bô! :-)
imageantialias( $img, 1 );
// chaine
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$chaine = '';
for( $i = 0; $i < $strlen; $i++ )
$chaine .= $string[ mt_rand( 0, 35 ) ];
$_SESSION[ $name ] = $chaine;
// couleur de départ
$c1 = array( mt_rand( 200, 255), mt_rand( 200, 255), mt_rand( 200, 255) );
// couleur finale
$c2 = array( mt_rand( 70, 180), mt_rand( 70, 180), mt_rand( 70, 180) );
// pas pour chaque composante de couleur
$diffsColor = array( ( $c1[0] - $c2[0] ) / $widthColor, ( $c1[1] - $c2[1] ) / $widthColor, ( $c1[2] - $c2[2] ) / $widthColor );
$start = 0;
$end = $widthColor;
for( $j = 0; $j < 4; $j++ ) // boucle pour chacune des 4 zones
{
$r = $j % 2 == 0 ? $c1[0] : $c2[0]; // composante r de départ
$v = $j % 2 == 0 ? $c1[1] : $c2[1]; // idem v
$b = $j % 2 == 0 ? $c1[2] : $c2[2]; // idem b
// création des lignes
for( $i = $start; $i < $end; $i++ )
{
if( $j % 2 == 0 )
{
$r -= $diffsColor[0];
$v -= $diffsColor[1];
$b -= $diffsColor[2];
}
else
{
$r += $diffsColor[0];
$v += $diffsColor[1];
$b += $diffsColor[2];
}
$color = imagecolorallocate( $img, $r, $v, $b );
imageline( $img, $i, 0, $i, $height, $color );
}
$start += $widthColor;
$end += $widthColor;
}
$colorsChar = array(); // on va mémoriser les couleurs des caractères
// caractères
for( $i = 0; $i < $strlen; $i++ )
{
$colorsChar[$i] = imagecolorallocate( $img, mt_rand( 0, 120 ), mt_rand( 0, 120 ), mt_rand( 0, 120 ) );
imagettftext( $img, mt_rand( 20, 25 ), mt_rand( -35, 35 ), 10 + $i * 23, 35, $colorsChar[$i], 'comic.ttf', $chaine[ $i ] );
}
// quelques lignes qui embêtent
for( $i = 0; $i < 10; $i++ )
{
imageline( $img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $colorsChar[mt_rand( 0, $strlen - 1 )] );
}
$noir = imagecolorallocate( $img, 0, 0, 0 );
// bordure
imageline( $img, 0, 0, $width, 0, $noir );
imageline( $img, 0, 0, 0, $height, $noir );
imageline( $img, $width - 1, 0, $width - 1, $height, $noir );
// header: image
header("Content-type: image/png");
imagepng( $img );
imagedestroy( $img );
?>
Conclusion
Si le script est enregistré dans le fichier: anti_spam.php, on appèle l'image comme ceci:
<img src="anti_spam.php?name=livreor&strlen=4" alt="anti-flood" />
>> le contenu dans l'image sera dans $_SESSION['livreor'] >> 4 caractères
Si $spam représente l'entrée utilsateur, le test se fait comme ceci: if( $_SESSION['livreor'] != strtoupper( $spam ) ) // erreur ici
Voilà, j'attends vos comments sur ce petit script tout simple!
P.S. Ne pas oublier le session_start() sur la page qui vérifie les données! :-)
Historique
- 05 octobre 2006 16:19:05 :
- Ajout zip
- 16 avril 2007 20:20:38 :
- Complexification de l'image:
- rapprochement des lettres
- augmentation de la rotation
- augmentation du nombre de lignes
- les lignes sont de la même couleur que les caractères
- plage de couleurs du dégradé plus large (donc plus proche de la couleur des caractères)
- 4 dégradés au lieu d'un
- 22 janvier 2008 21:40:08 :
- Ajout d'une info
Sources du même auteur
GÉRER UN .HTPASSWDGÉRER UN .HTPASSWD Une mini source sans grande prétention: le but est de gérer un fichier .htpasswd de manière à ce que seuls les utilisateurs d'un site aient accès aux ...
RÉCUPÉRER L'IP DU VISITEURRÉCUPÉRER L'IP DU VISITEUR Suite à un commentaire sur un source je vous propose, ce code, qui n'est pas de moi, et qui permet de récupérer l'ip du visiteur.
Ces deux fonction...
MOTEUR DE RECHERCHE DANS BDD IIMOTEUR DE RECHERCHE DANS BDD II Voilà, une petite classe permettant de générer une requête de recherche pour une bdd.
J'ai déjà fait un code similaire ; la raison pour laquelle je n...
PRETTY DATEPRETTY DATE Pour commencer, l'idée de ce code et son implémentation ne sont pas de moi, il s'agit d'un code d'olid:
http://www.phpcs.com/codes/AFFICHER-DATE-HEUR...
FORMULAIRE (NEWS, LIVRE D'OR, ...)FORMULAIRE (NEWS, LIVRE D'OR, ...)Le zip contient le code pour faire un formulaire (pour un ajout de news, message dans livre d'or, etc).
Code HTML:
- formulaire en lui même
Cod...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
:::::: URGENT !!! ENVOI D'IMAGE PAR FTP !!!! ERREUR :::::: [ par kkz_mil3k ]
j'essaie d'nevoyer un fichier image gif ou jpg sur un ftp via ce formulaire php :------------------------------------------- //**connecte au ftp sc
Comment insérer un champs image ds ma table ?? [ par inceV ]
Salut à tous et bonne année 2002 !!!Bon, je n'arrive pas à créer un champs 'image' ds ma table et je ne comprends pas tp commen ça marche, pourriez-vo
Faire unr image sur le serveur en PHP [ par fabiin ]
Salut !En ASP, il y a un composant ki permet de créer une image sur le serveur,...on peu avec 2-3 ligne de codes, faire un dégradé, mettre du texte, e
Insérer une image dans une autre [ par cduf ]
Je sais créer une image (compteur) avec des commandes php GD, mais comment l'insérer dans une autre (bannière). Merci de m'aider.Email : cdufetelle@wa
envoyer une image dans le $message de mail() [ par linov ]
Bonjour,Comment faire pour envoyer une image dans le $message envoyé par la fonction mail() ?Syntaxe ? Paramètres ? Est-ce possible ?Merci de votre ai
include image [ par erich10 ]
comment faire un include d'une image ?et comment faire en plus un lien sur cette image?merci
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
MySQL et images [ par Marneus Calgar ]
SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un
MySQL et images [ par Marneus Calgar ]
SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un
Ne pas afficher la barre de Menu Image [ par microdav ]
Bonjour à vous Internaute,je vous soumets une petite question...Je recherche Code permettant de ne pas faire afficher la barre de menu "Image" sur une
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|