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

  • Un grand merci pour ce plugin, très efficace !

    J’étais sans cesse attaqué par vague, depuis plus d’un an. Activant la modération sur abonnement sur les articles attaqués ... dès que j’ouvrais, les attaques reprenaient en moins de 24 h (allant jusqu’à 40 message en 1 heure).

    Et là, depuis 2 mois ... plus rien :-)

    Répondre à ce message

  • Un spam qui passe dans les forums sur abonnement, après identification de l’indélicat auteur.

    No-Spam met bien « spam » au deuxième envoi identique ...

    mais ne semble pas fait pour filtrer l’inscriptions d’auteurs indélicats.
    Y a t’il une autre solution que Capcha pour faire cela ?

    Répondre à ce message

  • 1

    bonjour,

    merci pour ce plugin fort utile.

    une suggestion : pourquoi ne pas rajouter le support du http:bl de projecthoneypot
    ( http://www.projecthoneypot.org/?rf=28460 ), l utilisant deja sur de nombreux sites, spip et autres, je vous garantis qu il est particulierment efficace pour refuser les spammeurs.

    • C’est intéressant. Mais je préfèrerais en faire un plugin séparé pour deux raisons :
      -  NoSPAM est un plugin basic qui « marche sans rien faire » et suffit dans bien des cas.
      -  Un plugin reposant sur honeypot serait complémentaire, en lançant une requête DNS en cron pour modérer a posteriori le message non déjà classé en SPAM.
      Mais il nécessite de récupérer une clé pour le faire fonctionner, et il serait bien qu’il insère aussi des liens vers des pot de miels sur le site qu’il protège, je préfèrerai donc que ce soit un plugin séparé.

    Répondre à ce message

  • Gnomecorp

    Merci, je viens de me faire « attaquer » sur gnomecorp, ce plugin va m’être bien utile !
    Cordialement

    Répondre à ce message

  • 1

    Bonjour Cédric,

    Apparemment depuis la version 0.7, NoSpam me classe tous les commentaires dans « en attente de validation ». J’ai peut être loupé une configuration particulière (je n’ai pourtant rien changé par rapport à la précédente version, pourtant) ?

    Reproductible sur ydikoi

    • Au temps pour moi …

      J’ai fait plusieurs simulations, en enlevant tous les plugins, puis vidant tous les caches, et blabla … ;-)

      Ca a marché - aléatoirement - et puis non …et puis maintenant c’est fonctionnel … donc je ne touche à rien …

      Donc, dsl

    Répondre à ce message

  • Voici un exemple de texte du dernier essai :

    Ce forum est modéré à priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.
    Ce forum est modéré à priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.
    Ce forum est modéré à priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.
    Ce forum est modéré à priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

    Mais j’ai tout essayé comme texte banal, sans succès.

    La version incriminée du plugin est : Version : 0.7 [34414] — stable : sans succès

    Par contre, avec la version : Version : 0.6 [32046] — stable : cela fonctionne sur nos autres sites.

    Meilleurs messages

    FDG

    Répondre à ce message

  • 1
    François Daniel Giezendanner

    Bonjour,

    Avec le plugin NoSPAM, dès que l’on clique sur « Voir ce message avant de le poster », l’indication :

    Attention ! votre message doit contenir au moins dix caractères.

    apparaît systématiquement, quelle que soit la longueur du message (>> dix caractères)

    et impossible d’aller plus loin.

    Conclusion : tous les messages sont bloqués.

    Le problème disparait dès que l’on désactive le plugin NoSPAM.

    Cordialement

    FDG

    • Salut,

      Peux-tu poster un exemple de texte qui provoque ce genre d’erreur stp ? Ton plugin est-il bien à jour ?

      ++

    Répondre à ce message

  • 2

    Je suis sous WinMob6 et Opéra9.5, je viens de faire les frais sans raison apparente du blocage du plugin, ici, sur spip-contrib.

    Message exact : « Impossible de prendre en compte votre message. Merci de le soumettre à nouveau ! Un message, un commentaire ? » C’est presqu’amusant, non ? Et pas de prévisualisation possible, impossible de poster quoi que ce soit.

    Mon texte : « Test pour un message refusé ! »
    +mon nom +mon mail.

    Si ça peut permettre d’avancer...

    • Le problème n’est pas reproductible avec Opera 9.64 pour Mac OS. Peut-être est-ce un problème propre à la version 9.65 ou mobile, qui n’enverrait pas le même user-agent dans un post que dans un get ?

      Peux-tu re-essayer de faire un post ? J’ai ajouté un log pour récupérer les infos utiles. Il faudrait aussi regarder le user-agent envoyé normalement que je puisse les comparer.

    • Bon après enquete, certains operateurs telephoniques changent l’IP d’un hit sur l’autre. Du coup tu n’as pas la même IP entre le moment ou tu charges le formulaire et le moment ou tu le postes et tu es refusé.

      J’ai corrigé en élargissant le jeton aux IP de classe C identiques.

    Répondre à ce message

  • Bonjour,
    j’utilise nospam Version : 0.5 [31401] — stable avec bonheur puisqu’il n’y a plus de spams. Le problème c’est que les commentaires se sont drastiquement raréfiés aussi et moi-même, admin du site, peine à inscrire un commentaire aussi : le forum boucle sur la proposition et n’affiche jamais le bouton de confirmation d’envoi.

    Je ne sais jamais si le commentaire va passer, et ce alors même qu’il n’y a aucun lien dans le message, dans le titre ni d’url indiquée, et que je sois connecté ou non comme admin...

    Pour certains commentaires, le bouton d’envoi s’affiche finalement, sans que j’ai trouvé de règles de satisfaction du lunatique Cerbère.

    Et quand nospam décide que le message ne passera pas, rien à faire, c’est définitivement bloqué. Je suis désormais terrorisé par ce plugin qui n’en fait qu’à sa tête et à la merci duquel je suis complètement impuissant à contrer son mauvais vouloir...

    Pour m’en sortir je désactive le plugin... et le réactive une fois publié mon commentaire. Mais cela ne satisfait pas les autres utilisateurs du site !

    Y aurait il une solution à ce problème ou une version de debug avec des logs détaillés pour comprendre ce qu’il se passe ?

    Répondre à ce message

  • Bonjour,

    Merci pour ce super plugin qui marche du tonner sur le forum.
    J’aimerais l’intégrer à un formulaire que j’ai inséré dans un article (avec du code, c’est pas très propre mais cela date un peu et ça marche), est possible ?

    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