> Tous les forumsForum des Webmasters

 Livre d'or et spam
Statut du sujet : NON RESOLU Imprimer
 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

 Afficher le profil de stef59280Envoyer un message privé à stef59280
 
 
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?
Afficher le profil de Kheops13Envoyer un message privé à Kheops13
 Revenir en haut de la page
 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
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 Malcolm  Posté le 04/03/2007 à 12:45  
  Astucien


7271 Messages
tu peux interdire les liens a href="..." tout simplement...
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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.
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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.

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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.
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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 ...

}

?>

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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();

?>

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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 ?
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de 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 ?

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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 ...

}

?>

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 stef59280  Posté le 07/03/2007 à 19:35  
Petit astucien

344 Messages
ok je regarde et je te tient au courant
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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 ?

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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.
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 Malcolm  Posté le 10/03/2007 à 10:57  
  Astucien


7271 Messages

Tiens, je viens de remettre en forme mes explications au dessus : http://www.php-astux.info/formulaires-anti-spam.php

je pense que ton souci vient du traitement, tu ne dois pas pouvoir refaire appel à la fonction, car celle-ci n'est pas déclarée...

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 stef59280  Posté le 10/03/2007 à 12:29  
Petit astucien

344 Messages

Salut malcolm

Merci pour le tutos sur ton site. Je l'ai suivit à la lettre mais va voir sur mon site ce que ça fait. http://langages.astuces.free.fr/livre-or.php

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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)

Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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
Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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.
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte




Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page