[PHP] Anti-spam
Résolu
Carotte77
Messages postés
543
Date d'inscription
Statut
Membre
Dernière intervention
-
Besdu06 -
Besdu06 -
Bonjour,
Sur mon site ( http://objectifplanete.ovh.org ), j'ai créé un livre d'or (consultable sur http://objectifplanete.ovh.org/livredor.php ). Depuis quelques semaines, je me fais assaillir de spams par des robots-spammeurs. J'ai donc décidé d'utiliser une sorte de "Captcha" (ou anti-spam) consistant en une suite de numéros devant une image brouillée. J'ai récupéré le code sur le site du Zéro (très bon tutos pour les apprentis du webmastering) que j'ai appliqué à mon site.
L'anti-spam s'affiche bien, j'ai mon image brouillée avec mes chiffres, ma case ou je peux réécrire le code. Seulement problème : lorsque je rentre un mauvais code, le message est tout de même posté.
En gros : on écrit son message sur livredor.php, on clique sur envoyer, les variables sont traitées par message.php, qui écrit le message dans message.txt si tout est ok. Ensuite, l'utilisateur clique pour consulter le livre d'or. La page consultezlo.php met en forme le fichier message.txt et l'internaute a alors accès à la liste des posts.
Pour en revenir à l'anti spam, j'ai récupéré le code de traitement de l'anti spam et l'ai copié/collé sur ma page message.php, celle qui traite les variables. j'ai ajouté le code d'affichage de l'anti spam sur ma page livredor.php.
Voila le code de message.php (a priori le seul à modifier).
Cette partie sert pour l'anti-spam :
Celle-ci sert pour la vérification l'écriture du message dans message.txt :
En fait je voudrais, en utilisant comme base la 2e partie, y incruster la 1ere. Avec toutes les instructions de la 2e, je voudrais que le message posté par l'internaute ne soit traité que si le code est bon (inutile alors d'avoir un echo, si le code est bon, on execute, sinon, on affiche un echo affirmant que le code est faux et un lien retour sur la page).
J'ai eu beau essayer toutes les configurations possibles, je n'ai pas réussi. il faut dire que je suis tout nouveau en PHP et que je n'y comprend pas encore grand chose...
Quelqu'un peut-il m'aider ?
Désolé pour la longueur du post :S et merci d'avance pour votre aide !
Sur mon site ( http://objectifplanete.ovh.org ), j'ai créé un livre d'or (consultable sur http://objectifplanete.ovh.org/livredor.php ). Depuis quelques semaines, je me fais assaillir de spams par des robots-spammeurs. J'ai donc décidé d'utiliser une sorte de "Captcha" (ou anti-spam) consistant en une suite de numéros devant une image brouillée. J'ai récupéré le code sur le site du Zéro (très bon tutos pour les apprentis du webmastering) que j'ai appliqué à mon site.
L'anti-spam s'affiche bien, j'ai mon image brouillée avec mes chiffres, ma case ou je peux réécrire le code. Seulement problème : lorsque je rentre un mauvais code, le message est tout de même posté.
En gros : on écrit son message sur livredor.php, on clique sur envoyer, les variables sont traitées par message.php, qui écrit le message dans message.txt si tout est ok. Ensuite, l'utilisateur clique pour consulter le livre d'or. La page consultezlo.php met en forme le fichier message.txt et l'internaute a alors accès à la liste des posts.
Pour en revenir à l'anti spam, j'ai récupéré le code de traitement de l'anti spam et l'ai copié/collé sur ma page message.php, celle qui traite les variables. j'ai ajouté le code d'affichage de l'anti spam sur ma page livredor.php.
Voila le code de message.php (a priori le seul à modifier).
Cette partie sert pour l'anti-spam :
<?php // Code PHP pour l'image brouillée et le code chiffré à entrer session_start(); // L'image utilise les sessions, donc on les active ici car on as besoin de ces informations $debut_html = '<html> <head> <title>Inscription</title> </head> <body> <p>'; $milieu_html = NULL; $fin_html = '</p> </body> </html>'; if(IsSet($_POST['verif_code']) AND !Empty($_POST['verif_code'])) { // Le champ du code de confirmation a été remplis if($_POST['verif_code']==$_SESSION['aleat_nbr']) { // Si le champ est égal au code généré par l'image $milieu_html = 'Vous avez entré le bon code de confirmation !'; } else { $milieu_html = 'Votre code de confirmation n\'est pas bon ! Merci de réessayer.<br /><a href="#" onclick="history.go(-1);">Retour</a>'; } } else { $milieu_html = 'Vous devez remplir le champ du code de confirmation !'; }
Celle-ci sert pour la vérification l'écriture du message dans message.txt :
//Code PHP pour le livre d'or // Là, on affiche toute la source générée : echo $debut_html . $milieu_html . $fin_html; // Pour éviter qu'une unique personne poste 50 fois dans le livre d'or, on va insérer un cookie setcookie("ip",$_SERVER['REMOTE_ADDR'],time()+.3600*60*90); // Si le cookie est égale à l'ip du client alors on le stop if(isset($_COOKIE['ip']) && $_COOKIE['ip']==$_SERVER['REMOTE_ADDR']) { echo "<h1>Vous ne pouvez émettre qu'un seul avis et vous l'avez déjà donné !</h1>"; // On stop le script exit; } // Mettons le (futur) fichier dans une variable. $commentaires="messages.txt"; // assignons nos 2 variables du formulaire et on en profite pour les protégers des balises HTML $pseudo=htmlentities($_POST['pseudo']); $message=htmlentities($_POST['message']); //Pensons au retour à la ligne et au stripslashes pour la variable $message $message=stripslashes(nl2br($message)); // On met en place quelques conditions pour les cellules (nom et message) // On vérifie avant tout si le fichier existe si ce n'est pas le cas on le crée if(!is_file($commentaires)) { $verif=@fopen($commentaires,"w+"); } // On vérifie que le login ou le message ne soient pas vide elseif (trim($message)=="" || trim($pseudo)=="") { echo "Vous devez remplir tous les champs ! <a href=\"livredor.php\">Retour sur le livre d'or</a>"; // On sort du script ! exit; } // Après ces quelques vérification d'usage on passe à l'exécution de ce formulaire // Si ok on ouvre en écirture-enregistrement du fichier message.txt $verif=@fopen($commentaires,"r+"); // On analyse les anciennes données et on les stocks $stock=@fread($verif,filesize($commentaires)); // On met la date dans une varialbe $date=date ("d/m/Y à H:i"); // On paramère le tout dans la variable $opinion $opinion="<b>".$pseudo."</b> a écrit le : ".$date."<br />\n".$message."<br />\n<hr />"; //On remet le curseur du fichier en début de ligne rewind($verif); //On insère le nouveau commentaire fputs($verif,$opinion." \n".$stock); //On clore le fichier fclose($verif); // On affiche le tout readfile($commentaires); ?>
En fait je voudrais, en utilisant comme base la 2e partie, y incruster la 1ere. Avec toutes les instructions de la 2e, je voudrais que le message posté par l'internaute ne soit traité que si le code est bon (inutile alors d'avoir un echo, si le code est bon, on execute, sinon, on affiche un echo affirmant que le code est faux et un lien retour sur la page).
J'ai eu beau essayer toutes les configurations possibles, je n'ai pas réussi. il faut dire que je suis tout nouveau en PHP et que je n'y comprend pas encore grand chose...
Quelqu'un peut-il m'aider ?
Désolé pour la longueur du post :S et merci d'avance pour votre aide !
A voir également:
- [PHP] Anti-spam
- Spam messenger - Guide
- Malwarebytes anti-malware - Télécharger - Antivirus & Antimalwares
- Anti-spam whatsapp - Accueil - Messagerie instantanée
- Anti spam gratuit - Télécharger - Antivirus & Antimalwares
- Easy php - Télécharger - Divers Web & Internet
3 réponses
Rien de plus simple, ta premiere partie doit etre comme ca :
Ainsi dans la premiere partie, en cas d'erreur la suite n'est pas exécutée, et donc tes messages non mis à jour, normalement.
<?php // Code PHP pour l'image brouillée et le code chiffré à entrer session_start(); // L'image utilise les sessions, donc on les active ici car on as besoin de ces informations $debut_html = '<html> <head> <title>Inscription</title> </head> <body> <p>'; $milieu_html = NULL; $fin_html = '</p> </body> </html>'; if(IsSet($_POST['verif_code']) AND !Empty($_POST['verif_code'])) { // Le champ du code de confirmation a été remplis if($_POST['verif_code']!=$_SESSION['aleat_nbr']) { $milieu_html = 'Votre code de confirmation n\'est pas bon ! Merci de réessayer.<br /><a href="#" onclick="history.go(-1);">Retour</a>'; exit(-1); } } else { $milieu_html = 'Vous devez remplir le champ du code de confirmation !'; exit(-1) } ET ICI TU MET LA DEUXIEME PARTIE DU SCRIPT ?>
Ainsi dans la premiere partie, en cas d'erreur la suite n'est pas exécutée, et donc tes messages non mis à jour, normalement.
Tout d'abord, merci pour ta réponse !
J'ai un tout petit problème. J'ai fait ce que tu m'as dit de faire, et j'obtiens un message d'erreur :
Parse error: syntax error, unexpected '}' in /home/o/b/j/objectifplanete/www/message.php on line 25
La ligne 25 correspond à l'accolade de toute fin de ce passage du code :
J'ai essayé de corriger l'erreur, mais j'obtiens toujours le message d'erreur...
As-tu une idée ?
merci d'avance
J'ai un tout petit problème. J'ai fait ce que tu m'as dit de faire, et j'obtiens un message d'erreur :
Parse error: syntax error, unexpected '}' in /home/o/b/j/objectifplanete/www/message.php on line 25
La ligne 25 correspond à l'accolade de toute fin de ce passage du code :
else { $milieu_html = 'Vous devez remplir le champ du code de confirmation !'; exit(-1) }
J'ai essayé de corriger l'erreur, mais j'obtiens toujours le message d'erreur...
As-tu une idée ?
merci d'avance