PHPMailer, formulaire de contact / Bloquer certains domaines

Résolu/Fermé
Celio - Modifié le 6 janv. 2022 à 17:46
 Celio - 7 janv. 2022 à 15:59
Bonsoir,

J'utilise la bibliothèque logicielle d'envoi d'e-mails PHPMailer pour mon formulaire de contact sur mon site Internet. Mon formulaire contient un captcha, mais j'ai reçu un premier spam (mon site est en ligne depuis plus d'une année), et je souhaiterais bloquer les soumissions de formulaires lorsque l'adresse mail renseignée contient le nom de domaine du spammeur. Idéalement, si je pouvais avoir une sorte de liste rouge pour les éventuels futurs spams (liste que je compléterais au fur et à mesure), ce serait top.

J'avais eu beaucoup de mal à mettre en place ce formulaire en PHP, étant un parfait débutant. Je comprends mieux aujourd'hui le fonctionnement, mais je compte sur votre indulgence si ma question est naïve.

Merci d'ores et déjà pour votre aide,
A voir également:

2 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
6 janv. 2022 à 19:26
Bonjour,

Je suppose que tu fais déjà quelques contrôles sur les données envoyées par le formulaire avant d'envoyer le mail, notamment vérifier que l'adresse mail n'est pas vide et est valide ?
Tu pourrais donc ajouter un contrôle supplémentaire pour vérifier que le domaine de l'adresse mail ne fait pas partie d'une liste de domaines bloqués.

Une solution simple en php serait d'utiliser la fonction explode() pour découper l'adresse mail en deux parties autour du caractères '@' afin de récupérer le domaine en 2e partie. On pourrait aussi utiliser substr() et strpos() pour extraire le domaine de l'adresse mail.
Puis utiliser la fonction in_array() pour vérifier si le domaine fait partie d'une liste de domaines bloqués.

Une autre solution (peut-être un peu plus compliquée pour un débutant) serait d'utiliser une expression régulière (regex) avec la fonction preg_match().
Tu peux facilement trouver plein d'exemples pour l'utilisation de cette fonction sur la documentation de php et sur le net, mais n'hésites pas à suivre un tuto si tu ne connais pas les expressions régulières. Un tuto parmi d'autres :
https://www.commentcamarche.net/contents/803-php-expressions-regulieres

Enfin pour une solution un peu plus avancée, on pourrais faire le même type de contrôle non pas sur le domaine de l'adresse mail mais sur les enregistrements MX correspondant au domaine (avec la fonction php getmxrr() par exemple), notamment car les spammeurs peuvent utiliser des "alias" de domaine.
Les enregistrements MX permettent de définir les serveurs de gestion du courrier d'un domaine dans le système de résolution de nom de domaine (DNS).
En savoir plus sur les enregistrements MX et le DNS : https://www.commentcamarche.net/informatique/technologies/26235-dns-principe-fonction-utilisation/
Par exemple, les domaines des adresses finissant par @hotmail.com ou @hotmail.fr utilisent en fait un domaine finissant par outlook.com pour la gestion du courrier (MX).
Mais si tu ne reçois pas beaucoup de spam provenant de plein de domaines différents, le contrôle uniquement sur le domaine de l'adresse mail devrait être pour l'instant suffisant.
1
Bonjour Pitet,

Merci pour cette réponse très complète. En effet, je fais déjà plusieurs contrôles sur les données. Je vais explorer les différentes options proposées, merci beaucoup pour cet aiguillage précieux.

J'espère que ta réponse servira également à d'autres.
0