Lutter contre le spam dans dotclear
par Ploum le 2006-04-29
Non content d’envahir notre boîte aux lettres, voilà que le spam devient de plus en plus présent sur les blogs, aux points de rendre ceux-ci inutilisables avec les commentaires activés.
Si vous n’avez pas de blog, je ne peux que vous conseiller d’en créer un (avec DotClear par exemple) et d’y raconter des histoires que vous inventez ! Si vous avez un blog sous DotClear, nous allons voir ensemble comment solutionner le problème du spam.
Un bon système antispam
À mes yeux, un bon système anti-spam doit avant tout être invisible pour les utilisateurs. Je suis très flatté que des gens prennent la peine de commenter mon blog, je me refuse à leur imposer la moindre épreuve pour pouvoir poster un commentaire.
Il est donc hors de question de voir sur mon blog un système comme les captchas. Avec une vue parfaite (selon mes derniers tests médicaux) et un très bon écran, j’échoue à près du quart des sites avec des captchas ! Je n’ose donc pas imaginer ce que doivent endurer les visiteurs avec une déficience visuelle (même minime), un vieil écran ou surfant depuis un PDA par exemple.
Exemples réels de captchas. Savez-vous les lire ?
Autre chose : je pense qu’il est possible, dans la plupart des cas, de distinguer à coup sûr un robot d’un visiteur normal (contrairement aux mails). Je ne suis donc pas pour l’utilisation d’un système probabiliste comme SpamClear, système qui oblige de temps en temps à aller vérifier si un commentaire légitime ne s’est pas glissé dans le spam.
DĂ©sactiver Ă 100% les spams dans les trackbacks
Un trackback est un signal envoyé par un site sur votre blog pour dire « Eho ! Je parle de ce billet ! ». Le trackback comporte donc un lien vers le site qui parle de votre billet. Les spams eux sont envoyés par des robots et comportent un lien vers un site de vente de médicaments.
Il suffit donc de vérifier si le site qui a envoyé le trackback est le même que celui dont l’adresse est décrite dans le trackback. Un spammeur ne peut pas se permettre cela car il pourrait être facilement retrouvé et attaqué en justice. Ils utilisent donc des robots un peu partout sur le net pour envoyer son trackback, pas le site décrit lui-même. Cette idée a été proposée par Digimag et fonctionne à 100% sous DotClear 1.2.3.
Dans le fichier tb.php de votre installation dotclear, identifiez la ligne
require dirname(__FILE__).$app_path.'/inc/prepend.php';
(aux alentours de la ligne 25)
Juste après, rajoutez le code suivant :
function ipCheck() { $siteInfo = @parse_url($_REQUEST['url']); if (!$siteInfo) return false; $ip = gethostbynamel($siteInfo['host']); if ($ip && in_array($_SERVER['REMOTE_ADDR'],$ip)) return true; else return false; }
Ensuite, trouvez le else aux alentours de la ligne 124. Il ressemble Ă :
} else { $url = $_REQUEST['url'];
Dans la ligne juste avant le else (entre le symbole « } » et le « else »), insérez :
elseif (!ipCheck()) { $content = '<error>1</error>'." ". '<message>The URL of the post and the IP from the trackback don\'t match !</message>'; }
Et voilà ! Plus de trackbacks spam. Les trackbacks légitimes eux passeront sans problème.
UPDATE : il semblerait que ce faisant vous bloquez aussi malheureusement quelques trackbacks légitimes de blogs chez certains hébergeurs. Dans mon cas personnel, les personnes concernées peuvent continuer à faire un trackback en utilisant tb_nospam.php à la place de tb.php.
UPDATE 2 : Sacha a finalement réussi à affiner et améliorer sa solution
DĂ©sactiver 90% des spams dans les commentaires
L’idée de base que j’ai vu sur un site est le suivant : mettre dans le formulaire des commentaires un champ vide avec la marque : « laissez ce champ vide pour poster un commentaire ». Il y a fort à parier que la majorité des robots va remplir ce champ par une adresse internet ou un nom quelconque. Jérôme Combaz a découvert que les robots spammers sont tellement bête qu’on peut appliquer ce système en mettant ce champ « magique » en commentaire dans le code. Vos visiteurs ne verront aucune différence mais les robots, eux, rempliront le champ.
Mise en oeuvre :
Dans le fichier /themes/votredossiertheme/form.php, (« votredossiertheme » étant généralement « default ») ajoutez cette ligne :
<!-- <input name="pauvgars" value="vatecoucher" /> -->
juste avant « » (il y’en a en fait deux. Vous pouvez rajouter la ligne aux deux, ça ne coûte rien) .
Et dans /layout/prepend.php, chercher la ligne contenant :
if ($blog->addComment($post_id,$c_nom,$c_mail,$c_site,
et transformez-la en :
if (isset($_POST['pauvgars']) || $blog->addComment($post_id,$c_nom,$c_mail,$c_site,
Voilà ! Si les spammers commencent à comprendre ce système, on cachera le champ magique dans la CSS.
Et pour ce qui passe encore…
Je vous conseille d’installer le plugin Spamplemousse pour dotclear qui fait du filtre sur les mots clés. Au début, j’ai du supprimé pas mal de mots clés qui induisaient des faux positifs. Par contre, je vous conseille fortement de rajouter le mot clé « a href ».
Mais bon, spamplemousse est-il encore nécessaire ?
UPDATE : ces techniques ne sont malheureusement pas efficace contre une nouvelle forme de spam ne mettant que des messages appropriés genre : « thanks » ou « great, I’m using Firefox ».
REUPDATE : J’explique ici comment faire un faux champ « site » dans son blog. Cela m’a permis de n’avoir plus que un ou deux spams par semaine, tous détectés par spamplemousse.
Je suis Ploum et je viens de publier Bikepunk, une fable écolo-cycliste entièrement tapée sur une machine à écrire mécanique. Pour me soutenir, achetez mes livres (si possible chez votre libraire) !
Recevez directement par mail mes écrits en français et en anglais. Votre adresse ne sera jamais partagée. Vous pouvez également utiliser mon flux RSS francophone ou le flux RSS complet.