Protéger vos formulaires du spam en PHP
Tout d'abord, je tiens à vous signaler que la protection que nous allons mettre en place est assez sommaire, mais rapide à installer et très simple.
J'utilise cette solution pour le livre d'or du site et pour le moment nous n'avons plus de spam, alors qu'avant cela les spams étaient quotidiens dans le livre d'or...
Le principe est le suivant, nous allons créer un nombre aléatoire, puis nous demanderons à notre visiteur d'effectuer une petite opération sur ce nombre (du genre +1). Ensuite le formulaire est envoyé et nous comparons la valeur entrée à la valeur attendue...
Il est important d'effectuer une opération sur le nombre car sinon les robots peuvent récupérer la valeur, la mettre et continuer à spammer sur votre site...
J'utilise cette solution pour le livre d'or du site et pour le moment nous n'avons plus de spam, alors qu'avant cela les spams étaient quotidiens dans le livre d'or...
Le principe est le suivant, nous allons créer un nombre aléatoire, puis nous demanderons à notre visiteur d'effectuer une petite opération sur ce nombre (du genre +1). Ensuite le formulaire est envoyé et nous comparons la valeur entrée à la valeur attendue...
Il est important d'effectuer une opération sur le nombre car sinon les robots peuvent récupérer la valeur, la mettre et continuer à spammer sur votre site...
Voici la syntaxe pour générer rapidement un nombre aléatoire en php :
Ici nous créons un nombre aléatoire entre 10 et 100 que nous attribuons à la variable $nombre.
Ensuite il faut demander au visiteur d'effectuer une petite opération sur ce nombre,ce qui se traduit par :
L'input caché lenombre nous sera utile par la suite pour comparer la valeur envoyée à la valeur attendue...
Le formulaire est ensuite envoyé et il nous suffit de comparer les valeurs :
La variable $lenombre reprend ici la valeur attendue, sans l'opération sur celui-ci.
La variable $verif elle, est la valeur rentrée par l'utilisateur.
Il nous reste plus qu'à comparer la valeur rentrée par l'utilisateur à la valeur attendue.
| Code: |
| $nombre=rand(10, 100); |
Ici nous créons un nombre aléatoire entre 10 et 100 que nous attribuons à la variable $nombre.
Ensuite il faut demander au visiteur d'effectuer une petite opération sur ce nombre,ce qui se traduit par :
| Code: |
| Combien font <b><? echo $nombre; ?> +1 ? : </b>
<input type="hidden" name="lenombre" value="< ? echo $nombre; ?>"> |
L'input caché lenombre nous sera utile par la suite pour comparer la valeur envoyée à la valeur attendue...
Le formulaire est ensuite envoyé et il nous suffit de comparer les valeurs :
| Code: |
|
$lenombre=$_POST['lenombre']; $verif=$_POST['verif']; if($pseudo=='' or $commentaire=='' or $verif!=$lenombre+1) { // Alors on fait ce qu'il faut faire, entrer les données dans la base Mysql par exemple... |
La variable $lenombre reprend ici la valeur attendue, sans l'opération sur celui-ci.
La variable $verif elle, est la valeur rentrée par l'utilisateur.
Il nous reste plus qu'à comparer la valeur rentrée par l'utilisateur à la valeur attendue.
Comme vous avez pu le voir, cette protection se met facilement et rapidement en place, mais comporte certaines limites, les robots les plus évolués pourront peut être déjouer cette protection.
Une autre solution aurait été de créer une image avec un code composé de chiffres et de lettres, mais cela est plus complexe à mettre en place et cela est moins sympa pour l'utilisateur aussi...
Une autre solution aurait été de créer une image avec un code composé de chiffres et de lettres, mais cela est plus complexe à mettre en place et cela est moins sympa pour l'utilisateur aussi...