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

  • 2

    Avec SPIP 2.1.12 et le plugin NOSPAM, je ne parviens pas à maitriser les spams sur une pétition. Sur un article j’ai une pétition (pétition activée et modération à priori) : cette pétition est l’objet de spams par centaines que je dois supprimer quasi tous les jours. Comment se fait-il que NOSPAM ne les bloque pas ?

    Je tiens à suivre la recommandation de ne pas utiliser un CAPCHA avec SPIP mais j’aimerais que NOSPAM soit plus efficace. Y a-t-il quelque chose que je devrais faire ?

    Merci pour toute info utile.

    • Salut, juste pour te filer un peu d’infos sur ce que fait nospam avec les pétitions :

      • si un lien dans le texte de la signature a un titre de moins de 3 caractères => spam
      • si le texte contient plus de trois liens => spam
      • s’il y a un lien dans le champ nom => spam

      Voilà le résumé, tout ceci se passe dans le fichier des pipelines de nospam ici :

      http://zone.spip.org/trac/spip-zone/browser/_plugins_/nospam/nospam_pipelines.php?rev=58663#L128

      Toutes ces conditions nécessitent peut être un ajustement ou l’ajout d’une nouvelle « barrière ». Quels sont les caractéristiques des spams qui « passent à travers » la barrière de nospam sur ton site ?

      ++

    • Les spams viennent quasi tous d’un serveur « enginecloud.net » avec un login toujours suggestif de pornographie et sans aucun commentaire.

    Répondre à ce message

  • Bonjour,
    J’ai récupére sous messages publics de l’article, bon nombre de messages identifiés comme (spam).
    Sur le site il yb a le bouton Valider le message mais rien pour le supprimer.
    Comment faut-il procéder ,
    Merci

    Répondre à ce message

  • Bonjour tout le monde,

    J’utilise NoSpam avec le plugin Guestbook 2.1, mais il y a toujours autant de spam. :( Les spams ne semblent être modérés, ils sont tous en statut « proposé ».
    En regardant le plugin Guestbook de plus près, tout ce qui est lié à NoSpam y est bien intégré (déclaration du formulaire, fonction vérifier)

    Il est indiqué que si les spams persistent, il faut les signaler à l’aide du plugin « Gestion forum » mais comment peut-on signaler les spams du plugin Guestbook ?

    J’ai fait de nombreuses recherches sur d’éventuels témoignages de l’utilisation du couple Guestbook/NoSpam mais en vain. Si quelqu’un a une petite piste, ou une explication (j’ai peut être zappé un truc au sujet de NoSpam ?), je vous en serai très reconnaissante. :)

    Merci d’avance.

    Répondre à ce message

  • Bonjour
    je souhaite gerer les spams via le plugin gestion forum et NOSPAM
    je vois bien le plugin NOSPAM mais gestion des forum est invisible dans la liste de plugins ?
    J’ai oublié quelque chose ?
    merci par avance

    Répondre à ce message

  • 2
    fchrysalis

    (suite)

    En fait, ces robots supposés ne se connectent pas trois fois par jours mais six fois, en général (je me trompais), et il doit être possible de repérer les sites touchés par des commentaires (non publicitaires et en anglais) qu’ils placent sur les sites sur lesquels ils ont jetés leur dévolu. J’ai d’abord eu droit à ce premier commentaire :

    It was a very nice idea ! Just wanna say thank you for the information you have shared. Just continue writing this kind of post. I will be your loyal reader. Thanks again =-=

    Il provenait de l’IP 81.25.45.63, située, je crois, en Biélorussie. Je l’ai effacé après avoir constaté qu’on en trouvait des dizaines de milliers d’exemplaires à travers le Web. J’ai alors eu droit, de la même IP, à ceci :

    I have to say, I dont know if its the clashing colours or the bad grammar, but this blog is hideous ! I mean, I dont want to sound like a know-it-all or anything, but could you have possibly put a little bit more effort into this subject. Its really interesting, but you dont represent it well at all, man. =-=

    Idem, ce message se trouve sur une grande quantité de forums, à l’identique (mais j’en trouve beaucoup moins aujourd’hui qu’à l’époque, en juin). Je l’ai gardé quelques jours. C’est depuis ce temps-là (16 et 17 juin dernier) que j’ai chaque jour quelques-uns de ces « robots » qui se connectent chacun six fois sur mon site.

    Très bizarre, non ?

    • Il ne faut pas effacer les message de SPAM, mais les déclarer comme SPAM, cela permet ensuite au plugin de reconnaitre lorsque ce même utilisateur revient et d’être plus sévère avec lui (en lui interdisant tout lien par exemple, ou en modérant automatiquement ses messages par précaution).

      Quand aux visites automatiques sur ton site en provenance d’un même site, il s’agit de ce qu’on appelle du SPAM de referer (http://en.wikipedia.org/wiki/Referrer_spam). Si jamais tu affiche sur ton site public des statistiques concernant les visites ou les referers, cela permet au spammeur de récupérer automatiquement des liens vers son site.

    • fchrysalis

      Ah, merci beaucoup ! Je ne connaissais pas ce genre de spamming (et il m’était difficile de le deviner vu que je ne publie pas de statistiques de visites). Et comme, pour moi, il ne s’agissait pas à proprement parlé de spam, je n’ai pas pensé à classer les deux commentaires comme « spam ». Cela dit, je doute que cela résolve le problème, car il doit y avoir plusieurs IP à l’origine de ces nombreux site...

    Répondre à ce message

  • fchrysalis

    Bonjour !

    J’ai depuis quelques temps le même problème que Pamillet, et je parie que ce doit être le cas de pas mal de monde ! C’est effectivement essentiellement des « liens entrants » (« origine des visites ») en .ru, mais qui semblent venir de sites tout à fait ordinaires, en russe, traitant de n’importe quel sujet (d’après ce que j’ai pu en juger à l’aide d’un traducteur en ligne). Exemples : sedauka.ru, uadelo.ru, moykirov.ru, ournovosibirsk.ru... Les liens entrants se manifestent trois fois par jour en général. C’est donc très régulier et fait penser à l’action de robots. Mais il n’y a pas de spams, je suis déjà protégé par No Spam (et en suis satisfait). Alors, pourquoi ils reviennent ? Qu’est-ce qu’ils font là ? Et serait-il possible de les interdire d’accès ?

    Sur de petits sites comme le mien, ayant peu de vrais visiteurs, ils rendent l’interprétation des statistiques mal aisée (et quelque peu déprimante), en plus d’utiliser inutilement de la bande passante...

    Si quelqu’un de compétent pouvait se pencher sur cette question qui, à mon avis, concerne pas mal de monde...

    Merci d’avance à celle ou celui-là !

    Répondre à ce message

  • une suggestion..

    je constate que des sites commerciaux, notamment pornos, se retrouvent dans mes statistiques et font grimper un article dans les statistiques (article sans rapport avec leur activité !)

    Ce n’est pas du spam... rien dans les forums, mais leur lien se retrouve dans les stats... et les pervertissent.. Et je me retrouve avec des dizaines de sites (presque tous en .ru) dans mes stats... Pourtant, rien de russe dans l’article...

    Serait-il possible de les bloquer, en tout cas de les exclure des stats ?

    ce n’est peut-être pas une question techniquement pour nospam... mais ca me semble relever du même besoin fonctionnel...

    Répondre à ce message

  • Bonjour,

    Merci pour ce plugin très efficace. :-)

    Je tente de déterminer si Spip est prêt pour l’IPv6. A priori, c’est bon pour Spip natif.

    Je m’interroge sur les plugins. Parmi eux, à ma connaissance, seul NoSPAM serait impacté : il utilise une fonction nospam_hash_env() qui, si je ne m’abuse, transforme les IPv4 de type aaa.bbb.ccc.ddd en aaa.bbb.ccc.XXX
    La compatibilité IPv6 est-elle « prévue », ou pas encore à l’ordre du jour ?

    PS : plus généralement, je n’ai pas trouvé de discussions/synthèse de l’impact d’IPv6 sur Spip et ses plugins. Si quelqu’un a des précisions à ce sujet, je suis preneur !

    Répondre à ce message

  • 4
    Origenius

    NoSPAM... c’est-à-dire « NoJAP » ?

    Je me suis un peu cassé la tête pour comprendre pourquoi l’un de mes sites, exclusivement en japonais, n’acceptait aucun commentaires pour aucun article. J’ai cherché pendant plusieurs heures (mauvais code, problème de serveur, etc) jusqu’à ce que je décide de mettre à jour tous mes plugins avec leur dernière version : rien n’y faisait. Je les ai donc testés l’un après l’autre pour découvrir que seule la désactivation de NoSpam me permettait d’avoir accès à la publication des commentaires. Je m’interroge donc...

    Oui je sais fort bien et j’en suis le premier malheureux que des robots japonais tentent de pourrir nos commentaires au delà du raisonnable. Et c’est contre eux que j’ai voulu aussi protéger mes sites, d’où l’utilisation de NoSPAM. Mais quand le moindre et innocent caractère japonais se voit sans autre forme de procès rejeté, je me demande si la solution dite de « facilité » ne consiste pas pour ce plugin à jeter le bébé avec l’eau du bain ; quelques pourriels en japonais justifieraient-ils le rejet pur et simple de la langue japonaise dans les paramètres de ce plugin ?

    Ainsi, l’avantage multilingue pour lequel j’ai choisi SPIP prend un sérieux coup...

    Je joins à ce commentaire une petite copie d’écran faite sur ce site (spip-contrib) qui utilise fièrement ce plugin pour illustrer mon propos.

    Sayonara...

    • Cédric

      Bonjour,
      le plugin ne repose absolument pas sur la présence de caractères type japonais ou autre pour détecter les SPAM, mais il semble qu’il y ait un bug sur le format d’une des expressions régulières, ou sur un traitement de chaine qui le fait ignorer ces caractères dans le comptage de la longueur du message.

      C’est bien un bug qu’il faut corriger !

    • Origenius

      Merci pour votre prompte réponse et vos précisions qui me rassurent ! Si mon commentaire peut permettre de corriger un bug, ce sera une maigre contribution de ma part.

      Pour compléter votre propos, il me suffisait d’écrire une dizaine de lettres latines pour que mon message puisse être prévisualisé et donc publié. Mais c’est ce que les commentateurs potentiels de mon site ne font jamais : ils écrivent dans leur langue maternelle... En conséquence, c’est peut-être simplement un problème de comptage de caractères comme vous le pensez.

      Toutes mes excuses pour ne pas vous avoir remercié pour votre travail dans mon commentaire précédent. Si je peux me rattraper, même maladroitement...

      Bien à vous

    • La version 0.8.3 du plugin corrige enfin ce bug. Désolé pour le délai.

    • Origenius

      Merci, ça fonctionne bien désormais ! Super

    Répondre à ce message

  • 3
    charlotte

    Bonjour
    ce plugin est-il également fait pour les formulaires liés aux pétitions et à l’abonnement aux listes de diffusion ?
    J’utilise spip 2, et je viens de lire que les balises captcha sont désormais inutiles grâce à ce plugin. Sauf que je lis en même temps que ce plugin concerne plutôt le forum...

    • bonjour, j’ai la même question que Charlotte... Merci. Jc

    • Bonjour,
      le plugin est effectivement fait pour filtrer les spams sur les forums.

      Pour tout ce qui concerne les autres formulaires, je pourrais généraliser le système de jetons temporaires, qui permettent d’éviter que les robots ne remplissent le formulaire automatiquement. En revanche, le reste du filtrage est pertinent dans le cas ou il y a du contenu, mais pas sur un formulaire de type abonnement à une liste.

      Vous rencontrez des problèmes de spam sur ce type de formulaire aussi ?

    • bertrand

      Bonjour,

      J’utilise ces 2 plugins pour mes forums et ça fonctionne parfaitement... Merci pour cette contrib.
      Mais je fais remonter cette discussion car j’ai publié une pétition qui est la cible de robots spammer. Comment puis-je utiliser le plugin nospam et l’interface de gestion des forums sur les pages équivalentes dédiées aux pétitions ?

      Merci d’avance...

    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