[script] lutte anti spam
10 messages
• Page 1 sur 1
-

fandecine - Modérateur

- Messages: 2024
- Inscription: 2 Avr 2005
[script] lutte anti spam
voilà bien longtemps que je n'avais pas publié de script PHP...
L'objet de ce script est de protéger vos formulaires de contact par un code secret généré graphiquement à recopier dans un champ du formulaire afin d'éviter à des robots de vous bombarder de mails de spam.
La code secret, pour rester secret
, est passé par variable de session.
Au début de votre page contenant le formulaire, inserez le code suivant:
Votre script de traitement de formulaire doit resembler à ceci
Enfin, le script de génération de code scret
Je vous donne aussi l'image utilisée pour tramer le code secret dans cet exemple
Voilà, c'est fini!
edit: pour faire plaisir à correiaj, ce script utilise la librairie GD2 disponible ici: http://www.boutell.com/gd/
L'objet de ce script est de protéger vos formulaires de contact par un code secret généré graphiquement à recopier dans un champ du formulaire afin d'éviter à des robots de vous bombarder de mails de spam.
La code secret, pour rester secret
Au début de votre page contenant le formulaire, inserez le code suivant:
- Code: Tout sélectionner
<?php
session_start();//ouverture d'une session
$secret=""; //initialisation du code secret
for($i=0;$i<5;$i++) { //génération du code secret à 5 caractères
$secret.=chr(mt_rand(65, 90));
}
$_SESSION['secret'] = $secret;//stockage du code dans une variable de session
?>
Votre script de traitement de formulaire doit resembler à ceci
- Code: Tout sélectionner
<?php
session_start();
if ($_POST['Secret']==$_SESSION['secret']) { // code secret valide
votre code de traitement du formulaire
} else { // code scret invalide
votre code de traitement de code secret invalide
}
unset($_SESSION['secret']); // on detruit le code secret
votre code de traitement de retour
?>
Enfin, le script de génération de code scret
- Code: Tout sélectionner
<?php
session_start(); //demarrage de la session
$text=$_SESSION['secret']; //on récupére le code à générer
header("Content-type: image/png"); //définition du type d'image générée (png)
$im = imagecreatefromjpeg("secret.jpg");// Création de l'image à partir d'un fichier contenant le fond de l'image à générer
$id = imagecreatefromjpeg("secret.jpg");// Création d'une deuxième image identique
$grey = imagecolorallocate($im, 128, 128, 128); // définition de la couleur "gris"
$black = imagecolorallocate($im, 0, 0, 0); // définition de la couleur "noir"
$font = 'COURBD.TTF';// à remplacez le chemin par votre propre chemin de police TTF
for($i=0;$i<5;$i++) { //boucle de génération des 5 caractères du code secret
$angle=mt_rand(10,30); //définition d'un angle aléatoire entre 10 et 30 degrés
if(mt_rand(0,1)==1) $angle=-$angle; //définition aléatoire du signe à appliquer à l'angle
imagettftext($im, 14, $angle, 11+(20*$i), 21, $grey, $font, substr($text,$i,1));// génération de l'ombre d'un caractère du code secret en gris
imagettftext($im, 14, $angle, 10+(20*$i), 20, $black, $font, substr($text,$i,1));// génération du caractère du code secret en noir
}
$id=imagerotate ( $id, 180,0 ); // on applique une rotation de 180° à notre deuxième image créée à partier de l'image de fond
imagecopymerge ( $im, $id, 0, 0, 0, 0, 120, 30, 50 ); //on fusione cette image à notre code secret avec un facteur de tranparence de 50%
imagepng($im); //notre code secret est terminé
imagedestroy($im); //on libére nos ressources images
imagedestroy($id);
?>
Je vous donne aussi l'image utilisée pour tramer le code secret dans cet exemple
Voilà, c'est fini!
edit: pour faire plaisir à correiaj, ce script utilise la librairie GD2 disponible ici: http://www.boutell.com/gd/
Dernière édition par fandecine le Mar Nov 29, 2005 12:35, édité 1 fois.
- sebvita
- Nouveau WRInaute

- Messages: 3
- Inscription: 28 Fév 2006
Bonjour,
J'essaye d'utiliser votre script dans une de mes pages pour gérer les inscriptions des utilisateurs.
Cependant, je n'arrive pas à me servir du "script de génération de code secret".
Comment faut-il l'insérer ? Que retourne-t-il ?
Pour le moment, tout ce que j'obtiens c'est :
Pourriez-vous m'aider ?
Cordialement.
J'essaye d'utiliser votre script dans une de mes pages pour gérer les inscriptions des utilisateurs.
Cependant, je n'arrive pas à me servir du "script de génération de code secret".
Comment faut-il l'insérer ? Que retourne-t-il ?
Pour le moment, tout ce que j'obtiens c'est :
- Code: Tout sélectionner
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/nmaisons/inscriptions_secu/secret.php:1) in /home/www/nmaisons/inscriptions_secu/secret.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /home/www/nmaisons/inscriptions_secu/secret.php:1) in /home/www/nmaisons/inscriptions_secu/secret.php on line 4
Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/www/nmaisons/inscriptions_secu/secret.php on line 5
Pourriez-vous m'aider ?
Cordialement.
- sebvita
- Nouveau WRInaute

- Messages: 3
- Inscription: 28 Fév 2006
Je vais résumer un petit peu le contenu de mes pages pour vous montrer ce que ça donne...
Page formulaire.php :
Page formulaire.html :
A l'emplacement où je veux mettre l'image, faut-il que je mette directement le code ou faut-il que j'include un fichier contenant ce code ?
J'ai essayé d'include secret.php...
Page secret.php :
Page formulaire.php :
- Code: Tout sélectionner
<?php
session_start();//ouverture d'une session
$secret=""; //initialisation du code secret
for($i=0;$i<5;$i++) { //génération du code secret à 5 caractères
$secret.=chr(mt_rand(65, 90));
}
$_SESSION['secret'] = $secret;//stockage du code dans une variable de session
// Affichage du formulaire
include ("formulaire.html");
?>
Page formulaire.html :
A l'emplacement où je veux mettre l'image, faut-il que je mette directement le code ou faut-il que j'include un fichier contenant ce code ?
J'ai essayé d'include secret.php...
Page secret.php :
- Code: Tout sélectionner
<?php
session_start(); //demarrage de la session
$text=$_SESSION['secret']; //on récupére le code à générer
header("Content-type: image/png"); //définition du type d'image générée (png)
$im = imagecreatefromjpeg("secret.jpg");// Création de l'image à partir d'un fichier contenant le fond de l'image à générer
$id = imagecreatefromjpeg("secret.jpg");// Création d'une deuxième image identique
$grey = imagecolorallocate($im, 128, 128, 128); // définition de la couleur "gris"
$black = imagecolorallocate($im, 0, 0, 0); // définition de la couleur "noir"
$font = 'COURBD.TTF';// à remplacez le chemin par votre propre chemin de police TTF
for($i=0;$i<5;$i++) { //boucle de génération des 5 caractères du code secret
$angle=mt_rand(10,30); //définition d'un angle aléatoire entre 10 et 30 degrés
if(mt_rand(0,1)==1) $angle=-$angle; //définition aléatoire du signe à appliquer à l'angle
imagettftext($im, 14, $angle, 11+(20*$i), 21, $grey, $font, substr($text,$i,1));// génération de l'ombre d'un caractère du code secret en gris
imagettftext($im, 14, $angle, 10+(20*$i), 20, $black, $font, substr($text,$i,1));// génération du caractère du code secret en noir
}
$id=imagerotate ( $id, 180,0 ); // on applique une rotation de 180° à notre deuxième image créée à partier de l'image de fond
imagecopymerge ( $im, $id, 0, 0, 0, 0, 120, 30, 50 ); //on fusione cette image à notre code secret avec un facteur de tranparence de 50%
imagepng($im); //notre code secret est terminé
imagedestroy($im); //on libére nos ressources images
imagedestroy($id);
?>
-

fandecine - Modérateur

- Messages: 2024
- Inscription: 2 Avr 2005
pour les deux erreurs suivantes:
Il faut que le script soit inseré en tout début de page avant toute instruction html ou php!
Pour cette erreur:
Le support JPEG n'est disponible que si PHP a été compilé avec GD-1.8 ou supérieur.
La fonction gd_info retourne des informations à propos de la bibliothèque GD installée.
Tu peux trouver la librairie GD et toutes les infos à cette adresse: http://www.boutell.com/gd/
- Code: Tout sélectionner
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/nmaisons/inscriptions_secu/secret.php:1) in /home/www/nmaisons/inscriptions_secu/secret.php on line 2
Warning: Cannot modify header information - headers already sent by (output started at /home/www/nmaisons/inscriptions_secu/secret.php:1) in /home/www/nmaisons/inscriptions_secu/secret.php on line 4
Il faut que le script soit inseré en tout début de page avant toute instruction html ou php!
Pour cette erreur:
- Code: Tout sélectionner
Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/www/nmaisons/inscriptions_secu/secret.php on line 5
Le support JPEG n'est disponible que si PHP a été compilé avec GD-1.8 ou supérieur.
La fonction gd_info retourne des informations à propos de la bibliothèque GD installée.
Tu peux trouver la librairie GD et toutes les infos à cette adresse: http://www.boutell.com/gd/
- sebvita
- Nouveau WRInaute

- Messages: 3
- Inscription: 28 Fév 2006
Bonjour,
Je vous remercie de votre aide.
Pour les erreurs de session et de header, c'est réglé.
Toutefois, j'ai toujours l'erreur suivante :
Cependant, la librairie GD2 est installée sur mon serveur.
De plus, j'ai fais un include de mon fichier secret.php (celui où l'image est créée) au début de mon fichier pour le formulaire. L'image va s'insérer à cet endroit là, non ?
Je vous remercie de votre aide.
Pour les erreurs de session et de header, c'est réglé.
Toutefois, j'ai toujours l'erreur suivante :
- Code: Tout sélectionner
Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/poudlard/www/nmaisons/inscriptions_secu/secret.php on line 3
Cependant, la librairie GD2 est installée sur mon serveur.
De plus, j'ai fais un include de mon fichier secret.php (celui où l'image est créée) au début de mon fichier pour le formulaire. L'image va s'insérer à cet endroit là, non ?
- spijoelx
- WRInaute discret

- Messages: 249
- Inscription: 6 Fév 2004
sebvita a écrit:Bonjour,
Je vous remercie de votre aide.
Pour les erreurs de session et de header, c'est réglé.
Toutefois, j'ai toujours l'erreur suivante :
- Code: Tout sélectionner
Fatal error: Call to undefined function: imagecreatefromjpeg() in /home/poudlard/www/nmaisons/inscriptions_secu/secret.php on line 3
Cependant, la librairie GD2 est installée sur mon serveur.
si ça affiche ça c'est qu'elle est mal installé la librairie GD à mon avis
sinon il faut pas faire un include php, mais un img src html
-

Bahanix - WRInaute discret

- Messages: 131
- Inscription: 7 Juin 2005
Ce script est très simpathique, mais j'y verrais uen petite amélioration à faire :
Remplacer
if ($_POST['Secret']==$_SESSION['secret'])
Par
if (strtolower($_POST['secret'])==strtolower($_SESSION['secret']))
Je pense que ça peut éviter des confusions
Remplacer
if ($_POST['Secret']==$_SESSION['secret'])
Par
if (strtolower($_POST['secret'])==strtolower($_SESSION['secret']))
Je pense que ça peut éviter des confusions
- tiboel
- WRInaute discret

- Messages: 116
- Inscription: 21 Mar 2004
Pas besoin d'utiliser de variable de session, je ferai :
1-> Générer une chaine de caractère (exemple : abcdef)
2-> Générer le md5 de la chaine $K (exemple : f4sdq5f4sd54ffsd54f5)
3 -> Générer l'image contenant la chaine abcdef
Dans le formulaire :
on affiche l'image + la variable $K en hidden + un text input $I
Lors de la soumission on vérifie que :
md5($I)=$K
Thibaud
1-> Générer une chaine de caractère (exemple : abcdef)
2-> Générer le md5 de la chaine $K (exemple : f4sdq5f4sd54ffsd54f5)
3 -> Générer l'image contenant la chaine abcdef
Dans le formulaire :
on affiche l'image + la variable $K en hidden + un text input $I
Lors de la soumission on vérifie que :
md5($I)=$K
Thibaud
10 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Contribuez à la lutte anti-spam !
- Lutte anti spam - Effacement Automatique des Users sans post
- Les propos de Matt Cutts sur la lutte anti spam chez Google
- script anti-spam robots et anti-pirates...
- script anti-spam
- aide script anti spam linker
- Lutte anti spammeurs
- Début de la lutte anti triche
- Lutte anti SMS (français quand tu nous...)
- google et la lutte contre le spam [opinion]
Consultez la description détaillée des produits ou services de Google suivants : Google TrustRank
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


