Lutter contre les spams

Vous avez un formulaire de contact en ligne ? Il vous est peut-être déjà arrivé d'être spammé par des soumissions de formulaire sans queue ni tête ou faisant de la publicité pour certains produits pharmaceutiques.

Vous utilisez peut-être déjà des techniques pour lutter contre le spam et, notamment, l'utilisation de captchas cependant vous vous rendez compte que ceux-ci semblent inefficaces. Ces formulaires sont généralement soumis automatiquement par des robots (spambots).

Il existe une technique assez simple à mettre en place pour bloquer ce genre de soumission. Il suffit de cacher un champ qu'un humain ne remplira pas lors de l'envoi du formulaire mais qu'un robot remplira à tous les coups. En validant le formulaire, il suffit de tester que ce champ est vide ce qui indique que le posteur est humain sinon on bloque l'envoi du formulaire. A l'heure actuelle, il semble que les robots ne détectent pas cette stratégie. Cette technique est intéressante parce qu'elle est efficace et ne pose aucun problème pour vos visiteurs. J'ai déjà eu de nombreux retours de personnes qui n'arrivaient pas à lire les captchas ou qui n'arrivaient pas à faire un simple calcul arithmétique...

Je vous propose de détailler ici comment mettre en place cette solution sur un site site sous Joomla avec un formulaire créé avec le composant ChronoForms.

Etape 1 - Ajouter un champ

Quand vous créez un formulaire avec ChronoForms, ajoutez un champ inutile de type "Text Box" :

chronoforms-create-textbox

Ici, j'ai créé un champ "Votre pseudo" dont l'id est username_123 (Voir copie d'écran ci-dessous). Ne pas toucher aux options de Validation.

 

chronoforms-champ-username

Etape 2 - Faire un traitement particulier pour ce champ

Allez sur l'onglet "Setup" pour s'occuper du comportement de ce champ et créez un élément de type "Event switcher" (qui se trouve dans le groupe Validation)

chronoforms-event-switcher

Un élément "Event Switcher" retourne 2 états "On success" et "On fail". Editez ce "Event Switcher" et renseignez les champs "Events" et "Code".
Pour le champ Events, mettez simplement "success,fail" (sans les guillemets).
Pour le champ Code, mettez le code PHP qui va tester la valeur de votre champ inutile.

<?php
$spam = $form->data['username_123'];
if (!empty($spam)) {
   $form->errors[] = "Les robots ne sont pas autorisés à utiliser le formulaire.";
   return "fail";
}
else
   return "success";
?>

 Si le champ n'est pas vide alors on enregistre une erreur et on retourne "fail".

Sur la copie d'écran ci-dessus, j'ai mis un élément de type Email dans le cas du "On fail". Il n'est pas utile. Je l'ai mis juste pour des tests. Ce qui est important c'est l'élément de type "Event Loop". Ajoutez donc un élément de type "Event Loop" dans "On fail". Vous pouvez laissez la valeur par défaut qui est "Load" cela aura pour action de revenir au formulaire. En revenant au formulaire, une belle erreur (Les robots ne sont pas autorisés à utiliser le formulaire.) apparaitra en début de formulaire. N'oubliez pas de sauvegarder vos modifications.

Etape 3 - Masque le champ inutile en CSS

Quand vous allez sur la page du formulaire, vous verrez votre nouveau champ apparaitre. Normal ! Il faut le cacher. Nous allons effectuer cette opération en CSS. Editez le fichier css de votre template et ajoutez

#username_123 {display: none;}

 Votre formulaire est fin prêt !

Ce tutoriel a été fait avec Joomla 3.3.3 et Chronoforms 5.0.0.

Télécharger ChronoForms