Vous êtes ici Codes PHP et MySQL > Formulaires > Image anti-spam

 

Image anti-spam

Un petit script tout simple qui crée une image anti-spam pour protéger vos formulaires, ajout de news, de messages dans vos livres d'or ...
 
R@f
Site de l'auteur voir
[17] sources en PHP voir
Code vu 11582 fois
Enregistré le 13 Aout 2006
  • Digg ce code sur digg.com
  • Bookmark ce code sur del.icio.us
  • Bookmark ce code sur Google
  • Bookmark ce code sur Yahoo
  • Ajoute Image anti-spam
  • Partage ce code sur Facebook
 
 
 
 

Code Source


01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
 
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ \/ _ \/ _ \_\ \/ _ \/ // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/\___/\_,_/_/  \__/\__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Image anti-spam                                           */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts179-PHP.htm              */
/* Auteur         : R@f                                                       */
/* Date édition   : 13 Aout 2006                                              */
/* Website auteur : http://www.allpotes.ch                                    */
/*                                                                            */
/******************************************************************************/
?>
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

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

// chaine
$string 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$chaine '';
for( $i 0$i $strlen$i++ )
  $chaine .= $stringmt_rand035 ) ];
  
$_SESSION$name ] = $chaine;

// couleur de départ
$c1 = array( mt_rand200255), mt_rand200255), mt_rand200255) );
// couleur finale
$c2 = array( mt_rand150200), mt_rand150200), mt_rand150200) );

$colors = array( imagecolorallocate$img70130255 ) , 
                 imagecolorallocate$img255237175 ), 
                 imagecolorallocate$img166250186 ), 
                 imagecolorallocate$img253188251 ), 
                 imagecolorallocate$img255255255 ) );

// 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$i0$i$height$color );
}

// caractères
for( $i 0$i $strlen$i++ )
{
  $col imagecolorallocate$imgmt_rand0120 ),mt_rand0120 ), mt_rand0120 ));
  
             imagettftext$imgmt_rand2025 ), 
                           mt_rand( -3030 ), 
                           10 $i 3035, 
                           $col, 
                           'comic.ttf', 
                           $chaine$i ] );
}

// quelques lignes qui embêtent
for( $i 0$i 8$i++ )
{
imageline$imgmt_rand(0$width), 
           mt_rand(0$height), mt_rand(0$width), mt_rand(0$height), $colors[mt_rand0)] );
}

$noir imagecolorallocate$img00);

// bordure
imageline$img00$width0$noir );
imageline$img000$height$noir );
imageline$img$width 10$width 1$height$noir );

// header: image
header("Content-type: image/png");
imagepng$img ); 
imagedestroy$img );
?>

 

Fonctions du code

: Initialise une session - (PHP 4, PHP 5)
: Crée une nouvelle image en couleurs vraies - (PHP 4 >= 4.0.6, PHP 5)
: Utiliser ou non les fonctions d'antialias - (PHP 4 >= 4.3.2, PHP 5)
: Génère une meilleure valeur aléatoire - (PHP 4, PHP 5)
: Crée un tableau - (PHP 4, PHP 5)
: Alloue une couleur pour une image - (PHP 4, PHP 5)
: Dessine une ligne - (PHP 4, PHP 5)
: Dessine un texte avec une police TrueType - (PHP 4, PHP 5)
: Envoie un en-tête HTTP - (PHP 4, PHP 5)
: Envoie une image PNG vers un navigateur ou un fichier - (PHP 4, PHP 5)
: Détruit une image - (PHP 4, PHP 5)
Commentaires
Super resultat !
 
Maintenant, je ne sais pas quel est réellement la fiabilité de cette méthode car les robots spammeurs ont l'air de savoir déchiffrer de plus en plus facilement les images.

Une meilleure solution serait peut-être de poser un calcul à l'utilisateur et lui demander de le résoudre.
 
smile Sympa pour les morceaux de code
 
Bonjour il manque le fichier comic.ttf



Pour générer cette image . 
 
Salut,

Pour ma part la fonction antialias ne fonctionne pas sur toutes les versions de GD, j'ai du la virer.

Pour ce qui est de la police, il faut donner quelques infos à GD pour qu'il puisse la trouver, sinon cela ne marche pas, du moins sur ma version de GD, cela ne fonctionner pas tel quel j'ai du rajouter ce petit morceau de code :


<?php

// Définition de la variable d'environnement pour GD

putenv('GDFONTPATH=' realpath('.'));

// Nom de la police à utiliser (notez l'absence de l'extension .ttf)
$font 'SomeFont';
?>

 
Voilà j'ai trouvé sur un site de référence de la bibliothèque GD les infos, avec une version de GD inférieur à la 2.0.18, gd à besoin du code que j'ai donné pour trouver la police, qui ne peux être passé en paramètre dans la fonction avec l'extension .ttf et pour ce qui est de l'antialias, il faut avoir une version de GD dite embarqué (bundled) pour en disposer.
 
Ajouter un commentaire
Code de sécurité

Attention: Les champs marqués d'une étoile * sont obligatoires
 
Librairie PHP

Connexion

 
 

Formulaires

 
 

PHP

 
 
 
PHP 5 ; MySQL 4 Livre PHP

PHP 5 ; MySQL 4
 
    Offres d'emploi

Plus de 500 offres d'emploi PHP/MySQL

Offres d'emploi
 
    Editeur PHP
 
        Publicité