NoSPAM

Un plugin pour limiter le risque de spam dans les forums de SPIP.

Le plugin introduit plusieurs mécanismes visant à limiter l’envoi de spams depuis les formulaires de SPIP (forums publics, formulaires de contact, formulaires des pétitions).

Un jeton périssable

Les formulaires se voient dotés d’un jeton périssable et lié à l’IP. Ce jeton empêche la réutilisation du même formulaire au delà de la durée de péremption, et rend ainsi le post automatique par robot plus compliqué.

Modération automatique dans les forums non modérés

Le but des spammeurs est de publier du contenu en ligne. Si les messages suspects sont modérés, l’intérêt du site diminue pour les attaquants qui iront voir ailleurs.

Le plugin utilise donc quelques règles de prudence pour modérer automatiquement les messages suspects.

-  Si un message contient trop de lien, il est modéré automatiquement, voire mis à la poubelle (où il peut être repêché par le modérateur). Les liens vers le site lui-même ne sont pas intégrés à ce compte. À partir de la version 1.6.0, on peut utiliser la constante NOSPAM_DOMAINES_AMIS pour indiquer une liste de sites (séparés par une virgule) qui n’entrent pas non plus dans ce compte.
Par exemple, dans votre fichier mes_options.php :
define ("NOSPAM_DOMAINES_AMIS", "spip.net, core.spip.org");

-  De même, si une adresse IP identique a déjà envoyé trop de messages consécutifs dans un laps de temps donné, les nouveaux messages sont automatiquement modérés.

-  A partir de la version 1.2.0, le plugin se base aussi sur la langue du message pour affiner la modération, et compare également l’adresse IP du posteur avec une base actualisée en temps réel des IPs malveillantes [1]

Le plugin pourra être enrichi de nouveaux dispositifs au fur et à mesure de vos retours.

Ne cumulez pas !

Si vous voulez aider à améliorer l’efficacité de ce plugin avec vos retours, ne l’utilisez pas en même temps qu’un plugin captcha ou un autre plugin anti-spam.

Le but de ce plugin est de faire aussi bien ou mieux qu’un captcha, mais sans gêner l’internaute.

Vous avez encore du spam juste après l’avoir installé ?

Les spammeurs aimaient bien votre site ! Alors ils viennent voir avec leurs petites mains pourquoi leurs robots ne passent plus, et ils font des tentatives pour comprendre.

Laissez les faire, mais faites attention à bien déclarer « SPAM » les messages qui en sont. Vous verrez que très vite ils vont se décourager d’envoyer des messages qui ne sont jamais publiés !...

Avec SPIP 2.x, utiliser le plugin Gestion forum pour déclarer un message en SPAM.

Protéger d’autres formulaires - simple

Le plugin peut aussi protéger vos formulaires personnalisés avec son système de jeton.
Pour cela, il suffit de déclarer votre formulaire dans la variable globale formulaires_no_spam, dans votre fichier mes_options.php (ou mon_plugin_options.php). N’oubliez pas de repasser par le panneau d’administration du plugin si vous avez ajouté un fichier mon_plugin_options.php.
Ici, par exemple, on déclare le #FORMULAIRE_CONTACT_LIBRE :

// proteger le #FORMULAIRE_CONTACT_LIBRE
$GLOBALS['formulaires_no_spam'][] = 'contact_libre';

Protéger d’autres formulaires - avancé

Si la protection simple n’est pas suffisante, plusieurs protections supplémentaires sont possibles :

Analyser le résultat saisi

Par exemple pour le plugin contact_libre, qui définit un formulaire de contact : la fonction ’vérifier’ de ce formulaire (définie dans le fichier formulaire_contact_libre.php) utilise les fonctions d’analyse de NoSPAM (définie dans le fichier inc/nospam.php du plugin nospam) :

include_spip('inc/texte');
// si nospam est present on traite les spams
if (include_spip('inc/nospam')) {
	$caracteres = nospam_compter_caracteres_utiles($texte);
	// moins de 10 caracteres sans les liens = spam !
	if ($caracteres < 10){
		$erreurs['texte_message'] = _T('forum_attention_dix_caracteres');
	}
	// on analyse le sujet
	$infos_sujet = nospam_analyser_spams($sujet);
	// si un lien dans le sujet = spam !
	if ($infos_sujet['nombre_liens'] > 0)
		$erreurs['sujet_message'] = _T('nospam:erreur_spam');

	// on analyse le texte
	$infos_texte = nospam_analyser_spams($texte);
	if ($infos_texte['nombre_liens'] > 0) {
		// si un lien a un titre de moins de 3 caracteres = spam !
		if ($infos_texte['caracteres_texte_lien_min'] < 3) {
			$erreurs['texte_message'] = _T('nospam:erreur_spam');
		}
		// si le texte contient plus de trois lien = spam !
		if ($infos_texte['nombre_liens'] >= 3)
			$erreurs['texte_message'] = _T('nospam:erreur_spam');
	}
}

Obfusquer les name du formulaire

A partir de NoSpam v2

C’est une méthode proposée par NoSpam qu’on peut activer au cas par cas en ajoutant une clé dans le tableau renvoyé par la fonction charger() du formulaire :

	$valeurs['_nospam_encrypt'] = true;
	return $valeurs;

Les valeurs possibles sont true pour obfusquer tout sauf les name commençant par session_ ou 'all' pour tout obfusquer.

A noter que cette option est aussi activable globalement pour tous les formulaire du site via un define dans le fichier mes_options.php

define('_SPAM_ENCRYPT_NAME', true);

S’assurer que l’internaute recharge la page avant de lancer l’action

A partir de NoSpam v2

La plupart des bots spammeurs se contentent de faire un POST sans charger le résultat.
Pour éviter de faire une action en base de données déclenchée par un spammeur de ce type, il est possible de retarder l’action faite dans la fonction traiter() du formulaire et de la faire déclencher par l’utilisateur uniquement si il affiche bien le message de succès et execute le Javascript de la page.

Pour cela on peut utiliser la fonction nospam_confirm_action_html() de la façon suivante dans la fonction traiter()

	include_spip('inc/nospam');

	if (function_exists('nospam_confirm_action_html')) {
		$html_confirm = nospam_confirm_action_html("mafonction", "Description", $args);
		$res['message_ok'] .= $html_confirm;
	}
	else {
		// ICI lancer normalement mafonction()
	}

Pour simplifier son usage, l’utilisation de nospam_confirm_action_html() est identique à celle de job_queue_add()

Notes

[1Cette comparaison se fait par récupération de la liste des IPs qui abusent, et non en envoyant des données à un service externe sur la personne qui écrit le message. Cette fonctionnalité ne fonctionnera pas sur certains hébergements gratuits.

Discussion

137 discussions

  • 1

    Je suis d’accord avec le premier commentaire. L’ajout des fonctions ce-dessous rendrait le plug-in plus complet.

    Dans mon cas, la majorité du spam vient de 2 ou 3 adresses emails (notamment teste@test.com). Alors même si c’est pas une protection optimale, ça ne couterait pas grand chose de les rajouter. De toute façon par défaut la liste serait vide, donc ceux et celles qui ne veulent pas s’en servir ne seront pas gênées.

    -  le bannissement d’adresse IP
    -  le bannissement d’adresse email
    -  le refus de message comportant des mots clefs

    • As tu essayé ce plugin tel qu’il fonctionne actuellement ? Pour l’améliorer, je suis preneur de tout scenario constaté qui le prend en défaut.

      En revanche les demandes de fonctionnalités basées sur des suppositions et des a priori ou des lacunes constatées avec d’autres plugins ne sont pas utiles. Le but est de faire un plugin souple, léger et efficace, pas un mastodonte bourré d’options qui ne sert à rien in fine.

    Répondre à ce message

  • Je tiens à te remercier pour cet excellent plugin, qui marche du feu de Dieu. Je suis littéralement en train de voir une série de spams arriver directement dans la poubelle sur un site où aucun autre type de protection antispam n’est implémenté. C’est vraiment chouette ! :-)

    Répondre à ce message

  • 3

    Je vois Spip 2.0.
    J’ai quand même essayé sur spip 1.9.2 et cela semble fonctionner, en tout cas on peut l’activer :) Y a t il des risques à l’utiliser avec la 1.9.2 ?

    Autre chose qu’il pourrait être intéressant d’intégrer c’est un captcha par défaut, comme ça il y aura un package global :) Mais au niveau du captcha il serait intéressant d’en avoir un élaboré, avec un générateur de caractère qui ne peut pas être interprété par des robots (comme ceux utilisé un peu partout sur les gros sites).

    • Si le plugin marchait avec SPIP 1.9.2, je l’aurais indiqué. Il *faut* SPIP 2.0.

      Par ailleurs, je refuse catégoriquement de mettre un captcha dans ce plugin et dans les forums en général.

      Les tests de captcha sont une horreur ergonomique, réalisée par des développeurs qui ne sont pas capables de se creuser la tête pour inventer quelque chose de transparent pour l’utilisateur, et lui pourrissent la vie pour se la simplifier.
      Essaye ce plugin sur SPIP 2.0 et sans captcha avant de réclamer.

    • salut,

      enfin un plugin « simple » contre le spam !
      merci ! merci !

      je suis bien d’accord avec toi sur l’horreur du captcha et je ne voulais installer aucun des plugins antispam disponibles car trop « contraignants » et pour certains pas du tout accessibles pour les utilisateurs.

      une remarque : certains hégergeurs suppriment directement une table si elle est spammée. Hors, ici, la modération n’empêchera pas le robot de gaver la base, non ?
      Quand tu écris :

      De même, si une adresse IP identique a déjà envoyé trop de messages consécutifs dans un laps de temps donné, les nouveaux messages sont automatiquement modérés.

      ne peut-on pas considérer qu’une personne est « incapable » d’envoyer N messages en T secondes (par ex.) et donc l’envoi serait automatiquement bloqué à ce moment-là, plutôt que d’enregistrer ça pour modération ?

      D’ailleurs, quel est ce laps de temps dont tu parles ?

    • En fait je posais simplement une question et faisait une suggestion, je ne réclamais rien... J’ai toujours du mal à comprendre pourquoi les gens réagissent de façon épidermique ; c’est vraiment dommage :)

    Répondre à ce message

  • 1
    Benoît LAURENT

    Je suis d’accord avec toi, j’ai beaucoup de scrupule à bloquer des groupes d’adresse complet et je ne trouve pas ça très « propre ». Néanmoins le résultat est là et je ne crois pas gêner les lecteurs du site.

    Les Spam que nous recevons ne sont pas envoyé par des spammeurs digne de ce nom ... sachant que le plugin est actif depuis le 11 octobre et donc que les messages bloqué ne sont plus enregistrés, j’ai dans la base 252 messages avec email ’test@test.com’ et 104 signé ’king@yahoo.com’. J’ai aussi une adresse IP ayant posté 167 messages ...

    Aujourd’hui je bloque un peu plus d’une centaine de groupe d’adresse et cela permet de respirer un peu car il n’est pas possible de gérer ça à la main contrairement à ce que suggère Patrice.

    • Moi je suis tout à fait d’accord avec ce que dit Cédric dans ce forum et dans son article.

      J’ai créé une lame pour Le Couteau Suisse dans laquelle il est possible de faire une liste de mots ou d’expressions interdites. Cette lame est très méchante dans un cas suspect, car elle bloque le message à la source, sans aucun enregistrement en base. Donc, ’test’ et ’king’ n’auraient pas pu sévir si longtemps, à moins de changer de signature !

      Suite à cette réflexion collective, aux améliorations apportées par SPIP 2.0 et aux travaux de Cédric, je vais donc ajouter d’autres types de protections douces (sans gêne pour l’internaute honnête) à cette lame.

    Répondre à ce message

  • 1

    Pour moi, rien de vaudra jamais la modération manuel.

    Laurent

    Site perso : Une-recette.com

    • Chacun ses préférences.

      Il se trouve juste que la modération manuelle peut devenir une activité à plein temps sur un site un peu fréquenté ...

    Répondre à ce message

  • L’essayer et faire des retours c’est déjà contribuer !

    Quand au banissement d’IP je n’y suis pas très favorable car :

    • un spammeur peut se cacher derrière un proxy et partager son IP avec des internautes de bonne foi
    • un spammeur digne de ce nom change son IP et son email (si tant est qu’il le remplisse) régulièrement pour éviter les banissements

    Le plugin implémente plutôt quelque chose qui ressemble à une liste grise car si une même IP envoie trop de messages consécutivement, ses mesages sont automatiquement modérés, ce qui enlève tout l’intérêt de son spam.

    Répondre à ce message

  • Benoît LAURENT

    Devant le nombre de SPAM dans les forums du site dont je suis le webmaster, montbouge.info, j’ai commencé un plugin : banip. Il est bien sûr très limité puisque récent et répond uniquement à mes problèmes.

    D’autres plugin existe autour du même thème comme celui-ci, Bloquer les IP’s.

    Il est pour moi important de proposer au utilisateur de SPIP un plugin lutant contre le SPAM qui ne dépende pas de ressources externe, comme le plugin Akismet, ni n’impose des contrainte à l’utilisateur comme les Capcha.

    Les fonctions supplémentaire d’un tel plugin pourrai être :
    -  le bannissement d’adresse IP
    -  le bannissement d’adresse email
    -  le refus de message comportant des mots clefs

    J’espère que les efforts pourrons être mutualisés. Je suis débutant en écriture de plugin SPIP mais je vais étudier le code et essayer d’y contribuer.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom