Formulaires et commentaires WordPress : comment bloquer les spams ?

stop wordpress spamVous l'apprendrez vite si ça n'est pas déjà fait, plus votre site gagne en fréquentation, plus il gagne en spam. C'est la rançon de la gloire : plus de visiteurs = plus de mails parasites... c'est invariable, et ça peut vite devenir insupportable !

L'un des sites dont je m'occupe s'est mis à recevoir un spam toutes les 10min… c'est la goutte d'eau qui a fait déborder la boite aux lettres.

Les anti-spam comme Akismet ou Antispam Bee peuvent apporter de bon résultats dans un premier temps, et j'apprécie tout particulièrement Antispam Bee qui est simple et efficace (et dont les cookies ont plus de respect pour la vie privés), mais ces solutions peuvent s'avérer insuffisantes...

Quelle solution pour stopper le spam avec WordPress ?

EFFICACE

La solution doit tout d'abord être efficace, radicale. Pour cela, je mettrais de coté les solutions qui consistent à bannir des IP, des mots, ou qui fonctionnent sur listes, puisqu'elles ne sont pas exhaustives. De plus, mon spam toutes les 10 minutes contient uniquement des chaînes de caractères aléatoires, et est posté d'une ip différente à chaque fois... pas sûr que ça l'arrête.

INVISIBLE

captcha illisibleIdéalement, la solution doit être invisible de l'utilisateur. On a plutôt tendance à encourager les visiteurs à prendre contact ou à laisser un commentaire ; il est donc délicat de leur demander de prouver qu'ils sont bien humains.

L'idée, c'est plutôt que les scripts se crament d'eux-mêmes.

La solution : Le pot de miel (honeypot)

Et oui, car ne l'oublions pas, un script n'est pas intelligent, et il va remplir tous les champs des formulaires qu'il va croiser… l'idée est donc d'ajouter un champ dans vos formulaires et de le masquer à l'affichage. Si ce champ, qui est invisible aux humains, est rempli, c'est que ce n'en est pas un et qu'il faut bloquer l'envoi du formulaire... tout simple en somme !

Une déclinaison consiste à afficher ce champ avec l'intitulé "Laissez ce champ vide", mais bon, nous avons encore un peu de temps avant que les scripts repèrent le fait que celui-ci soit masqué, surtout si le champ s'appelle "Comment"... aucun robot spammer ne peut y résister !

Comment appliquer cette méthode concrètement sur les différents formulaires de WordPress :

Stopper le spam sur les commentaires WordPress

Vous pouvez opter pour la solution plugin avec Spam Honey Pot, Zig Trap ou encore NoSpamNX. Il y a aussi Anti-spam pluggin qui ajoute en plus un champ demandant l'année courante.

Mais bon, vous pouvez aussi le mettre en place vous-même, entre autres pour garder la main sur son fonctionnement et pouvoir le modifier si nécessaire. Pour ça, je vous propose un truc assez vicieux et facile à mettre en place : ajouter un champ qui remplacera les champs de commentaire existants, et faire du champ "Comment" existant notre pot de miel !

Tout d'abord, ajoutez le nouveau champ à votre fichier /wp-content/votre-theme/comment.php

<textarea name="comment" id="comment"></textarea><!-- Trouver cette ligne -->
<textarea name="pour_humain" id="pour_humain"></textarea><!-- Ajouter ceci -->
Utilisez bien un champ textarea car certains navigateurs remplissent automatiquement les champs input

Ensuite, masquez l'ancien champ Comment, ou plutôt, mettons-le hors de la fenêtre :

#comment {
     position:absolute;
     left:-9000px;
}

Enfin, ajoutez au fichier /wp-content/votre-theme/functions.php la fonction qui bloque le commentaire si le champ "Comment" est renseigné, puis qui insère notre nouveau champ comme contenu du commentaire :

function block_nonhumain_comments($commentdata) {
     $faux_textarea = trim($_POST['comment']);
     if(!empty($faux_textarea)) wp_die('Erreur !');
     $comment_content = trim($_POST['pour_humain']);
     $_POST['comment'] = $comment_content;    
     return $commentdata;
}

add_filter('pre_comment_on_post', 'block_nonhumain_comments');

Ajouter un honeypot à vos formulaires générés avec Form contact 7

Si vous utilisez le très bon plugin Contact Form 7, vous pouvez ajouter un Honet Pot avec le plugin Contact Form 7 Honeypot. Installez-le, puis ajoutez un champ Honeypot où vous le souhaitez dans chaque formulaire que vous voulez qu'il protège… le plugin les masquera automatiquement : le tour est joué.

Un formulaire fait-maison

Si vous utilisez des formulaires fait-maison, commencez par ajouter notre champ Honeypot à votre formulaire :

<textarea id="comment" type="text" name="comment" value=""></textarea>

Puis envoyez votre champ hors de la fenêtre pour le rendre invisible des utilisateurs :

#comment {
     position:absolute;
     left:-9000px;
}

Enfin testez et bloquez l'envoi si le champs est renseigné :

<?php if(trim($_POST['comment']) !== '') {
     $Nohuman = true;
} ?>
Encore une fois, utilisez bien un textarea et non un input, que certains navigateurs remplissent automatiquement.

Et pour le message éventuellement :

<?php if(isset($Nohuman)) { ?>
          Une erreur est survenue lors de l'envoi du formulaire.
<?php } ?>

Voilà, le calme est revenu depuis dans ma boite mail... le bonheur !

Poursuivre votre lecture

Laisser un commentaire

Si vous insérez du code, merci d'utiliser les balises [php] en début et [/php] en fin, ou [html] et [/html]...