Laboratoire pédagogique du Greta du Velay

Laboratoire pédagogique du Greta du Velay

Un antispam pour Dotclear

Temps de lecture estimé à 4 min. 15 sec.
Enervé par des commentaires répétitifs de spammers (pipi, caca, etc), j'ai légèrement modifié Dotclear de façon à berner ces messieurs. Les systèmes antispam que j'avais testés ne me convenaient pas, puisqu'il fallait rester aux manettes pour effacer les commentaires indésirables. En fait les spammers sont assez feignants (sinon ils ne feraient pas ce métier). Ils cherchent à automatiser à moindre frais pour poster sur les systèmes de blog les plus populaires. Il suffit d'introduire une petite modification dans le fonctionnement de son gestionnaire de blog pour débusquer les trompeurs. Quand un spammer réussi à passer j'ajoute une nouvelle méthode de détection. Pour l'instant ce petit hack de Dotclear suffit à tromper ceux qui nous ennuyaient. C'est simple, plus aucun commentaire de spam ! Pour les sceptiques, voici le log des messages de spam reçus sur ce blog (vidé de sa moitié de temps en temps). MAJ : ce blog fonctionne maintenantavec Wordpress. IMPORTANT : Il faut appliquer successivement les modifications (méthodes de détection) proposées ci-dessous, et non pas en choisir une au hasard (à moins de comprendre ce que l'on fait). Ou bien vous pouvez télécharger les fichiers modifiés, en bas de page. Et surtout, n'oubliez pas de tester vos modifications en vous envoyant un commentaire.

Méthode de détection 1

Dans le fichier /themes/votredossiertheme/form.php, ajouter cette ligne :
<!-- <input type="hidden" name="name" value="value" /> -->
juste avant le dernier champ fieldset :
</fieldset>
Et dans /layout/prepend.php, chercher la ligne contenant :
if ($blog->addComment($post_id,$c_nom,$c_mail,$c_site,
et transformer en :
if (isset($_POST['name']) or     $blog->addComment($post_id,$c_nom,$c_mail,$c_site,
Voilà. Un navigateur respecteux ignorera le commentaire (et n'enverra donc pas le champ caché), un spammer irrespectueux ne prend pas le peine de tester le commentaire HTML et son message sera ignoré... Très facile à contourner, mais en attendant ça filtre les ballots.

Methode de détection 2

Si le spammer n'analyse pas le contenu HTML de la page, le hack ci-dessus est inefficace. Mais dans ce cas, il doit connaître la nature des champs à envoyer au serveur pour poster le message. Changeons un peu le code de façon à rendre son automatisation obsolète : Toujours dans le fichier /themes/votredossiertheme/form.php, chercher la ligne contenant :
<textarea name="c_content" id="c_content" cols="35" rows="7">
et transformer en :
<textarea name="c_content_blabla" id="c_content" cols="35" rows="7">
Ensuite dans /layout/prepend.php, remplacer c_content par c_content_blabla (à deux endroits, lignes 226 et 232). Si le robot spammer automatise son envoi, il utilisera c_content comme nom de champ. Mais votre DotClear customizé s'attend à recevoir le message dans c_content_blabla, qui sera vide. Plouf !

Methode de détection 3

Certains spammers bourrent les champs TEXTAREA du formulaire avec leurs infamies. Trompons un peu plus l'ennemi avec cette méthode 3. Pensez également à appliquer les méthodes 1 et 2 ci-dessus. Dans le fichier /themes/votredossiertheme/form.php, ajouter cette ligne :
<p class="field" style="display: none">Commentaire :
  <textarea name="c_content" cols="35" rows="7">Ne pas modifier ceci !</textarea> </p>
par exemple juste avant :
<p class="field"><label for="c_content">Commentaire :</label>
Ensuite dans /layout/prepend.php, modifier la même ligne que dans la méthode 1 pour avoir :
if (isset($_POST['name']) or $_POST['c_content'] != "Ne pas modifier ceci !" or
  $blog->addComment($post_id,$c_nom,$c_mail,$c_site,
Normalement ce champ de formulaire n'est pas affiché par le navigateur (s'il connait CSS) et n'est donc pas modifié. Les robots devraient tomber dans le piège en remplissant ce champ, chose à ne pas faire pour que le commentaire soit pris en compte... Et comme le nom du champ est celui normalement utilisé par Dotclear (c_content), cela donne une chance supplémentaires aux spamikazes de tomber dans le panneau.

La suite

Quand les robots contourneront ces tests, il faudra en inclure un autre, puis un autre, etc. Au mieux on élimine les messages dont on est sûr qu'ils sont un spam, au pire on les laisse passer, et dans ce cas un plugin antispam peut prendre la relève, comme d'habitude. A l'inverse, une méthode supplémentaire basée sur JavaScript pourrait confirmer que le message n'est pas un spam. Le tout est de s'adapter plus vite que l'ennemi. Mais comme les spammers ne consultent jamais les sites qu'ils poluent, nous sommes tranquilles ! Sinon, d'autres solutions techniques contre le spam des trackbacks sont proposées dans les commentaires ci-dessous.

Les fichiers modifiés

Vous pouvez obtenir les fichiers en service actuellement sur ce blog : form.php et prepend.php (attention, un fichier de log spamlog.txt est créé sur la racine du site pour enregistrer les messages ignorés). Même si ce serait plus pratique, il n'y aura probablement jamais de plugin Dotclear clef-en-main, car l'uniformisation amènerait rapidement des contournements de la part des spammers. Restons isolés pour éviter les tirs groupés !

Commentaires

Merci pour ce hack. Depuis un moment, c'est un veritable fléau ce spam des commentaires (des jours, j'en plus de 200 !). Je vais donc essayer ton astuce, bien que je ne comprenne pas comment elle marche :) Un spam comment automatisé remplacera le input hidden, et ne passera pas, c'est ca ? Alors qu'en manuel, ce champ "pipeau" sera encore là et validé ? Mais pourquoi le mettre en "non lu" dans <!-- (...) --> ? Bref, je vais essayer :)

Juste une chose, dans le prepend, à :
if ($blog->addComment($post_id,$c_nom,$c_mail,$c_site

j'ai une virgule à la fin :
if ($blog->addComment($post_id,$c_nom,$c_mail,$c_site,

Je la laisse pour ton hack ?

Oui, désolé pour la virgule, j'ai modifié le billet.

En fait un navigateur normal ignore le commentaire (donc le champ caché), puisqu'il respecte les standards. Visiblement les spammers cherchent tout ce qui ressemble à un champ et valident le formulaire, sans se préoccuper du commentaire html. Donc ils se "révèlent", et il suffit d'ignorer leur envoi. S'ils modifient leur façon de faire, il faudra inclure un autre hack...

Jerome

Je teste. J'ai fermé les comments depuis plusieurs mois, et n'osais les réouvrir.

Si ça marche, chapeau. Belle tentative en tous cas.

Merci pour l'astuce. Rien n'empêche d'ailleurs d'installer aussi Spamplemousse en complément, qui fait du filtrage par mots clés.

bistouri: Oui, ce hack élimine le spam "sûr", à partir d'un seul critère (envoi d'un champ commenté). On pourrait en imaginer d'autres pour affiner le tri. Spamplemousse peut continuer d'assurer le niveau de filtrage suivant.

Bon, maintenant il faut s'attaquer au spam des trackbacks :)

Jerome

C'est vrai, Jerome. Mes trackbacks sont sauvagement attaqués, malgré tout ça a résolu 50% de la nuisance.
Je me demande souvent combien gagne le -con- -spammeur- (rayez la mention inutile) régulier pour nous pourrir la vie ...

Il existe deux très bon plugins antispam, à voir sur le site de DotClear :)

>Fyter:
Merci pour l'info, je ne conaissais que plemousse jusqu'à présent.
Pas très sympa la remarque du "Gentil dictateur" vis à vis de Mahdi, l'auteur de SpamClear :/

bjr. Faut-il désinstaller le plugin antispam avant, ou c'est compatible ?

Non non, pas de conflit avec toute autre solution antispamique. En cas de spam avéré le commentaire est simplement ignoré. Sinon, le fonctionnement de dotclear reste identique. c-a-d un plugin antispam peut s'occuper d'un filtrage supplémentaire.

Jerome

J'ai fais la manip, j'ai toujours des spams sniff apparemment vos craintes de contournement sont justifiées ;)

J'ai définitivement résolu le problème des spams trackbacks par la méthode suivante :

www.dotclear.net/forum/vi...

ça marche super bien. Je reçois des trackbacks normaux mais plus un seul spam.

Anne O'Nyme : Ah... alors il est temps d'introduire la deuxième vérification...

Si vous êtes spammé régulièrement, accepteriez-vous qu'on essaie ensemble de voir comment votre perturbateur s'y prend ? Je ne peux pas le faire ici, plus de spam en ce moment (à part ceux qui sont ignorés !). Mais j'attends le futur candidat avec impatience. En attendant, il faut faire quelques modifs dans dotclear pour voir comment le spammer procède pour POSTer le formulaire.

A vous lire,
Jerome

Ploum: merci de l'info. Bientôt le calme plat dans les commentaires ET les trackbacks !

Jerome

name="pauvgars" value="vatecoucher"
Ce n'est pas super intelligent, il ne faut pas répondre à une agression par la colère.

Mais merci pour l'astuce que je vais tester

Tu as raison Jean Claude, restons stoïques ! j'ai modifié le billet en conséquence (name="name" value="value").

Jerome

François Granger a fait un billet sur spamclear, qui apparemment protège commentaires et trackbacks.

Jérôme,

Une mise à jour du correctif proposé par Digimag pour filtrer le messages indésirables dans les rétroliens est disponible à cette adresse :
le-libre.be/?2006/05/04/1...
Le sujet sur le forum n'est plus d'actualité.

J'ai utilisée ta méthode en plus de spamclear mais certains spam passe quand meme :(

Pareil sur ce blog. Je teste donc la méthode 3 :) Courage en attendant !

Jerome

Vous disant le plus grand des mercis pour ce billet. J'aurais cependant une question... J'avais mis le fichier modifier «form.php» à cet endroit theme/montheme/ sauf que ce faisant au lieu de publier les commentaires écrits, dotclear publiait «ne pas modifier ceci». J'ai déplacé «form.php» vers theme/default/ et la chose est redevenu normale. Est-ce que cette façon de procéder fonctionnera aussi? Est-ce que le theme default est celui qui est interpellé lorsqu'il n'y pas d'équivalent dans le theme «montheme»? Encore une fois, grand merci!

<p>Probablement avez vous oublié de modifier prepend.php ? Il s'agit bien du form.php dans "theme/montheme/".<br />
<br />
Pour info, le nom du faux champ texte est celui qu'utilise dotclear par défaut (c_content), de façon à bien enfoncer les robots ! D'où l'apparition du "ne pas modifier ceci" dans vos commentaires, qui n'apparaitra pas quand tout sera bien installé.<br />
<br />
Jerome<br />
</p>

D'acc. Merci pour tout!

Oué je pense aussi que j'ai fait une grosse boulette dans mes modifs :)
J'ai encore pas pris le temps de reinstaller tout ça, mais va falloir que je le fasse car spamclear detecte bien les spams mais n'empeche pas les spams, donc c'est assez inutile finalement

<p>Il y a deux fichiers à coller, soit environ 5 secondes et demi d'installation :)<br />
<br />
Jerome</p>

Trackback manuelle:
=> thenico.fr.eu.org/site/in...

À lire si vous utilisez Spamplemousse et la méthode 3.

De rien, merci à vous. Je vais voir mes log afin d'en savoir un peu plus sur votre commentaire :) La méthode 4 reste à inaugurer !!

Pénibles ces spams ! Je passe plus de temps à essayer de règler des problèmes techniques qu'à mettre du contenu sur mon blog. J'essaye les méthodes décrites ci-dessus. Merci d'avance.
Une remarque : dans la méthode 1, il faut ajouter la ligne juste avant le dernier </fieldset> dans form.php.

Merci de signaler l'imprécision, je mets à jour le billet. Oui il s'agit bien du 'dernier' fieldset. Voir le fichier modifié ici : /wp-content/download/dotclear/form.php_

Le plus simple est de remplacer les 2 fichiers form.php et prepend.php par ceux que je donne.

Jerome

Merci pour ce tuto, je vais tester. C'est vrai que c'est vraiment galere ces spam de mer... J'avais le meme probleme avec mon forum ipb.

++ Deleter23

je viens de linstaller sur mon blog en éspérant ke ca ira mieux ! En 2 jours 800 spams commentaires !!! grrr

Puisque la plupart des spams sont placés par des robots, je pense que la première façon d'échapper au spam est de ne pas spécifier le nom de d-o-t-c-l-e-a-r en clair sur son blog. Ces robots ne se contentent pas de spammer mais crawl aussi le web ou le SERP des moteurs de recherche pour trouver des blogs. Une fois qu'ils vous ont spammé une fois, c'est la cata qui commence. Je suis a peu près sur que ces spammeurs professionnels se refilent ou se vendent les url à spammer comme ils le font avec les emails. J'ai deja conçu des systemes de commentaires qui n'ont jamais été spammés pendant des années par qu'ils étaient fait maison.

je viens d'installer ses modifications, après avoir viré des centaines de spam, j'espère que cela va marcher, en tout cas merci à l'avance pour les efforts fournis, afin de tenter d'endiguer la pollution ;)

Pas de raison que cela ne marche pas comme ici ! Voir le log des spams ignorés : http://conseil-recherche-innovation.net/spamlog.txt
Jerome

Salut Jérôme,

Ta méthode me semble séduisante mais pour l'instant je galères à essayer de l'installer, quand je poste un commentaire ça m'affiche systématiquement "Ne pas modifier ceci !", j'ai pourtant copié les fichiers que tu as mis en ligne dans les emplacements appropriés donc que faire ? :s J'aimerais bien que ça marche ! :)
Je suis chez Free et sous dotclear 1.2.6

Salut Benoit,

Je n'utilise plus DC depuis un moment, difficile de t'aider.

Essaie quand meme de modifier forum.php comme ceci : change dcCommentFormValue('c_content'); par dcCommentFormValue('c_ccontent'); (note le double c).

Dis moi ce qu'il en est, pour que je modifie si besoin.

Jerome.

Bonjour,

Et ce serait trop compliqué à gérer de renommer le tb.php ? Parce que les robots doivent bien savoir qu'ils doivent chercher
ce fichier non ? Alors en changeant son nom pour quelque chose de "débile" ça pourrait ptet aider... :)

@Guillaume: non, je ne pense pas que ce soit très compliqué. Mais pas sûr que ça ne soit pas déjà contourné.

Quoi qu'il en soit, moins un site ressemble à ses semblables (au niveau de la structure HTML et du code), et moins il est spammable.

Jerome

J'ai installer un système approximativement pareil sur mon blog et plus de problème depuis :)