Accueil » Conseils & tutoriels sites internet » Tutoriels Wordpress » WordPress WooCommerce : interdire les adresses email jetables

WordPress WooCommerce : interdire les adresses email jetables

Les adresses emails jetables sont de simples adresses mails avec une durée de vie limitée dans le temps. Elles sont utilisées à l’origine afin de pouvoir se connecter ou réaliser une action sur internet mais de ne pas recevoir de retours sur une adresse email soit personnelle, soit professionnelle.

Cela permet donc de récupérer un simple élément sur un site, mais de ne pas avoir à subir les newsletters ou messages de retour, qui pourraient nous polluer les emails (bien que depuis nous pouvons utiliser la nouvelle Règlementation sur la Protection des Données Personnelles).

Le souci est qu’à présent, ces adresses emails sont majoritairement utilisées pour spammer, réaliser de mauvaises actions, ou allez savoir quelle idée encore. Par-dessus le marché, elles peuvent vous polluer votre site, en augmentant considérablement le nombre d’utilisateurs enregistrés (alors que ceux-ci n’existent pas réellement).

Comment faire pour se débarrasser de ces mails jetables importuns ?

 

Interdire les mails jetables sous WordPress

Tout se passe depuis le thème enfant, et il en sera de même concernant l’autre partie abordée, à savoir WooCommerce. Il faut donc, si vous n’en avez pas, créer un thème enfant pour votre site WordPress.

Il va falloir interdire des adresses emails précises – voire même toute une liste, plutôt longue – à chaque fois qu’un utilisateur cherche à s’enregistrer.

L’action disponible sous WordPress est user_register. Nous allons utiliser cela afin de détecter si le mail du client est jetable, ou non.

La fonction démarre donc ainsi, avec son hook :

add_action( 'user_register', 'disposable_emails_registration_save', 10, 1 );
function disposable_emails_registration_save( $user_id ) {
//
}

Détectons alors l’adresse email. Cela nous donne :

add_action( 'user_register', 'disposable_emails_registration_save', 10, 1 );
function disposable_emails_registration_save( $user_id ) {
  $user_info = get_userdata($user_id);
  $user_email = $user_info->user_email;
}

Nous disposons donc, grâce à get_user_data, de l’adresse mail du client. Voyons voir si celle-ci est présente dans notre liste.

Télécharger la liste des emails jetables

Il va donc falloir comparer toute la liste pour voir si l’on y trouve le mail saisi par le client. Notre fonction devient donc :

/**
 * Ban WordPress registration based on disposable email
 * @see 
 * @author Team Ever
 */
add_action( 'user_register', 'disposable_emails_registration_save', 10, 1 );
function disposable_emails_registration_save( $user_id ) {
  $user_info = get_userdata($user_id);
  $user_email = $user_info->user_email;
  $disposable_emails = array('ma-liste-de-mails@jetables');
  if (preg_match($user_email, $disposable_emails)) {
    $errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The email address isn’t correct.' ) );
  }
}

Et grâce à l’utillisation de preg_match, si l’adresse mail se trouve dans le tableau, nous retournons un message d’erreur précisant que l’adresse mail est incorrecte.

Pensez bien à optimiser le tableau des adresses mails jetables, il s’agit d’un array PHP très simple.

 

Interdire les mails jetables sous WooCommerce

Le souci est que sous WooCommerce se trouvent d’autres hooks permettant au client de s’enregistrer, de manière différente de celle native de WordPress. Il faut donc ajouter une fonction pour la traiter différemment, et bannir les mails jetables lors du passage d’une commande.

Le hook est désormais woocommerce_checkout_process. La fonction démarrera ainsi :

/*
 * Do not place order if disposable email is used
 */
add_action('woocommerce_checkout_process', 'disposable_emails_wooregistration');
function disposable_emails_wooregistration() {
  global $woocommerce;
  $email = $_POST['billing_email'];
  $explodedEmail = explode('@', $email);
  $user_email = array_pop($explodedEmail);
}

Nous avons donc notre tableau précédemment enregistré dans un array (et au passage il est possible de créer une fonction qui ne retourne que ce tableau, pour éviter la redondance), nous allons donc voir à présent si user_email se trouve dans disposable_emails.

Easy maintenant 🙂

/*
 * Do not place order if disposable email is used
 */
add_action('woocommerce_checkout_process', 'disposable_emails_wooregistration');
function disposable_emails_wooregistration() {
  global $woocommerce;
  $email = $_POST['billing_email'];
  $explodedEmail = explode('@', $email);
  $user_email = array_pop($explodedEmail);
  $disposable_emails = array('ma-liste-de-mails@jetables');

  if (in_array($user_email, $disposable_emails))
      wc_add_notice( __( 'Cette adresse email n\'est pas autorisée.' ), 'error' );
}

Et lors du passage d’une commande, ces adresses emails sont désormais interdites, affichant un message d’erreur au cas où celles-ci seraient utilisées.

 

Les limites

La liste des adresses mails jetables est certes très longue, mais elle est certainement encore incomplète. Elle n’inclura pas non plus les adresses mails inexistantes (comment détecter si une adresse n’existe pas ?) ni les fautes de frappe.

Cependant, vous pouvez tout-à-fait ajouter des mails à la liste existante, ce qui vous permettra d’agrandir votre « blacklist », et n’oubliez pas de sécuriser votre site internet contre les tentatives d’intrusion si fréquentes sur ce type de CMS. Mettez-vous à jour régulièrement et installez des plugins de sécurité, en plus de ces lignes de code.

 

Imprimer Imprimer
Suivre Cyssoo:

Développeur - formateur

Je cherche à display errors le monde, vous auriez pas la doc' ? Follow me on Twitter !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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