Créer une image pour afficher les email et empecher le spam

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 408 fois - Téléchargée 27 fois

Contenu du snippet

Bonjour à tous.
Petite asutce pour celles et ceux qui utilisent mysql (peut etre adapter à un fichier texte).
Cette source vous permez dans une page web d'afficher dans une image une adresse email afin qu'elle ne soit pas utilisé par les robots des spammeurs.

Source / Exemple :


//Dans où doit figurer l'adresse email afficher ça ($id étant ici le numero unique de la personne qui est propriétaire de l'adresse email) :

<?php echo" <a href='contact.php?id=$id&di=$id' target='_self'><img border='0' align='absmiddle' src='creationimage.php?id=$id'></a>"; ?>

//On fait appel au fichier creationimage.php pour dessiner l'adresse email en recuperant la valeur $_GET de id :

<?php
header("Content-type: image/png");

//lecture du fichier qui contient les informations pour faire la connexion à votre base de donnée
require_once('votrebase.php');
session_start();
/* teste si $_GET['id'] existe, si oui on execute la requete pour recupère l'email associé dans la base de donnée */
if ( (isset($_GET["id"])) && ($_GET["id"]!="") ) 
{
	$id=$_GET["id"];
}
mysql_select_db($database_votrebase, $votrebase);
$query_rsUtilisateur = "SELECT id, log, email FROM utilisateurs WHERE id = '$id'";
$rsUtilisateur = mysql_query($query_rsUtilisateur, $votrebase) or die(mysql_error());
$row_rsUtilisateur = mysql_fetch_assoc($rsUtilisateur);
$totalRows_rsUtilisateur = mysql_num_rows($rsUtilisateur);
$mail=$row_rsUtilisateur["email"];

/* cette partie est en rapport avec contact.php. On verifie l'existance de la valeur $_GET['di'] passé en parametre, si elle existe on verifie si le code de validation de la page contact.php correspond au texte crée aléatoirement  auparavant */
if ( (isset($_GET['di'])) && ($_GET['di']!='') ) 
{

	if ( (empty($_SESSION['code'])) || (strlen($_SESSION['code']) !=5) || ($_SESSION['code'] != $_POST['verif']) ) 
	{ 
		exit("Erreur, redirection automatique ! "."<html><head><META HTTP-EQUIV='Refresh' CONTENT='4;URL=pagededepart.php?id=$id'></head><BODY></body></html>"); 
	}
	if ($_SESSION['code'] == $_POST['verif']) 
	{
		// si le code de verification est ok, alors on redirige ouvre le logiciel de courriel avec le header et on redirige vers la page de départ, sinon on redirige directement vers la page de départ sans ouvrir le logiciel de départ
		header("Location: mailto:$mail");
		echo "<html><head><META HTTP-EQUIV='Refresh' CONTENT='0;URL=pagededepart.php?id=$id'></head><BODY></body></html>";
		
		// on detruit les variables de session, et ensuite on détruit la session
		session_unset();
		session_destroy();
	}
	else 
	{ 
		echo "<html><head><META HTTP-EQUIV='Refresh' CONTENT='0;URL=pagededepart.php?id=$id'></head><BODY></body></html>"; 
	}
}
else 
{
	$larg = 210;
	$haut =16;
	$img = imagecreate($larg, $haut);
	$rouge = imagecolorallocate($img,255, 239, 189);
	$plot = 0;
	
		while($plot < 7)
		{
			imageline($img, rand(1, 250), rand(1, 40), 0, $plot, imagecolorallocate($img, 255, 0, 0));
			$plot++;
		}
	$noir = imagecolorallocate($img,0,0,0);
	$corp=2;
	header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
	header('Cache-Control: no-store, no-cache, must-revalidate'); 
	header('Cache-Control: post-check=0, pre-check=0', false); 
	header("Content-type: image/png");
	imagestring($img, $corp,5,0, $text,$noir);
	imagepng($img,'',40);
	imagedestroy($img);
}

?>

// dans la page contact.php

<?php
/* on sauvegarde la valeur de $_GET['di'] */

if ( (isset($_GET['di'])) && ($_GET['di']!="") ) 
{
	$_SESSION['di']=$_GET['di'];
}
if ( (isset($_GET['id'])) && ($_GET['id']!="") ) 
{
	$id=$_GET['id'];
}
?>

<form action="creationimage.php?<?php echo "id=$id&di=$id"; ?>" method="post"><br /><br />
<img src="crypteimage.php" alt="Securisation du formulaire" width="150" height="35" title="Securisation du formulaire" /><br /><br />
<input type="text" name="verif" size="10" maxlength="6" /><br /><br />
<input type="submit" value="Envoyer" />
</form>

// dans la page crypteimage.php

<?php
/* Démarage d'une session nécéssaire pour récupérer la valeur générée d'une page a l'autre */
session_start();
$liste = "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/* On créer une valeur qui sera notre code secret a saisir */
$code = '';
/* On crée une boucle pour créer une chaine de 5 caractères aléatoires parmis les caractères de la variable $liste */
while(strlen($code) != 5) {
$code .= $liste[rand(0,63)];
}
/* on définit une variable de session nomée $_SESSION['code']  */
$_SESSION['code']=$code;
/* On crée une image de 70 pixels par 20 pixels plus petite que l'image à afficher afin de tromper le bot */
$largeur = 70;
$haut =20;
$img = imagecreate($largeur, $haut);
$rouge = imagecolorallocate($img,255,0,0);
$plot = 0;

  while($plot < 256)
{
   /* dessine les lignes et bouge avec un effet gradiant */
   imageline($img, rand(0, 50), rand(0, 20), 255, $plot, imagecolorallocate($img, $plot, $plot, $plot));
   $plot++;
}
$noir = imagecolorallocate($img,0,0,0);
$corp=5;
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Cache-Control: post-check=0, pre-check=0', false); 
header("Content-type: image/png");

/* Ajout de la variable $code, à l'image */
imagestring($img, $corp,($largeur-imageFontWidth($corp)*strlen("".$code.""))/2,0, $code,$noir);

/* qualité de l'image à 40 % pour éviter que ce soit trop lisible */
imagepng($img,'',40);
imagedestroy($img);

/* et voila le tour est joué, complique les choses pour les spammeurs.
J'espere ne rien avoir oublié car j'ai supprimé pas mal de chose par rapport à mon code perso */
?>

Conclusion :


Peut etre la création automatique d'une anime flash (en swf ou en ming) au lieu d'une image...

A voir également

Ajouter un commentaire Commentaires
Messages postés
28
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
11 avril 2008

Suffit dans ces cas la d'afficher l'adresse mail avec un a href mailto:adresse@monfai.com, et le problème et résolu pour tout le monde.
Ouverture du soft de messagerie si la personne en a un, et affichage de l'adresse en clair au cas ou la personne n'utilise pas de soft ou des logiciels de type pine...

Bon week end tout le monde !
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Tu ne peux pas utiliser le mailto... c'est la première chose que recherche un bot dans une page... et pour être valide ton mailto doit comporter l'adresse en clair... donc il faut abandonner l'idée du mailto... de toute façon c'est galère comme façon de faire... ça ouvre un soft de messagerie mais tout le monde n'en utilise pas (moi par exemple)... .. .

@ tchaOo°
Messages postés
17
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
6 février 2014

Bonjour,

Kankrelune la méthode que tu promotionne est bien mas je ne pense pas que le mailto fonctionne avec.

Pour ce qui est de remplacer juste l'@ par une image je pense que c'est une bonne idée, mais pareil le mailto ne fonctionne pas.

Avec ça dans la source sa mettrait un truc du genre :

mon email : pierrotyahoo.fr

sa me semble pas mal.

mais c'est sur le mieux est de ne pas utiliser le mailto.

a+.
Pierre-Emmanuel.
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

@ Coucou... oui et non... le point commun c'est l'utilisation de balise html... après les deux méthodes n'ont rien à voir... ta méthode (qui est loin d'être mauvaise) ajoute des caractères rendant ainsi l'adresse invalide... la méthode que je donne ressemble plus à la méthodes utilisant des images car l'adresse mail est transformée en balises html qui affichent l'adresse mais au final aucun caractères de l'adresse n'apparait dans le code... ce ne sont que des div... .. .

@ Evangun... remplacer le @ par une image ramène aux même problème que de mettre toute l'adresse mail dans un image... enfin je pense... .. .

@ tchaOo°
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut, c vrai que pour un code aussi peu sécurisé, autant ne pas utiliser GD mais juste remplacer le @ par une image qui le représente de façon un peu alambiquée... comme ça, ça mélange le texte en clair et l'image. Si vous êtes parano, vous faîtes la même chose pour le point.
Et puis oui, osons laisser tomber définitivement le mailto qui sert franchement à pas grand-chose, à part attirer les spammeurs. Et si vous y tenez vraiment, pas d'autre solution qu'un cryptage javascript -que je sache.
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.