Toutes les clefs pour réussir dans le e-commerce

Mes modules Prestashop

Protection de formulaire contre les robots.

Un client (dont je ne suis pas l’auteur du site, je préfère le préciser tout de suite) m’a signalé avoir un problème de spam avec les formulaires de son site. C’est un problème récurrent qu’il est facile de corriger en quelques minutes.

Attention, cette méthode (comme toute les méthodes d’ailleurs) n’est pas infaillible.  Une étude rapide, mais manuelle, du code HTML de votre formulaire permettrait certainement aux spammeurs d’identifier la solution pour continuer à vous envoyer des mails non sollicités. Mais dans 99% des cas elle suffira à bloquer les robots. Les spammeurs ne prennent, en règle générale, pas le temps d’étudier les formulaires un minimum protégés vous devriez donc être tranquille.

L’idée est simple, les robots de spam n’utilisent pas le Javascript. Par conséquent il suffit de mettre dans votre formulaire un champ caché que nous remplirons avec une fonction javascript, le PHP chargé d’envoyé l’email vérifiera alors la valeur de ce champ caché et décidera si le mail doit être envoyé ou pas.

Mise en place

Le code HTML



<form action="protection-formulaire.php"method="post">
<p>
Nom:<input type="text" name="nom" /><br />
Prenom:<input type="text" name="prenom" /><br />
Message:<br />
<textarea name="message" rows="6" cols="35"></textarea>
<input type="hidden" id="testBot" name="botOrNotBo" value="imBot" />

<input type="submit" value="let's go"/>
</p>
</form>

</form>

Ci-dessus vous avez le code d’un formulaire classique où l’on a simplement ajouté un champ hidden avec comme nom “botOrNotBot” et comme identifiant “testBot”

Le javascript



<script type="text/javascript">

document.getElementById('testBot').value="imNotBot";

</script>


Le code ici est très simple, on demande au javascript de remplir le champ “testBot” avec la valeur “imNotBot”.

A noter: Ce code devra être placé en bas de votre page ou tout du moins après votre formulaire. Dans le cas contraire le champ “testBot” n’existerait pas encore au yeux de javascript et vous auriez une erreur.

Le Php



If($_POST['botOrNotBot']=="imNotBot") {

//ce n'est pas un spam donc j'envoie le message

}

else {

//C'est un spam donc je n'envoie pas le message !

}


Enfin, en ce qui concerne le PHP un simple if vérifiant la valeur du champ imNotBot permettra de savoir si oui on non nous avons à faire à un robot.

Démonstration

Pour vous donner un petit aperçu de ce que cela donne j’ai mis en ligne cette démo. Il vous suffit de tester avec et sans le javascript pour voir la différence.

Soyons discret

Pour l’exemple j’ai simplifié le code et j’ai donné des noms plutôt explicites à chaque variable. Mais il serait préférable de ne pas simplifier la vie des spammeurs en leur donnant toutes les clefs pour passer outre cette protection en un coup d’oeil.

Il est donc préférable d’utiliser des noms de variables et des valeurs anodines. De la même manière le code javascript devrait plutôt se trouver dans une fonction (au nom lui aussi anodin) elle-même placée dans un fichier externe.

Les défauts

Cette méthode de protection est extrêmement basique mais elle devrait bloquer la majorité des robots de spam. En effet, un spammeur n’est pas un hackeur son but n’est pas de chercher à déjouer les système de sécurité mais à envoyer le plus possible de mails. Par conséquent les formulaires avec un minimum de protection lui feront perdre du temps et il passera son chemin. Mais si vous tombez sur un spammeur un peu plus zélé il risque de découvrir facilement la solution pour contourner le problème, il faudra alors réfléchir à mettre en place une solution plus efficace.

L’autre problème est l’accessibilité. Avec cette méthode votre formulaire ne fonctionnera plus sans javascript. On lit un peu partout qu’il y a environ 10% d’utilisateurs qui naviguent sans javascript. J’ai un peu de mal avec cette valeur car il est difficile de savoir si, parmi ces utilisateurs, les robots sont comptabilisés. Si c’est le cas je pense que le pourcentage est en réalité bien plus faible.

<form action=”protection-formulaire.php” method=”post”>
<p>
Nom:<input type=”text” name=”nom” /><br />
Prenom: <input type=”text” name=”prenom” /><br />
Message:<br />
<textarea name=”message” rows=”6″ cols=”35″></textarea>
<input type=”hidden” id=”testBot” name=”botOrNotBot” value=”imBot” />
<input type=”submit” value=”let’s go” />
</p>
</form>

Poster un Commentaire

10 Commentaires sur "Protection de formulaire contre les robots."

Recevoir un email pour
avatar
Trier par:   plus récent | plus vieux | Plus de vote
Crunch
Invité

Ou sinon on peut installer un système de questions/réponses, c’est aussi simple et ça fonctionne avec ou sans javascript ;)

Pas besoin de mettre des questions compliquées, pour ma part j’ai mis des trucs genre 3+4 …

Crunch
Invité
Crunch

@maniT4c : C’est vrai que pour une organisation ça ne fait pas pro mais comme pour nous avec un site ou un blog c’est beaucoup selon moi mais bon après c’est une question de goût !

Sinon il y a aussi le Captcha mais la encore c’est pas top car bien souvent on a du mal à décrypter l’image …

Photoscope
Invité

Et pourquoi ne pas mettre un champ en hidden dans le formulaire. La pluspart des spam remplissent tous les champs, suffit alors de regarder si le champ qui est envoyé n’est pas vide, auquel cas c’est un spam.

Robin
Invité

Un champs en hidden ne servirait à rien, la solution de manit4c est actuellement la meilleure.

En effet quand je fait mes scripts de s… commentaire je récupère tout les champs et je remplis seulement ceux qui m’intéressent .

elo
Invité
elo

Malheureusement, aucune de ces méthodes ne fonctionne avec les robots actuels : le javascript est géré, les captcha sont analysés (même les opérations de type 4+5).

J’ai subit à un moment donné du spam sur mon site. La parade : faire reconnaître des images ou poser des questions longues et simples (du genre “quelle est la couleur du cheval blanc d’Henri IV). Imparable… pour l’instant.

Mais oubliez les autre Captcha, ils ne servent plus à rien.

el
Invité
el

Bonjour,

Je suis novice en php/javascript etc..
J’ai voulu appliquer cette méthode sur mon site.
Cela ne marche pas
Ma console Web m’indique :
TypeError: ‘null’ is not an object (evaluating ‘document.getElementById(‘testBot’).value=’imNotBot’)

Késako?!

Merci beaucoup!!

wpDiscuz