FB Antispam - CAPTCHA et reCAPTCHA pour forums

Un simple captcha pour protéger les forums des spams qui envahissent et submergent les bons messages. Plusieurs types de contrôles peuvent être configurés, dont l’intégration de reCAPTCHA de Google.

Description

Le plugin FBAntispam ajoute un champs supplémentaire au formulaire pour la rédaction des commentaires de forum. L’administrateur peut choisir entre la présentation d’un code aléatoire de 4 chiffres à recopier, le résultat d’une addition, le résultat d’une multiplication ou l’intégration du reCAPTCHA de Google.
Pour le reCAPTCHA voir ici la documentation de Google : https://www.google.com/recaptcha.

Si le code ne correspond pas, ou si le reCAPTCHA n’est pas validé, la saisie est proposée de nouveau avec un message avertissant de l’erreur dans le code.


Installation

Le plugin s’installe classiquement : Installer un plugin-spip

Vous n’avez aucune modification à faire sur vos squelettes.

Configuration

Un lien direct vers le panneau de configuration est disponible dans le menu « Configuration », et un choix par défaut est fait si la configuration n’est pas enregistrée.


Discussion

18 discussions

  • Bonjour

    Apparemment, pas de fichier de langue pour ce plugin ? Le texte « Controle anti-spam : saisissez les caractères suivants » est toujours en Français.

    Suggestion : ajoutez un formulaire de configuration pour modifier ce texte.

    Cordialement

    Répondre à ce message

  • 1

    Bonsoir, j’ai installé le captcha sur mon blog WP mais je n’arrive plus à y avoir accès en tant qu’administrateur, voilà ce qu’on me met lorsque je tente de me connecter

    Error : You have entered an incorrect CAPTCHA value. Click the BACK button on your browser, and try again.

    • Pourriez-vous expliquer un peu plus ? qu’est-ce que vous entendez pour « blog WP » ?

    Répondre à ce message

  • 4

    Bonsoir et merci pour la réponse
    mon fichier forum.html dans le dossier squelette-dist semble etre bon.
    Auriez vous une idée d’ou peut venir ce retour chariot ?
    le code de mon fichier forum.html est

    <div class="formulaire_spip formulaire_forum ajax" id="formulaire_forum">
    [(#REM) pour IE qui sinon se perd dans l'ajax !, ne pas retirer]<br class='bugajaxie' />
    
    [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
    [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    
    [(#ENV{login_forum_abo})
    <INCLURE{fond=formulaires/inc-login_forum_abo}{env} ></INCLURE>
    ]
    
    [(#ENV{editable})
    
    
    [(#REM)
    	Bloc de previsualisation du forum envoye
    
    	Si on valide la previsu, on n'envoie pas en ajax car, si le post reussit
    	il faudra certainement redessiner toute la page pour afficher le nouveau
    	forum
    
    ][<form action="#ENV{action}#formulaire_forum" method="post" class="noajax">
    	<div>
    	[(#ACTION_FORMULAIRE{#ENV{action}})]
    	<input type='hidden' name='titre' value="#ENV{titre}" />
    	<input type='hidden' name='texte' value="#ENV{texte}" />
    	<input type='hidden' name='url_site' value="#ENV{url_site}" />
    	<input type='hidden' name='nom_site' value="#ENV{nom_site}" />
    	[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
    	[(#INCLURE{fond=formulaires/inc-forum_ajouter_mot}{ajouter_mot})]
    	(#ENV*{erreurs}|table_valeur{previsu})
    	</div>
    </form>]
    
    
    <form action="#ENV{action}#formulaire_forum" method="post" enctype='multipart/form-data'><div>
    [(#ACTION_FORMULAIRE{#ENV{action}})]
    [<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
    [<fieldset class="moderation_info">
    	<p class="explicationk">(#ENV{modere})<:forum_info_modere:></p>
    </fieldset>]
    	<INCLURE{fond=formulaires/inc-login_forum}{env} ></INCLURE>
    
    [(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''})
    [<input type="hidden" name="titre" value="(#ENV{titre})" />]
    <p class="spip_bouton"><input type="submit" class="submit" value="<:forum_valider:>" /></p>]
    
    [(#ENV**{afficher_texte}|choixsiegal{'non', '',' '})
    
    	<fieldset>
    	<legend><:form_pet_message_commentaire:></legend>[
    	(#CONFIG{forums_titre}|!={non}|non)
    		<input type="hidden" name="titre" id="titre"[ value="(#ENV{titre})"] />
    	]<ul>
    	[<li class='saisie_mots_forum'>(#INCLURE{fond=formulaires/inc-forum_bloc_choix_mots}{table=#ENV*{table}}{ajouter_mot})</li>]
    
    [(#CONFIG{forums_titre}|!={non}|oui)
    	<li class='saisie_titre[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]'>
    		<label for="titre"><:forum_titre:></label>
    		[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span>]
    		<input type="text" class="text" name="titre" id="titre"[ value="(#ENV{titre})"] size="50" />
    	</li>
    ]
    
    [(#CONFIG{forums_texte}|!={non}|?{
    	<li class='saisie_texte[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]'>
    		[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span>]
    		<textarea name="texte" id="texte" rows="12" cols="50">[(#ENV{texte})]</textarea>
    	</li>
    })]
    	</ul></fieldset>
    
    [(#CONFIG{forums_urlref}|!={non}|?{
    	<fieldset>
    	<legend><:forum_lien_hyper:></legend>
    	<p class='explication'><:forum_page_url:></p>
    	<ul>
    	<li class='saisie_nom_site[ (#ENV**{erreurs}|table_valeur{nom_site}|oui)erreur]'><label for="nom_site"><:forum_titre:></label>
    	[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{nom_site})</span>]
    	<input type="text" class="text" name="nom_site" id="nom_site" size="40" value="[(#ENV{nom_site})]" /></li>
    	<li class='saisie_url_site[ (#ENV**{erreurs}|table_valeur{url_site}|oui)erreur]'><label for="url_site"><:forum_url:></label>
    	[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url_site})</span>]
    	<input type="text" class="text" name="url_site" id="url_site" style="text-align: left;" dir="ltr" size="40" value="[(#ENV{url_site})]" /></li>
    	</ul></fieldset>
    })]
    
    [
    	<fieldset>
    	<legend><:bouton_ajouter_document:></legend>
    	<ul>
    	<li class='saisie_document_forum[ (#ENV**{erreurs}|table_valeur{document_forum}|oui)erreur]'>
    	[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{document_forum})</span>]
    	<input type="hidden" name="cle_ajouter_document" value="(#ENV{cle_ajouter_document})" />
    	[<div id="ajouter_document_up">(#ENV{ajouter_document})
    	<label for="supprimer_document_ajoute"><input type='checkbox' name='supprimer_document_ajoute' id='supprimer_document_ajoute' />
    	<:lien_supprimer:></label>
    	</div>]
    	<div>
    	[<label for="ajouter_document">(#ENV{formats_documents_forum}|join{', '})</label>]
    	<input class='file' type="file" name="ajouter_document" id="ajouter_document"[
    	accept="(#ENV{formats_documents_forum}|join{','})"] />
    	</div>
    
    	<script type='text/javascript'>
    	jQuery('#ajouter_document_up')
    	.next()
    		.hide()
    	.prev()
    	.find(':checkbox')
    	.bind('change', function(){
    		jQuery('#ajouter_document_up').hide().next().show();
    	})
    	;
    	</script>
    	</li>
    	</ul></fieldset>
    ]
    
    
    	[(#REM) Piege a robots spammeurs ]
    	<p style="display: none;">
    		<label for="nobot_forum"><:antispam_champ_vide:></label>
    		<input type="text" class="text" name="nobot" id="nobot_forum" value="#ENV{nobot}" size="10" />
    	</p>
    	<p class="boutons"><input type="submit" class="submit" value="<:forum_voir_avant:>" /></p>
    ]
    </div>
    </form>
    
    [(#REM)
    	Sauver les donnees du formulaire dans un cookie, si on quitte la page,
    	et les remettre quand on revient (dans les limites de 4ko etc)
    ]
    <script type="text/javascript">/*<!#EVAL{chr(91)}CDATA#EVAL{chr(91)}*/
    if (window.jQuery)(function($){
    	var a = $.cookie('spip_contenu_formulaire_#ENV{_sign}');
    	var saveauto = true;
    	if (a) {
    		$('#formulaire_forum textarea#EVAL{chr(91)}name=texte#EVAL{chr(93)}')
    		.val(a);
    		$.cookie('spip_contenu_formulaire_#ENV{_sign}', null);
    	}
    	/* virer le cookie a la validation finale du message */
    	$('input#EVAL{chr(91)}name=confirmer_previsu_forum#EVAL{chr(93)}')
    	.live('click', function(e) {
    		saveauto = false;
    	});
    	$(window)
    	.bind('unload', function(){
    		if (saveauto){
    			var s = $('#formulaire_forum textarea#EVAL{chr(91)}name=texte#EVAL{chr(93)}').val();
    			if (s)
    				$.cookie('spip_contenu_formulaire_#ENV{_sign}', s);
    			else
    				$.cookie('spip_contenu_formulaire_#ENV{_sign}', null);
    		}else{
    			/* on vide le champs texte après le submit car refuser_traiter_formulaire_ajax(); va reposter le formulaire, et donc reposer un cookie car saveauto sera false la seconde fois. */
    			$('#formulaire_forum textarea#EVAL{chr(91)}name=texte#EVAL{chr(93)}').val('');
    		}
    	});
    }(jQuery));
    /*#EVAL{chr(93)}[(#EVAL{chr(93)})]>*/</script>
    ]
    </div>
    • Bonjour
      En effet le formulaire est correct.
      Pourtant, dans le code HTML produit, la plupart des balises avec des attributs sont toutes coupées avec des retours à la ligne.
      Je ne sais pas la raison, sans doute un traitement sur le code effectué par un autre plugin ou par une fonctionnalité de spip.

      Une solution possible serait de surcharger le formulaire en ajoutant une balise ad hoc avant le bouton, sans mettre d’espaces, par exemple @MONCAPTCHA@, et d’ajouter dans le code du plugin le remplacement de cette balise par le captcha.
      Pour cela, allez dans fbantispam_pipelines.php, à la ligne 33, pour ajouter ceci :

      if (!$pos) $pos = strrpos($texte, '@MONCAPTCHA@', 0);

      Cela devrait contourner votre problème.
      Cordialement
      Fabio

    • J’ai ajouté le code mais ça ne semble pas fonctionner ou bien je dois supprimer quelque chose ? j’ai ceci au finish comme code

      // On ajoute le champ 'captcha' avant le bouton de submit
      		// On commence de la fin, pour se positionner dans le formulaire de saisie et non dans
      		// celui de prévisualisation
      		$pos = strrpos($texte, '<p class="boutons">', 0);
      		if (!$pos) $pos = strrpos($texte, '@MONCAPTCHA@', 0);
      		// S'il n'a pas trouvé le bouton, on se positionne à la fin du formulaire (moins joli !)
    • Il faut aussi modifier le code du formulaire pour ajouter la balise @MONCAPTCHA@ là où on veut le captcha.
      Voir éventuellement la documentation Spip pour redéfinir le formulaire dans ses squelettes.
      Cordialement

    • Je pense que je ne vais pas y arriver car je n’ai aucune connaissance en php. Sauf indication claire sur quel ligne de quel fichier je dois ajouter la balise @MONCAPTCHA@ je ne vais pas y arriver. Merci pour votre aide !

    Répondre à ce message

  • 1

    Bonsoir j’ai installé ce plugin sur mon site mais il s’affiche après le bouton Prévisualisé
    ça fonction bien mais le fait qu’il s’affiche après le bouton de validation va surement jouer sur les visiteurs qui cliqueront sur prévisualisé sans voir le code captcha.
    Qualqu’un pourrais me dire quoi faire pour que le plugin vient avant le bouton de validation ?
    Lien d’exemple ici
    http://islam.bf/index.php?page=forum&id_article=12&id_forum=1370&retour=index.php
    Merci d’avance

    • Bonjour
      Pour positionner le captcha le plugin effectue une recherche textuelle pour trouver le bouton, et se positionner avant. Si le bouton n’est pas trouvé, alors le captcha est mis à la fin du formulaire comme solution de repli.
      Le texte recherché correspond à la balise avec le contenu suivant : p class=« boutons »
      Dans votre cas, en regardant le code de la page, je vois qu’il y a un retour chariot entre p et class, ce qui rend inefficace la recherche de la bonne position, et c’est pour cela que la solution de replis est appliquée.
      Peut être que vos squelettes surchargent le formulaire standard ?
      Cordialement

    Répondre à ce message

  • Delorimier

    Le plugin fonctionne très bien en local, mais une fois en ligne les chiffres sont affichés normalement en caractères, sans traitement graphique. C’est sans doute un problème avec l’hébergement - quelqu’un sait-il ce qui doit être ajouté ?

    Répondre à ce message

  • 4

    Ce plugin fonctionne bien par contre je doute qu’il soit efficace longtemps :
    les chiffres à rentrer sont écrits tel quels dans le code source de la page ! Un script spammeur peut donc très facilement le déjouer. Pour l’instant, le plugin est jeune et aucun spammeur ne s’est donné la peine d’écrire un tel script donc je peux l’utiliser. Mais plus on l’utilisera, moins il sera efficace !
    Il me semble qu’une amélioration du type « Combien font deux + trois (en chiffres) : » serait plus efficace.

    • remplacer #ENVcaptcha par son image typo à votre sauce par exemple :
      [(#ENVcaptcha|image_typoPapposBlues..._font.ttf,taille=36,align=center,padding_5|image_alpha60||image_flou6|image_rotation-25)]

      dans inclure/captcha et le nombre n’apparaitra plus

    • il suffit de remplacer <strong>#ENV{captcha}</strong>

      par un image typo de cette valeur —> A VOTRE SAUCE par exemple

        [(#ENV{captcha}|image_typo{PapposBlues..._font.ttf,taille=36,
      align=center,padding_5}|image_alpha{60}||image_flou{6}|image_rotation{-25})]

      dans le fichier inclure/captcha du plugin pour ne plus avoir le code en dur dans le texte

    •  [(#ENV{captcha}|image_typo{PapposBlues..._font.ttf,taille=36,align=center,padding_5}
      |image_alpha{60}||image_flou{6}|image_rotation{-25} |inserer_attribut{alt,''} )]

      on enlève aussi la valeur qui se met automatiquement dans le alt de l’image

    • je vois que le plugin a été mis à jour ! Plus besoin de modifs du coup. Merci !

    Répondre à ce message

  • 2

    Salut,

    je voudrais introduire le captcha dans une page de formulaire de l’espace public.
    Est-ce possible en mettant un code dans le squelette de cette page ?

    Merci d’avance

    • Bonjour Etienne
      Ce plugin intervient spécifiquement dans le formulaire du forum. Certainement quelques adaptations du code permettraient de l’utiliser avec d’autres types de formulaire, mais ce n’est pas le cas actuellement.
      Cordialement

    • Ok, merci pour la réponse. Je vais continuer à chercher une solution et sinon je fermerai provisoirement le site.

      Bonne continuation

    Répondre à ce message

  • Ok, merci pour la réponse. Je vais continuer à chercher une solution et sinon je fermerai provisoirement le site.

    Bonne continuation

    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