Cela commence comme un conte : « Il était une fois un WordPresss sur lequel arrivaient des commentaires »… Mais ça ne fait as rêver ! Après avoir mis en place un captcha, un antispam, je continue à recevoir quelques commentaires indésirables.
Il me semble opportun de signaler d’ailleurs que Askimet (le plugins par défaut recommandé par WordPress ) contrairement à ce qui semble suggéré dans de nombreux posts, n’est pas gratuit. En effet, à l’instant où votre site recouvre une activité induisant une activité commerciale, vous devez payer un montant mensuel.
Bref, malgré les outils de prévention mis en oeuvre, les mouches continuent de passer au travers des mailles. De fait, quoi de mieux que le miel pour attirer les mouches ? Oui, je sais, mais non, on reste dans la métaphore du conte, s’il vous plait…
Bien évidemment, ces spams sont engendrés par des bots qui ont identifié votre formulaire WordPress. Ils remplissent les champs automatiquement, contournent les protections, et envoient automatiquement le contenu du formulaire.
C’est là qu’intervient la technique du « pot de miel » (HoneyPot). Le principe est de mettre des champs connus de WordPress, qui vont donc être remplis par ces robots, mais que l’on rendra invisibles via le CSS. Ainsi, si ce champ est fourni, c’est simplement que c’est un robot qui l’a rempli.
Il suffit alors d’utiliser le champ « URL », un vieux champ que je trouve inutile car il me semble que la plupart des commentaires sont faits par des personnes qui n’ont pas forcément de sites à publier. Ce champ a rapidement été dévoyé par les spammers pour tenter de maximiser des références vers des sites afin d’accentuer artificiellement leurs SEO. Donc, finalement, ce champ est un assez bon indicateur de spam.
La stratégie est donc la suivante:
- Laisser votre champ URL dans le formulaire
- Mais le cacher via CSS
- Filtrer les commentaires dont le champ URL est rempli
Cacher le champ URL
Une difficulté à régler est que ce champ est souvent encadré car des éléments de mise en forme relativement générique qu’il faut également cacher.
Pour s’affranchir des différents thèmes et de leur façon de gérer les formulaires, je propose la solution qui consiste à encapsuler le champ URL dans un élément accessible au CSS (avec la fonction my_filter_url_field).
Pour rejeter les commentaires ayant un contenu dans le champ URL, on peut faire appel au filtre pre_comment_approved, via la fonction my_filter_comment.
Ainsi, dans le fichier functions.php de votre thème (ou thème enfant), ajoutez le code suivant:
function my_filter_url_field( $fields ) { if (isset($fields['url'])) { $fields['url'] = '<span class="in_comment_author_url">'.$fields['url'].'</span>'; } return $fields; } function my_filter_comment( $approved , $commentdata ) { if (!empty($commentdata['comment_author_url'])) { return 'spam'; } return $approved; } add_filter( 'pre_comment_approved' , 'my_filter_comment' , '99', 2 ); add_filter( 'comment_form_default_fields', 'my_filter_url_field' );
Ensuite, if suffit de placer dans votre CSS:
.in_comment_author_url { display: none; }
Vous retrouverez ainsi les commentaires directement classés en « indésirables ».
0 commentaire