PHPMailer, formulaire de contact / Bloquer certains domaines
Résolu
Celio
-
Celio -
Celio -
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,
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:
- PHPMailer, formulaire de contact / Bloquer certains domaines
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Bloquer un contact sur whatsapp - Guide
- Bloquer pub youtube - Accueil - Streaming
- Bloquer contact gmail - Guide
2 réponses
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.
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.