Page 1 sur 1
Spam livre d'or
Posté : 26 août 2006, 22:10
par ppahv
Bonjour, j'ai un livre d'or sur mon site sans base de données qui se fait régulièrement spamé.
Comment puis-je interdire l'écriture d'url.
Mon livre fonctionne avec un fichier signer.php qui écrit dans un fichier livre.html
Je précise que je suis un débutant complet en php, j'ai récupéré ce livre par mon FAI.
Merci de votre aide
Posté : 26 août 2006, 22:18
par thehawk
je pense que tu pourrai un regex...
Site du zero
Posté : 27 août 2006, 09:47
par Invité
Merci de la réponse, effectivement cela pourrait-être la soluce, mais pas facile à mettre en place pour un débutant complet...
J'ai désactivé le livre pour l'instant car en plus du spam je me suis fait délété la page originale. J'ai chmodé les fichiers pour interdire l'accès.
Je vais essayer d'appliquer un regex mais c'est pas gagné....
Posté : 27 août 2006, 11:11
par charabia
Le plus simple serait de rajouter un champ "valid" avec 0 par défaut à chaque envoie de message. Ainsi tu valideras toi même le message avant de l'afficher.
C'est ce que j'ai fait sur mon livre d'or en plus d'un blocage.
Posté : 27 août 2006, 12:48
par ppahv
Le plus simple serait de rajouter un champ "valid" avec 0 par défaut à chaque envoie de message. Ainsi tu valideras toi même le message avant de l'afficher.
C'est ce que j'ai fait sur mon livre d'or en plus d'un blocage.
Ce serait en effet la meilleure méthode, mais je suis incapable de générer le code seul

, pourrais tu me donner un coup de main...
Merci d'avance
Posté : 27 août 2006, 15:00
par charabia
Oups je n'avais pas lu que tu n'utilisais pas de base de données...
Pour un débutant je te conseille ce site :
http://www.siteduzero.com/tuto-3-188-1- ... -d-or.html
Suis pas à pas et tu auras à la fin un beau l'ivre d'or. Si tu comprends tout, tu pourras rajouter te champ valid toi même

Posté : 27 août 2006, 16:37
par Slan
Le site du zéro utilise une BDD mysql, ce n'est donc pas la solution pour notre jeune homme...
Moi je ne vois qu'une solution simple : Un regex anti lien
Et une plus complexe à mettre en place : ecrire le livre d'or dans un fichier. Et une deuxieme page affichant ce fichier avec des cases a cocher pour les messages qu'il accepte, et pour ceux qu'il delette... Ceux acceptés etant transferer sur le fichier du livre d'or normal.
Sinon peut etre qu'en utilisant un script de livre d'or diférent il evitera les spam, car c'est peut etre son hebergeur qui fourni aux spameurs les moyens de cibler facilement les livres d'or qu'il propose a ses hébergés.
Posté : 27 août 2006, 17:11
par charabia
Le site du zéro utilise une BDD mysql, ce n'est donc pas la solution pour notre jeune homme...
Il n'a jamais dit qu'il ne voulait pas le faire

Juste qu'il ne savait pas le faire. Ce tuto peut lui permettre de faire un livre d'or plus évolué.
En plus d'apprendre quelque chose de nouveau, il commencera ses pas dans le PHP

Posté : 27 août 2006, 18:34
par ppahv
Merci de votre aide, le tuto du zéro demande effectivement un BD.
Moi je ne voudrais pas avoir à refaire un livre d'or qui existe depuis 2003 et est bien rempli.
Donc en demandant de l'aide sur le forum du zéro, la soluce du regex est celle que j'ai adoptée, c'est presque bon.
Seul défaut pour l'instant je filtre bien les spams, mais cela poste quand même un message vide.
Posté : 27 août 2006, 18:42
par thehawk
tu peux mettre une condition dans ton script par exemple
if ($message != "")
{
// script pour poster le mesage
}
bien sur il faute que tu modifie la variable mais le mieux est de nous montrer le code pour qu on puisse t aider
En esperant que cela t aide ...
Posté : 27 août 2006, 19:17
par ppahv
Merci de l'aide, voici le code du fichier signer.php
Code : Tout sélectionner
<?php
// Si vous désirez adopter la même présentation que notre script :
// Indiquez ici la couleur de bordure des tableaux
$borduretable = "#000000";
// Indiquez ici la couleur de fond des tableaux
$backgroundtable = "#FFCC99";
// Indiquez ici la couleur de fond du tableau contenant les messages du livre d'or
$backgroundtable2 = "#FFFFFF";
// Indiquez ici la largeur du tableau
$largeurtable = "900px";
// Sinon, libre à vous de modifier la mise en page ci-dessous
echo '
<table style="border: thin solid '.$borduretable.'; font-family: Verdana; font-size: 12px; width: '.$largeurtable.'; background-color: '.$backgroundtable.';">
<tr>
<td width="50%"><a href="livre_lire.php">Lire le livre d\'or</a></td>
<td width="50%">Signez le livre d\'or</a></td>
</tr>
</table>
<br><font color="red" face="Verdana"><b>Les messages contenant du spam ou des URL seront systématiquement effacés.</b></font>
<br>';
// si le formulaire n'a pas été validé, la variable $poster est différente de "oui"
// on affiche donc le formulaire
if($poster!="oui"){
echo '
<table style="border: thin solid '.$borduretable.'; font-family: Verdana; font-size: 12px; width: '.$largeurtable.'; background-color: '.$backgroundtable.';">
<tr><form action="">
<td><div align="right">Nom ou Prénom:</div></td>
<td><input type="text" name="nom" size="40" style="font-size:12px;"></td>
</tr><tr>
<td><div align="right">Email:</div></td>
<td><input type="text" name="email" size="40" style="font-size:12px;"></td>
</tr><tr>
<td valign="middle"><div align="right">Message:</div></td>
<td><textarea cols="62" rows="10" name="message" style="font-size:12px;"></textarea></td>
</tr><tr>
<td colspan="2" align="center">
<input type="hidden" name="poster" value="oui" />
<input type="submit" value="Envoyer" / style="font-size:11px;">
<input type="reset" value="Effacer" / style="font-size:11px;">
</td>
</tr>
</table></center>
';
}
// si le formulaire a été validé, la variable $poster est égale à "oui"
// on traite donc les informations du formulaire
if($poster=="oui")
{
// On commence pas mettre en forme le message correctement
// suppression des balises HTML pour éviter les codes malveillant
$message = htmlspecialchars($message);
// convertion des retour chariots par des <br> et suppression des /
$message= nl2br(stripslashes($message));
// suppression des espaces en trop
// ex: si le visiteur à inséré trois espaces, un seul sera pris en compte
$message = ereg_replace("[ ]{2,}", " ", $message );
// On vérifie que le fichier contenant les anciens messages existe
if(file_exists("livre.html")){
// On copie le contenu des anciens messages dans une variable
// pour pouvoir y ajouter le message en cours
$fp=fopen("livre.html","r");
$contenu=fread($fp,filesize("livre.html"));
fclose($fp);
}
// On vide le contenu du fichier pour pouvoir y insérer le contenu
// de la variable contenant les anciens messages + le message en cours
$fp=fopen("livre.html","w");
fclose($fp);
// On ajoute le message en cours et on remet les anciens messages en dessous
// On met le nom, la date et l'email du message en cours dans une variable
$data="$nom - ".date('d/m/Y')." - e-mail : $email</td></tr></table>";
// On ouvre le fichier contenant les anciens messages
// (actuellement vide)
$fp=fopen("livre.html","a");
// On y ajoute le message en cours et les anciens messages
fputs($fp,"<table style='border: thin solid ".$borduretable."; font-family: Verdana; font-size: 11px; width: ".$largeurtable."; background-color: ".$backgroundtable.";'>
<tr><td>$data</td></tr></table><table style='border: thin solid ".$borduretable."; font-family: Verdana; font-size: 11px; width: ".$largeurtable."; background-color: ".$backgroundtable2.";'>
<tr><td> $message </td></tr></table><br>\n<!-- guest -->\n$contenu");
fclose($fp);
// On affiche un message de remerciement
echo '<span style="font-family: Verdana; font-size: 12px;">MERCI POUR LA CONTRIBUTION :-) </span>';
}
?>
Je vous préviens je suis nul en php, donc soyez clair pour le code à insérer

Posté : 28 août 2006, 15:42
par thehawk
petite remarque utilise la balise php
sinon le script est bcp moin compréhesible