Filtrer les robots spammeurs
Le spam - ou pourriel - est la plaie d'Internet. En se renseignant un peu sur ces scripts particuliers qui nous pourrissent la vie, voici une stratégie simple pour contrecarrer cette nuisance.
Principe de base
Un robot spammeur est un script - souvent écrit en PHP - qui se charge de récolter le contenu des pages web et y chercher les formulaires.
La stratégie de pourrissement est simple:
- pointer vers la racine du site;
- à partir de la racine du site chercher toutes les pages liées à celle-ci et analyser l'arborescence de manière souvent récursive;
- chaque lien est enregistré en base de données;
- le contenu de chaque page est analysé à la recherche de la balise
form
. Si elle est trouvée, le lien est marqué en base de données comme potentiellement pourrissable; - la main est passée ensuite à un script de pourrissement. Ce script
analyse les champs de saisie et y introduit du texte:
- une adresse mail merdique dans un champ mail;
- un nom bidon dans un champ nom
- un commentaire qui est généralement de la pub pour un site de vente de viagra, cialis, poker en ligne...
- En retour, le script de pourrissement teste le contenu du formulaire de soumission des données;
- s'il n'y a pas d'erreur, l'adresse de la page de formulaire est mémorisée et tagguée comme OK-pourrissable!
Non, on n'a pas écrit ce genre de script, mais si on avait à l'écrire, c'est à peu près ce que nous ferions.
La parade
Les parades devrions-nous dire sont en fait nombreuses et variées:
- le captcha qui consiste à afficher un code de validation sous forme d'image brouillée. Nécessite une librairie spécifique et la gestion d'images avec les codes associés;
- la question genre combien font 3 plus cinq dont il faut écrire la réponse en chiffres...
- donner aux champs de saisie des noms fantaisistes ce qui ne garantit pas qu'ils ne soit pas également remplis de manière fantaisiste...
Toutes ces stratégies consistent à faire barrage à un robot spammeur.
Or, qu'est-ce qui satisfait un robot spammeur? C'est quand il réussit à envoyer son mail pourri!
Notre parade consiste à lui faire croire que le message a bien été envoyé. La solution consiste à rajouter un champ qui sera invisible à l'affichage. Par exemple, l'âge du contributeur pour un message mail:
<label for="age" class="monAge">votre age: <input type="text" name="age" id="age"></label>
et on associe à class="monAge">
ce css:
.monAge { display: none; }
Résultat: le champ age ne s'affichera pas. Donc, s'il n'est pas visible, un être
humain ne le remplira pas. Par contre, un crétin d'automate spammeur verra ce
champ qui n'est pas de type hidden
et le remplira.
Le mot age
a la même signification en français et en anglais. Pour un
robot spammeur bien conçu, sa réaction est de le remplir.
Dans de script de validation du message, il suffit de tester si age
a été renseigné:
// test si age est vide if (empty($_POST['age']])) { // ...ici partie de code qui envoie le message } ?> ...ici message HTML qui confirme envoi message OK...
Donc: humain ne remplit pas age => message envoyé; robot remplit age => message pas envoyé! Mais humain et robot reçoivent le même message de confirmation d'envoi de message...
Efficacité? Efficace à quasiment 100%... Mis en application sur de nombreux sites perso et pros et plus d'emmerdeurs....