|
| stef59280 | Posté le 04/03/2007 @ 11:40 |
Petit astucien
344 Messages
| Bonjour, J'ai créé pour mon site un livre d'or. Depuis quelques jours celui-ci ce voit salit par des messages type spam. Ces messages sont en fait des liens vers d'autres sites. J'ai donc mis un htmlentities à mes champs de formulaire afin que les liens ne soient pas pris en compte. Ces messages sont quand même très dérangeants et je suis à chaque via une page administrateur obligé de les supprimer. Je voudrai savoir si vous ne connaissez pas un moyen d'interdire la publication de message comme ceux évoqués précédemment. PS : J'aimerai que vous me donniez un autre système que l'image antispam, car j'en ai déjà installé une pour mon formulaire d'inscription à l'espace membre et j'aimerai donc que mes visiteurs ne soient pas trop ennuyés dans le sens ou ils devraient remplir en plus du formulaire du livre d'or un champ l'image anti-bot. Après si c'est la seule solution alors tant pi
|
| |
| |
| Publicité |
|
|
| Kheops13 | Posté le 04/03/2007 à 12:12 |
Petit astucien
29 Messages
| une solution consiste a ce que les posteur sur ton livre d'or doivent pour poster répondre à une question simple exemple: si ton site est un site sur l'Om (au hasard) la question pourrait être l'Om est le club de quellle ville? |
| |
|
| stef59280 | Posté le 04/03/2007 à 12:14 |
Petit astucien
344 Messages
| OK merci pourquoi pas cette solution. Si d'autres personnes ont des choses à proposer qu'ils n'hésitent pas |
| |
|
| Malcolm | Posté le 04/03/2007 à 12:45 |
Astucien
7271 Messages
| tu peux interdire les liens a href="..." tout simplement... |
| |
|
| stef59280 | Posté le 04/03/2007 à 18:29 |
Petit astucien
344 Messages
| oui je suis d'accord mais avec les <a href=*"" il y à aussi des autres mots enfin plutôt une succession de lettres qui forment des mots incompréhensible. Mon livre d'or est donc pollué par ces messages. Si vous avez d'autres solutions faites moi signe. |
| |
|
| stef59280 | Posté le 05/03/2007 à 13:13 |
Petit astucien
344 Messages
| Vous voyez ca me met des messages de ce genre. J'avai donc penser à créer une page php qui génere de fauss adresse email pour saturer les serveurs des bot. Malhereusement rien n'y fait je suis encore envahit. Pouvez m'aider merci Par dpumkbg le 05/03/2007 à 12h34
<a href=http://www.integral-k.com/evvbu/amoxicillin.html>amoxicillin side effects</a> <a href=http://www.integral-k.com/evvbu/levitra.html>levitra softabs</a> <a href=http://www.integral-k.com/evvbu/cars.html>musc
|
| |
|
| Malcolm | Posté le 05/03/2007 à 16:30 |
Astucien
7271 Messages
| j'ai créé il y a pas si longtemps une fonction qui permet de générer un code de saisie dans un formulaire avec sa vérification ... C'est une succession d'images dont une est tirée aléatoirement dès qu'un formulaire qui intègre cette méthode apparait. Vois un exemple : page de contact Est-ce que ce type de "protection" t'intéresse ? Il n'y a pour le moment que 2 questions, mais je peux en rajouter plus très simplement. Pour les voir, actualise la page plusieurs fois. |
| |
|
| stef59280 | Posté le 05/03/2007 à 19:24 |
Petit astucien
344 Messages
| Salut malcolm et merci Oui ce système de protection m'intéresse, je trouve que c'est plutôt sympatique comme idée. Dis moi quoi le plus vite possible car au moment ou je te parle, mon livre d'or et encore plein de spams |
| |
|
| Malcolm | Posté le 06/03/2007 à 09:09 |
Astucien
7271 Messages
| désolé de n'avoir pas répondu hier, petite indisponibilité. J'essaie de te le donner dans la journée ou au plus tard ce soir. |
| |
|
| stef59280 | Posté le 06/03/2007 à 12:31 |
Petit astucien
344 Messages
| ok encore merci. Cela fait pas mal de fois que tu m'aides, je te ferais un lien vers ton site sur le mien de manière à te remercier Modifié par stef59280 le 06/03/2007 15:15 |
| |
|
| Malcolm | Posté le 06/03/2007 à 19:58 |
Astucien
7271 Messages
| Voilà, excuse-moi de mon retard. Alors tout d'abord une fonction, que tu déclares soit dans une bibliothèque externe, soit en début de ton fichier PHP. Attention, il faut que la page affichant le formulaire en question ET celle qui le traite (si ce sont 2 fichiers différents) incluent et déclarent cette fonction. <?php /* * NoSpamQuestion displays a picture needed to submit a form ... * $mode, string * $wanted, int * @returns array */ function NoSpamQuestion($mode, $wanted) { $array_pictures = array(); $j = 0; $array_pictures[$j]['num'] = $j; $array_pictures[$j]['img'] = "nospam_q0.png"; $array_pictures[$j]['alt'] = "La multiplication de 4 par 4 donne ..."; $array_pictures[$j]['ans'] = "seize"; $j++; $array_pictures[$j]['num'] = $j; $array_pictures[$j]['img'] = "nospam_q1.png"; $array_pictures[$j]['alt'] = "La multiplication de 2 par 2 donne ..."; $array_pictures[$j]['ans'] = "quatre"; $j++;
if ($mode != 'ans') { // generate random $lambda = rand(0, count($array_pictures)-1); return $array_pictures[$lambda]; } else { // give answer foreach($array_pictures as $i => $array) { if ($i == $wanted) { return $array; break; } } } }; ?>
Dedans, tu entres les images, la question et la réponse ... Tu fais un simple copier/coller d'un bloc de lignes pour rajouter une nouvelle image. Ensuit, dans ton formulaire HTML. On va y insérer un morceau de code PHP. juste avant ton <form> tu insères : <?php // image anti spam $img_nospam = NoSpamQuestion('', ''); ?>
de façon à tirer au sort une image dans la liste. DANS ton formulaire HTML, tu ajoutes 2 champs (cas d'un doctype XHTML): <p><label for="code">Ecrivez en LETTRES le résultat :</label><img src=images/<?php echo $img_nospam['img']; ?> width="88" height="31" alt="<?php echo $img_nospam['alt']; ?>" title="<?php echo $img_nospam['alt']; ?>" /><input type="text" name="code" id="code" /><input type="hidden" id="image" name="image" value="<?php echo $img_nospam['num']; ?>" /></p>
(les 2 input peuvent ne pas être au même endroit, tant qu'ils sont tous les 2 dans le formulaire...) Ensuite, dans ta page PHP qui traite le formulaire, tu insères (cas où le formulaire est passé en method="post"): <?php $code = (isset($_POST['code'])) ? $_POST['code'] : ''; $image = (isset($_POST['image'])) ? $_POST['image'] : ''; // Checking code anti spam $verif_img = NoSpamQuestion('ans', $image); if ($code != $verif_img['ans']) { echo "<p>Vous n'avez pas répondu correctement à la question ....</p>"; } else { // traitement du formulaire comme tu le souhaites ... } ?>
|
| |
|
| stef59280 | Posté le 06/03/2007 à 22:31 |
Petit astucien
344 Messages
| Salut malcolm J'ai essayé le script que tu ma donné. Mais il y un problème. En fait quand on rentre les données du formulaire du livre d'or sans répondre à la question ça fonctionne le message ce post. Par contre si on répond à la question même en donnant la bonne réponse il dit le message prévu dans la condition if c'est à dire "Vous n'avez pas répondu correctement à la question .....". Donc voilà je ne sais pas si tu sais pourquoi ça me fait cela tient si ca peux t'aider voici le script de mon livre d'or. (tout est traité sur la même page) le formulaire <form action="livre-or.php" method="post"> <div align="center"> <table border="1" align="center" cellpadding="1" bordercolor="#999999" bgcolor="#FFFFFF" class="Style2"> <tr> <td><div align="right">Pseudo : </div></td> <td><input name="pseudo" nom type=text class="clearfix" id="pseudo" size=30></td> </tr> <tr> <td colspan=2><div align="left">Votre message : <textarea name="message" COLS=40 ROWS=10 class="clearfix" id="textarea" demande></textarea> </div></td> </tr> </table> </div> <p align="center"> <input name="submit" type=submit value=Envoyer class="bouton"> - <input name="reset" type=reset value=Effacer class="bouton"> </p>
</form>
<?php mysql_connect("", "", ""); mysql_select_db("livre");
if (isset($_POST['pseudo']) AND isset($_POST['message'])) { $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); $message = htmlentities($_POST['message'], ENT_QUOTES); $message = nl2br($message); mysql_query("INSERT INTO livre VALUES('', '" . $pseudo . "', '" . $message . "','".time() ."')"); }
$nombreDeMessagesParPage = 10; $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livre'); $donnees = mysql_fetch_array($retour); $totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
echo 'Page : '; for ($i = 1 ; $i <= $nombreDePages ; $i++) { echo '<a href="livre-or.php?page=' . $i . '">' . $i . '</a> '; } <h3>Vos messages</h3> </p> <p> <?php mysql_connect("", "", ""); mysql_select_db("livre");
if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = 1; }
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
$reponse = mysql_query('SELECT * FROM livre ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
while ($donnees = mysql_fetch_array($reponse)) { ?> <p><strong> Par <?php echo $donnees['pseudo'];?> le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?> <br /></strong><br />
<?php echo $donnees['message'];?></p> <p><br /> </p> <h3></h3> <?php } mysql_close();
?>
|
| |
|
| Malcolm | Posté le 06/03/2007 à 23:24 |
Astucien
7271 Messages
| est-ce que l afonction est accessible (c.à.d. déclarée) correctement partout sur la page ? |
| |
|
| Malcolm | Posté le 07/03/2007 à 00:09 |
Astucien
7271 Messages
| tu peux appliquer ça à ta page de contact aussi. Soi dit en passant, j'ai pu t'envoyer un formulaire vide, tu vas voir ... Nous vous remercions pour tout l'interêt que vous porter au site.  Pourrais-tu corriger tes fautes aussi ? |
| |
|
| stef59280 | Posté le 07/03/2007 à 00:41 |
Petit astucien
344 Messages
| salut j'ai vérifié ce que tu m'avais dit pourtant mon formulaire de contact et bien vérifié. Les champs email, nom, et demande, sont vérifés pour savoir il contiennent des éléments de plus la validitée de l'adresse email est-elle aussi vérifée. Je ne comprends donc pas que tu as pu m'envoyer un message. De plus tu me parles de fautes d'orthographes, merci de m'avoir prévenu j'ai corrigé la phrase. Sache que je ne fais pas seul le site et que je ne peux donc pas vérifier le travail éffectué par mes colègues. Merci quand même mais je te dis je trouve étrange que tu as pu m'envoyer un formulaire de contact vide alors que j'ai créé un script php vérifiant le formulaire. Après si tu as appuyé sur la barre espace pour les champs nom et demande c'est normal qu'il te laisse envoyer le formulaire car la vérification est en fait basée sur des empty donc si tu fais des espaces pour lui le champ est rempli. Je ne sais pas tient moi au courant. Par contre pour ton système de protection contre les spams il faut que je regarde bien car pour le moment ça ne fonctionne pas. Modifié par stef59280 le 07/03/2007 00:48 |
| |
|
| Malcolm | Posté le 07/03/2007 à 07:33 |
Astucien
7271 Messages
| pour le formulaire : oui, j'ai mis un espace dans chaque champ. pour la fonction : je t'ai expliqué stricto sensu comment l'utiliser, assure-toi, lorsque tu génères le formulaire que le champ hidden est bien rempli avec la "valeur numérique" de l'image; et que celle-ci est bien récupérée au traitement du formulaire. Assure-toi aussi que lorsque du définis la fonction, qu'elle soit accessible depuis la page html tout comme le formulaire. Mauvais exemple : <?php if (!isset($_POST['submit'])) { // formulaire non envoyé, on l'affiche /* ---- fonction antispam ---- */ function machin () {...} echo "<form [...]"; } else { // formulaire envoyé, on le traite $machin ... } ?>
Bon exemple : <?php /* ---- fonction antispam ---- */ function machin () {...} if (!isset($_POST['submit'])) { // formulaire non envoyé, on l'affiche echo "<form [...]"; } else { // formulaire envoyé, on le traite $machin ... } ?> |
| |
|
| stef59280 | Posté le 07/03/2007 à 19:35 |
Petit astucien
344 Messages
| ok je regarde et je te tient au courant  |
| |
|
| stef59280 | Posté le 09/03/2007 à 23:53 |
Petit astucien
344 Messages
| Salut malcolm J'ai essayé ton système mais ça ne marche toujours pas. J'ai donc créé un petit script Super simple mais je voudrais un renseignement. En fait j'ai mis dans une variable la réponse à la question (blanc) ensuite j'ai créé un champ appellé verif. Puis j'ai fais une condition if ( $_POST['verif'] != $cle) echo ('......'); Je voudrais savoir si les bot arrivent à savoir ce qu'ils doivent répondre si j'utilise la métohde que je vient d'explqiuer autrement dit est ce que les bot vont savoir lire ma variable puis retranscrire la réponse dans le formulaire afin de pouvoir poster leur message ? |
| |
|
| Malcolm | Posté le 10/03/2007 à 09:45 |
Astucien
7271 Messages
| je ne comprends pas que tu ne saches pas l'utiliser, soit mon explication n'est pas claire (pourtant je pense pas pouvoir faire plus simple) soit c'est ton script qui n'est pas adapté ... Quoiqu'il en soit si tu passes une valeur en paramètre caché, ils pourront y avoir accès, de là à dire qu'ils sauront que c'est la réponse, je ne pense pas, mais ce n'est qu'une question de temps. |
| |
|
| stef59280 | Posté le 10/03/2007 à 10:39 |
Petit astucien
344 Messages
| Salut malcolm. Je pense que ton explication est très claire. Cela doit venir de mon script qui n'est pas adapté. Quand j'utilse ton script soit quand je ne réponds pas à la question mon message ce post soit quand je réponds bien ou mal à la question il me dit que la réponse n'est pas bonne est n'affiche pas mon message. Je ne sais vraiment pas pourquoi |
| |
|
| Malcolm | Posté le 10/03/2007 à 10:57 |
Astucien
7271 Messages
| |
| |
|
| stef59280 | Posté le 10/03/2007 à 12:29 |
Petit astucien
344 Messages
| |
| |
|
| Malcolm | Posté le 10/03/2007 à 15:00 |
Astucien
7271 Messages
| bah ça marche, j'ai ajouté un message vide (sic !) et un "test N°2 de message". les erreurs mysql_query ne viennent pas de mon tuto, c'est une de tes requêtes qui foire. (ya pas de mysql dans mon tuto) |
| |
|
| stef59280 | Posté le 10/03/2007 à 17:34 |
Petit astucien
344 Messages
| Oui j'ai vu ça. J'ai enfin compris pourquoi ça ne fonctionner pas en fait cela venait tout simplement de mon étourderie. Il faillait écrire le résultat en LETTRES alors que moi j'écrivais en chiffres donc automatiquement ça ne pouvais pas fonctionner. il faut que je vois pour les erreurs mysql mais ne t'inquiète pas je sais très bien que ces erreurs ne viennent pas de ton script c'est mon mysql_fetch_array qui plante. Par contre il y à quand même un problème c'est la phrase "Vous n'avez pas répondu correctement à la question ...." s'affiche à chaque fois Modifié par stef59280 le 10/03/2007 17:41 |
| |
|
| Malcolm | Posté le 10/03/2007 à 18:15 |
Astucien
7271 Messages
| je pense avoir compris ... c'est parce que ton traitement de formulaire doit être dans le même fichier que l'affichage de celui-ci et que quand on arrive sur le fameux fichier (la page livre d'or) il traite le formulaire... Mon tuto montre un exemple mais c'est vrai que je n'ai pas précisé cela. Il faut que tu ne fasses cette vérification que si $_POST['submit'] existe (si ton bouton de validation a son name qui vaut submit). Je précise ça dans mon tuto. |
| |
|
|
| Haut de la page |