Blog Web & Design

Détecter les spams dans les formulaires de contact WordPress

Est-ce un spam ou non ? Voic la question à laquelle j’aimerai pouvoir répondre lorsque mon site reçoit un nouveau message sur son formulaire. Et voici quelques pistes pour y répondre.

Lors de mes projets web, je cherchais un moyen de protéger les formulaires de contact des spams habituels, en évitant d’utiliser le captcha de Google.

Besoin de faire sécuriser un site wordpress ou réparer un site wordpress ? Contactez-moi

Les captchas sont efficaces mais pas très pratiques car il faut créer une application afin de recuperer un ID, ça embête les utilisateurs et parfois ça ne fonctionne pas bien sur mobile et de plus ça rajoute des appels javascripts qui ralentissent le chargement du site … je n’ai jamais été fan et je préfère une approche plus « naturelle » pour détecter les spams.

L’idée est donc d’avoir un plugin qui protège des messages indésirables, sans faire appel à un service externe.

Ainsi il m’a fallu reflechir à différentes méthodes pour détecter l’authenticité d’un message et donc définir les éléments qui font qu’un message ressemble à un spam.

Une des grandes questions est finalement de pouvoir définir « Est-ce un humain ou un robot qui à envoyé ce message » ?

Les éléments d’un spam identifiables dans le champ message

En y regardant de plus près, il est possible de trouver des points communs entre tout les messages indésirables : ils reprennent souvent les mêmes thématiques, comportent les mêmes mots indésirables ou sont dans des langues étrangères qui ne nous interessent pas.

Je vais vous détailler un peu comment reconnaitre tous les indices d’un spam pour ensuite éviter de recevoir des e-mails indésirables sur son site internet.

Détecter la langue utilisée

Il faut être honnete, lorsque nous recevons des messages, seuls ceux écrits dans les langues que nous parlons nous interessent. Ainsi pour la plupart de mes clients, seuls les messages écrits en français sont interessants, et parfois l’anglais.
Si à cela on ajoute le fait que de nombreux spams sont ecrits en Russe ou en Chinois, detecter la langue d’un message est une des solutions qui s’offre à nous.

Besoin de faire sécuriser un site wordpress ou réparer un site wordpress ? Contactez-moi

La detection de la langue d’un message peut se faire grâce à certaines lettres ou signes qui sont spécifiques à cette langue. Si nous voulions détecter l’epagnol, il serait donc possible de detecter le tilde ñ ou l’e point d’interogation inversé. Egalement, l’alphabet cyrilique Russe ou les sinogrammes Chinois sont facilement détectables par le site.

Voici un exemple de function WordPress que nous pourrions utiliser :

Détecter le Russe

function tdcf7_if_is_russian($text) {
    return preg_match('/[А-Яа-яЁё]/u', $text);
}

Détecter le Chinois

function tdcf7_if_is_chinese($text) {
    return preg_match("/\p{Han}+/u", $text);
}

Avec cette solution, nous pouvons facilement créer une liste noire de langues interdites dont on ne veut pas recevoir les messages.

Définir des mots interdits

Que ce soit pour détecter une langue ou éviter de recevoir des spams sur des sujets qui ne nous interessent pas, on peut mettre en place une liste de mots interdits, qui si il sont trouvés dans le message, menent à invalider l’envoi du message.

Toutefois il faut faire attention aux mots d’origine étrangère courament utilisés dans la langue française.

Besoin de faire sécuriser un site wordpress ou réparer un site wordpress ? Contactez-moi

Sachez que par defaut le plugin CF7 utilise la liste noire des commentaires de WordPress.

La longueur des messages

Un message trop court est suspect. Lorsque quelqu’un vous envoi un message il a certainement un besoin qui demande plus de 2 ou 3 mots.

les messages en dessous de 30 caractères peuvent à mon avis être bloqués.

A contrario un message trop long qui ressemble à un copier/coller peut être considéré comme suspect.

Le champ nom

Concernant les noms saisis dans le formulaire, après avoir analysé les mails spam qui passaient les barrières que j’avais mis en place, j’ai découverts que beaucoup de bots de spams utilisent parfois le même nom qu’ils repettent plusieurs fois dans la même journée.

Il est donc possible de faire une détection des noms récurrents, et de les bloquer si ils reviennent trop souvent, disons 3 fois d’affilé.

Egalement un nom ne doit pas être composé de numéros. On peut donc mettre les côté les messages provenant de totodu45.

Le champ téléphone

En France les téléphones commencent par un 0, contiennent 10 chiffres ( 14 caractères maximum en comptant les espaces ) et contrairement à d’autres pays, il ne commence jamais pas un double 0. De ce fait nous pouvons bloquer les messages contenant un champ téléphone commençant par ’00’.

En regle generale les gens en France n’utilisent pas de tirets, mais plutot des espaces ou des points entre le numéros. On peut également détecter les numéro avec des tirets.

Il est possible de faire plusieurs vérifications pour valider qu’un numéro est français.

Le champ e-mail

L’extension de domaine :

Même si cela n’indique pas forcément une tentative de spam, il est possible de bloquer des e-mails provenant de domaines étrangers, ainsi les emails terminant par .co.uk (Royaume-unis), .de (Allemagne), .ru (Russie), .cn (China) peuvent potentiellement être une source de nuisance.

Trop de points dans un email

Certaines fausses adresses e-mail contiennent trop de points. Honnetement, qui utilise plus de trois points dans son adresse e-mail ? On peut donc bloquer les e-mails qui contiennent trop de points.

Les sous-domaines

Même si techniquement il n’y a rien de méchant, un e-mail sous forme de sous-domaine peut poser question. Ex: nom@test.domaine.com

Vérifier l’activité humaine

D’autres solutions peuvent nous servir pour détecter qu’un utilisateur est réel et qu’il interragit avec votre site.

Le mouvement de la souris

Pour vérifier une activité, on peut detecter si la souris a bougée ou si il y a eu un scroll, ce qui est plus pratique sur mobile.

Les pages visités

On peut également vérifier si avant d’arriver sur la page contact, l’utilisateur est passé par d’autres pages. Car on n’envoi pas de message sans avoir consulté plusieurs pages d’un site. Pour cela il est possible en utilisant wp_get_referer() qui permet de récupérer l’URL de la page précédemment visité.

Mon projet de plugin antispam

Besoin d’aide

Pour mettre en place tout ces améliorations, j’ai crée un plugin que j’améliore chaque fois que je constate une nouvelle technique de spam. Selon l’avancée du developpement je l’installe même sur des sites de clients. Actuellement le plugin que je developpe permet de bloquer les messages frauduleux en se basant sur les formulaires générés par le plugin CF7.

Le plugin est encore en cours de developpement est n’est pas directement disponible au téléchargement publique, car même si j’ai de l’expérience dans la création de thème et dans la création de petits plugins utilitaires, j’aimerai pouvoir proposer cette extension sur le répértoire officel des extensions et pour cela, j’aurai besoin d’aide, d’une personne ayant de l’expérience dans la création de plugin WordPress.

Si vous êtes developpeur de plugin, que vous en avez assez des spams sur les sites de vos clients, et que vous souhaitez m’aider, n’hésitez pas à me prendre contact avec moi.

Dernière mise à jour le Auteur : Thomas Dufranne

Ce contenu vous a-t-il été utile ?

Merci pour votre avis !

Si vous pensez pouvoir aider d'autres personnes, pensez à partager le contenu

Merci pour votre avis !

Désolé que vous n'ayez pas trouvé votre réponse.

Je vous invite à me poser vos question par commentaire ou par e-mail !

Repondre

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.