Le blog Cyclonature
Passion informatique

Quelques astuces pour bloquer les robots spammeurs dans les formulaires

Normalement vous savez comment créer un input et un label donc pas besoin d'expliquer, ici je vais plutôt vous expliquer comment sur mon blog je bloque les robots spammeurs en php.
Voici quelques astuces anti-spam que j'ai mise en oeuvre sur ce blog dans le formulaire des commentaires et de la page contact.
Noter que grâce à ces astuces je n'ai reçu aucun spam depuis mars 2020.

La question

Selon moi cette technique est la mieux car c'est un sacré barrage aux spams.
La question ne doit pas être ni trop facile ni trop complexe (faites jouer votre imagination), si la question / réponse est trop facile vous risquez d'être inondé de spams et si la question / réponse est trop complexe ça risque d'être trop difficile pour les humains.
Perso j'ai pris exemple sur le CMS PluXml que j'ai adapté à ma sauce et voici ce que j'ai mis en place sur mes formulaires.
(Il me suffit juste de changer de temps en temps la question / réponse).
Question: Quel est le deuxième est le cinquième caractère du mot nb3fhze7gfs6
Réponse dans le code ci-dessous.

$array = array(
"question" => 'bh',
);

if ($question != 'bh') {
header('Location: erreurform.php');
exit;
}
else {
}

Les + de la question

L'autre solution et de faire un tableau (array) dans lequel on va chercher les questions au hasard, solution que je n'ai pas mise en place car il m'arrive de changer complètement le système par exemple comme ceci.
Parfois je montre une image par exemple une fleur de couleur rouge et je demande quelle est la couleur de la fleur.

A éviter

Si vous choisissez une question avec une formule mathématique du style "Combien font 2x2" il vaut mieux un question un peu plus hard et une question ou / et réponse en lettres.
Exemple:
Question: Combien font 15x2+6
Réponse en lettres: trente-six
----------
Autre exemple:
Question: Combien font 60+4,2
Réponse en lettres: soixante quatre virgule deux

Location: erreurform.php

J'ai crée cette page pour éviter un echo en cas d'erreur car c'est plus pratique et plus facilement réglable en CSS qu'un echo.
Vous pouvez y accéder directement via https://cyclonature.fr/erreurform.php histoire de voir à quoi ça ressemble, je trouve ça bien mieux qu'un echo sur un page blanche.

Les trucs interdits dans les inputs et le textarea

On sait tous que l'objectif d'un robot sapmmeur est de mettre des liens ou des scripts dans les formulaires.
La solution c'est d'empêcher certains mots comme http ou encore script.
Là vous allez me dire oui mais si un visiteur veut mettre un lien il ne peut pas, c'est vrai mais la plupart des visiteurs ne mettent pas de lien en commentant un article et puis on peut indiquer un lien sans qu'il soit cliquable (pas besoin d'un href ou d'un http)
Code ci-dessous à reproduire avec le mot que vous voulez interdire.

if(stripos($_POST['message'],'http') !== false){
header('Location: erreurform.php');
exit;
}

Le champ caché (honeypot)

Certains diront que ce n'est pas efficace, mais comme on n'est sur de rien ça ne coûte rien d'en mettre un.

if ( empty ($_POST['siteweb']) ) {
}
else {
echo 'Ne pas remplir ce champ';
exit;
}

Le CSS du champ caché (honeypot)

Certains robots savent lire les CSS et comprennent leurs propriétés donc l'astuce ici consiste à ne pas mettre "display:none" des fois qu'un robot comprenne ce que ça veut dire.
J'ai plutôt choisi de noyer le champ dans les couleurs du fond du formulaire et de faire disparaitre les bordures.
Résultat le champ (l'input) est toujours visible pour une robot qui va être tenté de le remplir par contre avec cette astuce l'input est invisible pour l'oeil humain.
Voici mon CSS.

#siteweb input{background:#eaeaea;border-style:none;border-width:0px}

Le Captcha de Google ce n'est pas indispensable

C'est une solution d'installer le Captcha de Google mais comme vous l'avez remarqué je ne l'ai pas installé sur mon blog, pourquoi ?
Parce que je ne veux pas de fenêtre de recueil de consentement des cookies qui serait obligatoire pour être conforme avec la loi si j'installais le Captcha de Google.
Sur mon blog il n'y a pas de cookies traceurs donc pas besoin de fenêtre de consentement des cookies et comme vous pouvez le voir dans cet article le Captcha de Google n'est pas indispensable pour éviter les spams de masse.

Le blocage par pays

La plupart des robots spammeurs viennent de Russie, des pays de l'est et d'Asie.
Quel humain de ces pays laissera un commentaire sur mon blog ?
Aucun, donc cette astuce n'est pas inutile, de plus on voit bien dans les logs de l'hébergeur que les fichiers sensibles du blog ne sont plus visés des dizaines de fois par jours suite à ce blocage.
Perso voici les pays que j'ai bloqué dans l'htaccess.
Russie, Ukraine, Roumanie, Chine, Singapour, République Tchèque et Hong Kong.

SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE UA BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RO BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE SG BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CZ BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE HK BlockCountry
Deny from env=BlockCountry

Le blocage par IP

Et pour bloquer un IP toujours dans l'htaccess c'est comme ceci (remplacer les x par l'IP)

Deny from xxx.xxx.xxx.xxx

Ou pour bloquer une plage d'IP par exemple tous les IPs qui commencent par 100.200

Deny from 100.200

Les redirections permanantes des fichiers les plus attaqués

Si vous avez un Wordpress il est bon de changer certains noms de dossiers et de fichiers, mon blog lui n'est pas un Wordpress mais un blog fait maison par moi-même.
Cela dit cette astuce me permet quand même de voir qui cherche ces fichiers et dossiers qui n'existent pas sur mon blog et donc de les diriger vers une page erreur que j'ai crée.
Vous l'avez compris cette astuce est inutile chez-moi, elle me permet juste de voir dans les logs quels IPs fait des tentatives d'intrusion et de rediriger vers une page erreur ceux qui farfouillent à la recherche d'une faille pour pouvoir les bloquer s'ils insistent (il me suffit d'examiner les vues du fichier erreur dans les logs).

RedirectPermanent /wp-login.php https://cyclonature.fr/erreur/
RedirectPermanent /wp-load.php https://cyclonature.fr/erreur/
RedirectPermanent /backup https://cyclonature.fr/erreur/
RedirectPermanent /wp https://cyclonature.fr/erreur/
RedirectPermanent /bc https://cyclonature.fr/erreur/
RedirectPermanent /bk https://cyclonature.fr/erreur/
RedirectPermanent /old https://cyclonature.fr/erreur/
RedirectPermanent /wordpress https://cyclonature.fr/erreur/
RedirectPermanent /ads.txt https://cyclonature.fr/erreur/

Conclusion:

Ces astuces sont un minimum et il existe plein d'autres solutions, bien sur ça doit être complété par une validation des adresses email (preg_match), une fonction contre les tentatives d'injection, etc. que l'on trouve facilement sur le web, ici j'ai présenté la base contre les spams que j'ai mis en place sur ce blog comme dans le formulaire de commentaire un peu plus bas sur cette page.

Version PHP

Les astuces de cette page ont été testées sur php 7.3 et php 8.3 et sont actuellement fonctionnelles sur php 8.3

Publié par Eric le 23 décembre 2023
Remonter en haut de la page