Bonjour,
voici la solution "antispam" adoptée personnellement, si cela vous intéresse (sur une version 4.6) :
Le principe est tout simple et se base sur une constatation : Les robots remplissent
tous les champs d'un formulaire.
Il s'agit donc d'ajouter un champ qui sera masqué aux visiteurs (par le biais d'un style css) et qui devra demeurer vide pour que la validation soit acceptée.
(trois fichiers sont à modifier dont deux natifs = modifs à refaire si patch les concernant ou migration)
Fichier inc/
boxnewslet.inc après la ligne :
Code : php<form name="subscribe" action="<?php echo CHEMIN; ?>newsletter.php?lng=<?php echo $lng; ?>" method="post">
ajouter un champ vide :
Code : php<input class="mask" name="host" type="text" value="" />
Fichier
style.css de la skin utilisée, ajouter :
Code : css.mask {
display: none;
}
Fichier
newsletter.phpjuste après :
Code : phphtable($web222, "100%");
ajouter :
Code : phpif((isset($_POST['host']) && empty($_POST['host'])) || ($action == 'confsub') || ($action == 'unsub'))
{
et à la fin du fichier :
juste
au dessus de
ajouter
C'est tout.
Et si vous souhaitez recevoir un email à chaque tentative de spam, vous pouvez toujours temporairement ajouter ces quelques lignes :
Code : phpelse { // si spam détecté
echo '<p>La soumission du formulaire est probablement dûe à un robot.<p/><p>Son IP = <b>'.$_SERVER["REMOTE_ADDR"].'</b></p>';
$sujet = $site[0]." - Tentative de spam newsletter";
$body = $nlpseudo." (".$nlmail.") a tenté de spammer la newsletter de ".$site[0]."\n";
$body .= "Son IP = ".$_SERVER["REMOTE_ADDR"]."\n";
eMailHtmlTo($sujet,$body,"");
} // fin spam détecté
Très efficace. Pour l'instant, 100% des robots ont rempli ce champ qui devrait rester vide puisque le visiteur "humain" ne le voit pas ;)
Cordialement,
Ludo