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

  • Il semblerait que Contrib soit aussi victime de Spam malgré le plugin installé.

    Répondre à ce message

  • Bonjour,

    Dès que le message contient un lien externe, il est considéré comme du spam.
    Y a-t-il une option qui permette de définir une whitelist de liens à tolérer dans les messages ?
    Je pense notamment au site SPIP forums qui interdit du coup de poster des liens vers la documentation ou ici, sur SPIP contrib.

    Répondre à ce message

  • Bonjour,

    NOSPAM ne fonctionne pas ,
    car je reçois ce jour dans le forum qui est modéré,
    venant de la même adresse ip
    des messages comportant de 8 à 13 liens
    messages envoyés sur des articles dont les numéros se suivent.

    Or on s’attend à :
    "Par exemple, 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)

    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."

    Y a-t-il des réglages où d’autres subtilités pour éviter cela ?
    Avez-vous une solution ?

    Merci cordialement.

    Répondre à ce message

  • 4

    Bonjour,
    J’utilise le plugin Formidable et j’ai créé plusieurs formulaires dont les id sont par exemple « devis » ou encore « partenaire ». J’appelle donc mes formulaires ainsi, par exemple : #FORMULAIRE_FORMIDABLE{devis}.
    Ma question : comment dois-je rédiger ma ligne dans mes_options ?

    Est-ce que si j’écris ceci :
    $GLOBALS['formulaires_no_spam'][] = 'formidable';
    cela indiquera à NoSpam de prendre en charge tous les formulaires de Formidable ? Ou dois-je écrire ceci :

    $GLOBALS['formulaires_no_spam'][] = 'devis';
    $GLOBALS['formulaires_no_spam'][] = 'partenaire';

     ?

    Et dois-je aussi copier quelque part le code présent en bas du tuto (fonctions d’analyse) ? Ou est-il déjà intégré dans le plugin Formidable ?
    Merci d’avance.

    • Bonjour,

      Je suis face à la même question.
      As-tu trouvé mirobolus ?

    • Et bien, je n’ai pas reçu de réponse...
      J’ai mis les deux options dans mes_options.php mais je n’ai aucune idée de l’impact.
      La question reste donc ouverte ;-)

      	$GLOBALS['formulaires_no_spam'][] = 'formidable';
      	$GLOBALS['formulaires_no_spam'][] = 'nom_formulaire';
    • Merci d’avoir répondu.

      J’ai testé de mon côte, et j’observe que la seule ligne $GLOBALS['formulaires_no_spam'][] = 'formidable'; suffit.
      Tu peux le voir par l’ajout d’une ligne <input type="hidden" value="**charabia codé***" name="_jeton"> à l’intérieur du formulaire, dans une div qui précède le ul où se trouve les champs de ton formulaire formidable.

      Le système de jeton a donc bien l’air d’être incorporé.
      Je ne parle pas des autres fonctions d’analyse, que je ne cherche pas à insérer pour ma part.

    • Et bien c’est nickel, j’ai appris quelque chose de très utile, merci beaucoup.
      Question résolue donc ;-)

    Répondre à ce message

  • 1

    Bonjour, je viens d’installer NoSpam sur un spip 3.04, la page de contact me renvoie un message d’erreur :
    Fatal error : Call to undefined function creer_jeton() in Monsite/plugins/nospam/nospam_pipelines.php on line 60

    Peut-être un erreur de CHMOD ? (755 sur /plugins)

    Merci d’avance

    Répondre à ce message

  • 1
    Oligath

    Bonjour,

    depuis 2 jours je suis spamé de message (1 toutes les heures) sur ma boite mail via le formulaire de contact de mon spip 2.1.17 EVA4.0.
    Ces messages arrivant directement sur ma boite mail je n’ai pas la possibilité (ou je ne la connais pas) de blacklister ces mails autrement que par ma boite mail. Le soucis c’est que sur cette meme adresse je reçois des mail sérieux...

    J’ai mis le plugin NoSpam sur ce site, créé un fichier mes options.php dans config avec la commande :

    // proteger le #FORMULAIRE_CONTACT
    $GLOBALS[’formulaires_no_spam’][] = ’contact’ ;

    Mais rien n’y fait je continue d’etre spamé de mail en anglais venant d’adresse Gmail. Quelqu’un aurait il deja rencontré ce problème et a pu le resoudre ?

    • Bonjour
      J’ai exactement le même problème depuis quelques jours.
      Rien dans ma boîte de message dans l’admin spip,
      mais je reçois des SPAMs directement sur ma boîte mail en provenance
      du formulaire de contact avancée.
      Que faire ?

      G

    Répondre à ce message

  • 1
    ChristianD.

    Bonjour,

    Je subis depuis quelques temps des spams. Avant « No spam », je passais de longs moments à mettre à la poubelle, les messages forums qui étaient des spams. Grâce à « No spam », j’ai même pu récupérer l’adresse IP et me suis rendu compte que c’était une adresse à Penza, Russia !

    Mais je dois tout de même continuer à mettre à la poubelle et signaler que les messages sont des spams, plusieurs centaines par jour.

    Y-a-t-il une possibilité de bloquer un message provenant d’un adresse IP signalée comme étant spammeuse ? J’avoue que ça m’arrangerait ;-).

    Merci d’avance.

    • ChristianD.

      Je me réponds à moi-même.

      Sur le site de Rocbo, j’ai vu comment éviter qu’une adresse IP donnée se connecte et donc spam. Pour cela, il faut aller dans le fichier .htaccess et taper « Deny + l’adresse IP en question ». Et pour supprimer les spams, le plugin « Corbeille ».

      No Spam pour repérer les spams et récupérer l’adresse IP, Htaccess pour empêcher les connexions de ces IP et Corbeille pour supprimer les messages d’un coup.

      Ca fait un peu bidouille mais ça marche ;-).

    Répondre à ce message

  • ChristianD.

    Ou pour supprimer ces messages, comme la fonction « Recherche » fonctionne, avoir la possibilité de sélectionner les messages par cette fonction et les cocher tous d’un seul coup.

    C’est possible ?

    Ps : le temps de partir et revenir, 60 messages à mettre à la poubelle...

    Répondre à ce message

  • 9

    On peut renforcer le filtrage en modérant d’office, a priori, tout message contenant :

    -  un attribut href
    -  un attribut style
    -  une balise <h1
    -  un attribut class
    -  voire n’importe quelle balise html (puisque les raccourcis SPIP les remplacent)
    -  au moins 3 liens

    • Sur mes forums (et ceux de forum.spip.org), la plupart des spammeurs emploient quelques tags ou attributs récurrents dont le filtrage ne gênerait amha absolument pas les visiteurs honnêtes : les attributs qui gèrent l’affichage. De manière générale, le visiteur n’a pas à fixer l’affichage dans le site qu’il visite. Je trouve par exemple :
      -  style=« display:none ; »
      -  color :#LACOULEURDUFONDDELAPAGE
      -  position : suivi d’un chiffre en milliers de pixels

      Il me semble qu’interdire les attributs class et style serait logique.

      Pour les balises, on pourrait discuter : dans certains cas un copier coller de code existant peut se justifier (au moins après <code>).

      De manière générale, il me semble qu’une config pourrait permettre de gérer tout message contenant du html :
      -  passer d’office en modération a priori
      -  ou entraîner un report de publication de quelques heures.

      Cela pourrait pourrait être accompagné d’un message de justification et la config pourrait inclure un e-mail de notification général (comme dans le plugin notifications) car les auteurs réagissent de manière incertaine et il n’y a rien de plus frustrant pour un posteur loyal que de voir son message jamais publié par simple négligeance, ignorance...

    • oui il faut repérer les attributs class et style, mais il ne faut pas la faire à tort lorsque ceux-ci sont dans du code présenté dans un <code> ou un <cadre>

    • Je viens de croiser un exemple de message informant d’une modération préventive, en répondant à ce billet, par ailleurs édifiant : Un ou plusieurs commentaires attend(ent) d’être modéré(s), des mots spam ont été repérés.

    • Juste pour info, le filtrage des messages qui contiennent des éléments avec des attributs de style qui tentent de cacher le contenu (en dehors d’un extrait de code) sont maintenant marqués comme spam depuis la version 0.8.7 du plugin. Voici les commits qui ont apporté cette modification :

      http://zone.spip.org/trac/spip-zone/changeset/57157

      http://zone.spip.org/trac/spip-zone/changeset/57251

      http://zone.spip.org/trac/spip-zone/changeset/57276

      ++

    • Mist. GraphX

      Bonjour,

      J’ai testé la version 0.8.11 sur un site et j’arrive bien à me spammer tout seul ;-) sans que ce soit mis en spam automatiquement

      en utilisant :

      <html><a href="monsite_de casino_en ligne" style="display:none">Pour gagner , apprend a perdre</a></html>

      peut être qu’une page config : avec quelques options comme interdire l’utilisation du code serait plus efficace, car finalement peut de gens échange du code dans les forums proportionellement au nombre de site d’actu ou éditoriaux qui eux sont beaucoup plus sujet au spam vu leur contenu avantageux au niveau référencement ...

      l’autre chose que je trouve bizarre, c’est que en désactivant l’utilisation de la barre_typo, je pensais que ça interdirait l’utilisation de tout code spip dans le champ texte : ce qui n’est pas le cas et qui m’aurais pourtant paru logique (comme on dis pas de barre ... pas de chocolat ).

    • Rassure moi, tu n’étais pas logué quand tu as fait tes essais d’autospam ? ^^

    •  ;-) ben non !!! lol

      j’ai vu que dans le code aucune vérif n’est faite quand ont est admin, et en plus j’ai Modération_modéré d’activé. ;-)

      en fait je suis tombé sur cette technique frauduleuse de par un spammeur qui apparemment connaissait le langage des balises spip et m’as gentiment fait de beau commentaire en utilisant et display:none

    • Retour, j’ai donc interdit et signalé par un message d’erreur quand la balise
      <html><!-- code --></html> était utilisée dans le texte d’un forum en ajoutant a nospam_pipeline.php dans la condition du formulaire forum (pour ceux interressés) :

      // si utilisation de la balise <html>
      $txt = _request('texte');
      $html = ",<html.*</html>,UimsS";
      if (preg_match($html,$txt)) {
      		$flux['data']['texte'] = _T('forum_attention_pas_de_code');
      		unset($flux['data']['previsu']);
      	}

      et évidement le message dans le fichier lang ;-) désolé si c’est un peut bidouille, chuis pas une brute du php

      par ailleurs, je me demande pour ceux qui souhaitent laisser les liens se publier, si ajouter l’attribut rel=« nofollow » ne serait pas une bonne idée, car je pense que les spammeurs passent leurs chemin sur des liens qui ne sont pas suivis par les moteurs de recherche (pour les bots c’est pas dis, mais quoi que ...)

      et sinon dans un optique de modération a priori pourquoi, laisser rentrer des messages potentiellement classé comme spam, si c’est pour qu’un rédacteur se tape tout a valider, vérifier après ?? autant bloquer en affichant un message d’erreur (comme sur tout formulaire) ... comme ça le robot passe sont chemin, et le spammeur manuel (référenceur ça s’apelle ^^) doit faire preuve d’un peut plus de créativité et de délicatesse ;-)

    • Content que tu aies trouvé une réponse à ton besoin. Concernant les spams stockés en base, si tu regardes bien le code de nospam tu verras que ceux-ci permettent de repérer les spammers lors de lors tentatives de post multiples.

      ++

    Répondre à ce message

  • L’intendant zonard

    Ca se fait, faut le faire, je l’écris ici : j’ai installé le plugin, ça marche, merci. :D

    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