Anti-spam Maison

Akismet c'est rigolo, mais j'ai toujours peur d'avoir des faux-positifs. Inspiré de la méthode anti-spam de 4chan, je me suis dis "pourquoi est-ce que je ne ferais pas pareil ?". Petit tour d'horizon.

EDIT: bon, j'ai été un grand naïf. Du spam est quand même passé. Bon. J'ai remplacé par une question simple que beaucoup de monde connait. Le code:

Dans le thème (comments.php):

<p><label for="spam_guard_check">Le petit prince, par Antoine de Saint-</label>
<input id="spam" name="spam_guard_check" type="text" tabindex="7" size="7" maxlength="20" />.</p>

Dans le wp-comments.php

if ( '' == $comment_content )
wp_die( __('Error: please type a comment.') );

$spam_guard_check = $_POST["spam_guard_check"];
if(strtolower($spam_guard_check) != "exupery"){
die("
<html><head>
<title>Vader is not pleased</title>
<style>body{background:black;color: gray;}p{text-align: center; font-size: xx-large}</style
></head>
<p>Je trouve votre manque de culture générale consternante... <br />
<img src=\"http ://b-612.yi.org/darth_vader.jpg\"/></p></html> ");
 }

Notez que je crée carrément une page html. Tout ça pour avoir un joli cadre pour mettre mon vader, hehe. Notez aussi la fonction strtolower(), qui permet de reconnaitre aussi bien Exupery qu'expery que eXuPeRy... quoique ce dernier je devrais le bannir, je ne supporte pas le mixed case :) .

---

L'anti-spam de 4chan est en fait très con: c'est des faux champs caché avec des titres attractifs ("name", "email") qu'il ne faut absolument pas remplir. Bon. Moi je suis trop fainéant pour rechercher tout ça dans Wordpress et surtout j'ai peur de foirer quelque part. Alors ce que j'ai fais, c'est simplement de mettre des cases à cocher avec des noms à la con. Le code est supra-simple (merci à deux trois gens qui utilisent la même grosso-modo la même méthode).

Dans la partie commentaire du thème que vous utilisez (généralement comments.php), ajouter

<p><input type="checkbox" name="spam_guard_check_living" value="1" /> <span style="font-variant: small-caps">(Antispam)</span> Êtes-vous un vivant ?
<br /><input type="checkbox" name="spam_guard_check_robot" value="1" /> <span style="font-variant: small-caps">(Antispam)</span> Êtes-vous un robot ?</p>
<p style="display: none;"><span style="font-variant: small-caps"> <input type="checkbox" name="spam_guard_check_superman" value="1" /> (Antispam)</span> Êtes vous Superman capable de remplir les champs caché ?</p>

juste sous le

<input id="submit">

Qu'est-ce que ça fait ?

J'ai créé un paragraphe avec trois checkbox (les <inputs type="checkbox">) . Ces checkbox vont envoyer des valeurs (1 ou 0) au serveur, qui va par la suite les traiter. Première fourberie: j'ai plusieurs checkbox, avec un qu'il faut cocher et l'autre qu'il ne faut pas cocher. Deuxième fourberie: une des checkbox est cachée au commun des mortels. Si quelqu'un la coche, c'est soit qu'il est un robot, soit qu'il arrive à lire à travers un display: hidden; , ce qui ne devrait pas être possible.

Côté serveur, le code est dans wp-comments-post.php, sous

if ( '' == $comment_content )
wp_die( __('Error: please type a comment.') );

C'est

$spam_guard_check_robot = $_POST["spam_guard_check_robot"];
if($spam_guard_check_robot == 1){
die("Les robots ne postent pas de commentaire !");
}
$spam_guard_check_living = $_POST["spam_guard_check_living"];
if(!$spam_guard_check_living){
die("Vous devez être vivant pour poster un commentaire !");
}
$spam_guard_check_superman = $_POST["spam_guard_check_robot"];
if($spam_guard_check_superman == 1){
die("Retourne sur Krypton, Superman !");
 }

Soumettre un commentaire