Comment créer un pot de miel simple pour protéger vos formulaires contre les spammeurs

Je pense que ce post sera court et utile. L’objectif ici est de démontrer une technique simple pour vous aider à bloquer les spammeurs et les bots qui pourraient attaquer les formulaires de votre site Web. Ce destiné à être une couche supplémentaire dans la prévention du spam, pas la ressource principale à. Utilisez-le avec d’autres outils comme re, etc. En raison de sa simplicité, je vous recommande vraiment de suivre ce modèle de formulaire, alors, codons:

Imaginez que vous avez la structure de formulaire suivante:

<form action="/myformaction"> <label for="name">Your Name</label> <input type="text" name="name" placeholder="Your name here" required maxlength="100"> <label for="email">Your E-mail</label> <input type="email" name="email" placeholder="Your e-mail here" required></form>

La plupart des robots simples vont rechercher des modèles communs de formulaire, comme les noms communs d’étiquette, les id d’entrée, les attributs communs d’entrée, les champs obligatoires, etc, et que le robot va les remplir avec de fausses informations pour essayer de vous envoyer, et vos clients, des spams ou certains codes malveillants. Les champs les plus courants à rechercher sont des champs nommés comme « email, téléphone, adresse »…

Alors, trichons là-dessus et créons un simple pot de miel en changeant la structure de notre formulaire en:

<style> .ohnohoney{ opacity: 0; position: absolute; top: 0; left: 0; height: 0; width: 0; z-index: -1; }</style><form action="/myformaction"> <!-- Real fields --> <label for="nameaksljf">Your Name</label> <input type="text" name="nameksljf" placeholder="Your name here" required maxlength="100"> <label for="emaillkjkl">Your E-mail</label> <input type="text" name="emaillkjkl" placeholder="Your e-mail here" required> <!-- H o n e y p o t --> <label class="ohnohoney" for="name"></label> <input class="ohnohoney" autocomplete="off" type="text" name="name" placeholder="Your name here"> <label class="ohnohoney" for="email"></label> <input class="ohnohoney" autocomplete="off" type="email" name="email" placeholder="Your e-mail here"></form>

Voyons les changements:

D’abord nous avons créé une classe pour cacher les choses. La classe .ohnohoney. Il est important de souligner certaines choses maintenant:

  1. Ne pas utiliser display:none, certains bots ne peuvent pas accéder aux champs avec display none, d’autres savent simplement qu’ils ne doivent pas remplir les champs display none. N’utilisez pas « hidden » dans le nom de la classe, certains bots avancés peuvent le reconnaître.

  2. Puis nous avons créé les « Real fields ». Ce sont les champs visibles et ceux qui doivent être pertinents pour votre backend en termes de données. Ces champs doivent avoir les identifications changées en hashs. En général, j’utilise le modèle « nameHASH » pour tous les champs. N’utilisez pas « name-hash » ou d’autres variantes de ce modèle, une simple division exposerait le nom réel du champ. Maintenant, un bot ne peut pas reconnaître ce que sont ces champs, ils savent juste que le formulaire a des champs qui doivent être remplis, peut-être en suivant le « type » comme motif.

  3. En créant les champs « h o n e y p o t » nous serons en mesure d’identifier le Spammer. Important : Laissez le label vide, utilisez votre classe ‘ohnohoney’ pour cacher toutes ces fausses entrées. Rendez votre fausse entrée la plus simple, générique et attrayante possible. Utilisez des noms simples et communs comme « email, téléphone, nom, etc », désactivez l’autocomplétion (ainsi, le navigateur ne le remplira pas), désactivez les règles, mais gardez les types.

Maintenant nous avons 2 parties dans notre formulaire : Des champs réels avec nos entrées protégées par des hachages et des noms étranges (vous pouvez mettre en œuvre le hachage ou les noms étranges comme vous le préférez). Et notre pot de miel (n’écrivez pas « pot de miel », préférez diviser les lettres pour éviter toute reconnaissance). Maintenant sur votre backend:

  1. Vérifiez si l’un des champs « h o n e y p o t » est venu rempli. Si oui, félicitations, vous avez piégé un spam. La plupart d’entre eux rempliront tous ces champs sans les différencier. Donc, tout ce que vous avez à faire est de vérifier si l’un de vos champs « h o n e y p o t » est rempli, si oui, c’est un spam. Si vous préférez, vous pouvez faire cette vérification sur le client, dans le cas d’un formulaire ajax, cela évitera d’utiliser les ressources du serveur pour calculer des données inutiles (mais gardez quand même la validation en backend). Lorsque vous attrapez un spam, n’envoyez pas les données et faites ce que vous voulez avec. Si les noms comme « email, téléphone, etc » sont importants pour votre backend, transcrivez simplement les noms en utilisant des tableaux.

Voici un repo à fichier unique avec une implémentation simple de cette technique:
https://github.com/felippe-regazio/php-honeypot-example

Rappellez-vous : c’est juste une couche simple pour prévenir les attaques d’une manière simple, certaines technologies peuvent identifier même ces motifs, donc utilisez toutes les armes que vous pouvez contre elle. Mais je crois que ce simple motif peut éviter au moins 50% des spams dans votre page web.