Vous allez découvrir comment éviter les spams sur votre site WordPress avec la technique du honeypot (pot de miel).
Le pot de miel est une façon de piéger les robots spammeurs qui parcourent la toile.
Besoin d’un spécialiste WordPress pour votre projet ? Contactez-moi
Lorsque vous rencontrez un problème sur votre site WordPress, et plus précisément sur la reception répétée d’e-mails publicitaires, il vous est possible de réparer WordPress en utilisant une technique dont le principe est simple.
La technique consiste à ajouter un champ de saisie factice dans votre formulaire, celui-ci étant destiné à ne pas être rempli, du moins par un humain.
Pour cela, le champ est masqué aux visiteurs, ainsi le robot spammeur étant programmé pour remplir tous les champs de votre formulaire sans distinctions, va renseigner ce champ est sera directement étiqueté comme spam.
1. Ajouter un champ dans votre formulaire
Le champ de saisie que vous allez rajouter, est un champ factice uniquement destiné à tromper les robots.
Ce champ sera masqué visuellement de l’utilisateur, et en le remplissant le robots destiné à vous spammer se trahira lui-même et déclenchera une fonction spéciale.
Dans votre formulaire Contact Form 7 :
Voici le code à ajouter dans votre formulaire CF7 pour ajouter votre honeypot
[text fake-field]
Ce qui aura pour rendu en HTML :
Voici le rendu
<div class="fake"><input name="fake-field"></div>
2. Masquer le champ par CSS
Dans votre fichier CSS ou dans votre code HTML :
form .fake{display:none}
3. Créer une fausse page de confirmation
Certains robots vont chercher à savoir si le message à bien été envoyé, et pour ce faire ils vont vérifier que le formulaire renvoie bien vers une page de confirmation. Vous allez donc en créer une, spécialement dediée aux spammeurs.
Votre fausse page sera page exemple :
http://www.monsite.com/fake-confirmation/
4. Ajouter la fonction de redirection
Voici donc la fonction à utiliser avec le plugin Contact Form 7 pour bloquer l’envoi de l’email et rediriger les faussaires vers votre page factice.
Ce code est à rajouter dans votre fichier functions.php de votre thème WordPress :
// On désactive le Javascript de CF7 par défaut add_filter( 'wpcf7_load_js', '__return_false' ); add_filter( 'wpcf7_load_css', '__return_false' ); function func1234_wpcf7_antispam_fake_input($cf7) { // if you wanna check the ID of the Form $wpcf->id if(isset($_POST['fake-field']) && $_POST['fake-field'] != ''){ wp_safe_redirect( get_bloginfo("url") . '/fake-confirmation/'); exit; } } // perform the check when the_posts() function is called add_action("wpcf7_before_send_mail", "func1234_wpcf7_antispam_fake_input");
Si vous souhaitez faire de même sans WordPress
Voici le code à utiliser en PHP simple :
if(isset($_POST['fake-field']) && $_POST['fake-field'] != ''){ header('Location: http://www.monsite.com/fake-confirmation/'); exit('Redirecting you to http://www.monsite.com/fake-confirmation/'); } else { // OK, envoyer l'email }
Conclusion
La technique du honeypot permet en complément de sécuriser un formulaire face aux bots de spam et ceci sans utiliser captcha. Vous pouvez aussi Un anti-spam WordPress sans captcha : Le questionnaire pour éviter les spams.
Autre source : stackoverflow.com
2 réponses sur “Anti-spam pour vos formulaires : La technique du Honeypot”
Bonjour.
Très intéressant comme tuto.
Je souhaite également créer une fausse redirection à partir de l’extension redirection for contact form 7, qui possède différente option dont celle de renseigner un script.
J’ai recopier dans ce script le code php simple que vous proposez en modifiant « fake-field » par le nom du champ honeypot « adresse », ainsi que l’url par celle de ma page de fausse confirmation créée.
Lorsque j’effectue le test en remplissant le champ du honeypot et que je valide en appuyant sur « envoyer », un message d’erreur s’affiche. Du coup honeypot fonctionne bien mais je n’ai pas de redirection.
Le code que j’ai copier n’est-il pas bon ?
Merci pour votre aide
Bonjour Anthony, il me semble que l’extension « redirection for contact form 7 » utilise déjà la fonction
wp_safe_redirect()
(ouwp_redirect()
), ce qui à mon avis doit créer un conflit, car une seule redirection n’est possible à la fois.