Retour

Prévenir les inscriptions utilisateurs spam sur Drupal

Le formulaire d'inscription utilisateur sur un site web est une cible de choix pour les robots. Mettre en place des moyens de prévention pour le spam est un prérequis. Dans le cas des CMS comme Drupal, des mécanismes sont nativement mis en place mais peuvent être insuffisants ou ne pas convenir aux besoins métier.

Bloquer le formulaire d'inscription

Pour grande partie des sites en Drupal, les utilisateurs actifs sont restreints à l'équipe éditoriale, l'équipe communication ou encore à l'équipe technique. Ces utilisateurs ont eu leur compte créé manuellement par un administrateur et ne l'ont pas fait par eux-même. Dans ce cas, les solutions les plus simples sont souvent les meilleures. Désactiver le formulaire d'inscription empêchera toute inscription sur le site.

null

Ce réglage se fait sur la page "Paramètre de compte" (/admin/config/people/accounts), vous devez choisir l'option "Administrateurs seulement". Cela désactivera le formulaire d'inscription aux visiteurs du site.

Vous pouvez aussi laisser le formulaire actif mais protéger la page par un mot de passe, avec la configuration du serveur (htpasswd apache par exemple). Cela peut être pratique pour les entreprises qui veulent laisser leurs collaborateurs créer leur compte de manière autonome tout en masquant le formulaire au public. Dans ce cas, je vous conseille de choisir la dernière option "Visitors, but administrator approval is required", pour prévenir tout risque de compte frauduleux validé par défaut. Cette tâche devra être réalisée manuellement par un administrateur.

Utiliser une solution captcha

Toujours dans l'idée de garder le formulaire actif, une autre possibilité est de mettre en place une solution captcha. Même si ces solutions ne sont pas infaillibles elles permettent de s'affranchir de la majorité des soumissions de formulaire non désirées. Il en existe plusieurs, je ne les détaillerai pas dans cet article, mais je vous invite à découvrir la solution Altcha que nous avons présentée sur notre site (open-source et RGPD compliant).

Supprimer les utilisateurs spam

Dans le cas où vous n'aviez pas mis en place de blocage des inscriptions et qu'un robot à trouvé l'url de votre formulaire, vous pouvez avoir rapidement des dizaines de comptes créés. Si la validation des comptes était désactivée, les comptes ont donc un statut inactif par défaut, on peut utiliser le code suivant qui sera exécuté une fois au prochain déploiement.

null
function hook_update_N(&$sandbox) {
 
 $ids = \Drupal::entityQuery('user')
   ->accessCheck(FALSE)
   ->condition('status', 0)
   ->execute();

 foreach ($ids as $id) {
   $user = User::load($id);
   if ($user instanceof UserInterface && $user->id() != 1) {
     $user->delete();
   }
 }
}

Dans cet exemple, on utilise le hook_update_N pour charger tous les utilisateurs désactivés puis les supprimer. On peut évidemment personnaliser ce code suivant nos besoins en ajoutant d'autres paramètres à la requête comme une date d'inscription ou l'absence d'un rôle.

Conclusion

Ces solutions vous permettront de vous protéger de la majorité des inscriptions non désirées et de les supprimer le cas échéant. Néanmoins, elles ne dispensent pas de mettre en place une politique de mot de passe sécurisés, de renouveler périodiquement de ces mots de passe et de mettre à jour les modules en lien avec ces sujets.

Il est possible en parallèle de se prémunir des tentatives de brutes forces ou robots malveillants avec une politique de sécurité accrue côté serveur web avec la mise en place de WAF (Web Application Firewall).

D’autres articles à découvrir