[ 140464 ]
[ 38.103.63.16 ]
PHP/MySQL - Lutter contre les robots spammeurs (Captcha)Nous allons parler ici des Robots Spammeurs, et comment les éviter en utilisant des "Captcha" pour y parvenir. Les Captcha sont des interfaces qui permettent de différencier l'homme de la machine. Plusieurs méthodes sont employées comme :
Ces méthodes permettent de limiter la manipulation de formulaires par des robots (devenus de plus en plus "intelligents") et ainsi de lutter contre les spams. Ici nous allons nous pencher sur une méthode par texte, en générant un algorithme PHP qui, demandera à l'internaute de répondre à une simple question de calcul mental qu'est la somme d'une opération mathématique. Pourquoi nous avons choisi la méthode par texte ? Note : Cet exemple ci-dessous est utilisé sur notre site.
Algorithme en PHPPour commencer nous allons créer un tableau avec des valeurs choisis par nos soins, qui par la suite seront extraites aléatoirement pour former une addition. Fichier Captcha.php
<?php
function aff_captcha()
{
// Tableau de valeurs
$input = array(2, 35, 15, 6, 40, 4, 8, 22, 11, 5, 32, 10, 1, 12, 26);
// Extraction aléatoire de deux valeurs du tableau
$rand_keys = array_rand($input, 2);
// Creation et calcul de la somme des deux valeurs
$question = 'Quelle est la somme de <strong>'.$input[$rand_keys[0]].' + '.$input[$rand_keys[1]].' = </strong>';
$add = md5($input[$rand_keys[0]] + $input[$rand_keys[1]]);
echo '<table cellspacing="0" cellpadding="6" style="border: 1px solid red">
<tr>
<td><strong>Anti-Spam : </strong>'. $question .'</td>
<td><input name="reponse" type="text" size="3" maxlength="3" value="" style="font-weight: bold" />
<input name="captcha" type="hidden" value="'. $add .'" /></td>
</tr>
</table>';
}
function valid_captcha()
{
if (md5($_POST['reponse']) == $_POST['captcha'])
return true;
else
return false;
}
?>
Note : La réponse est cryptée avec la fonction md5() pour éviter que les robots des moteurs de recherche, ne copient bêtement la valeur du champ caché "captcha".
Formulaire de contrôleInsérer maintenant dans vos formulaires les 3 instructions comme dans l'exemple ci-dessous (Instructions en noir).
Fichier FormQuestion.php <?php require("Captcha.php"); // Le formulaire est-il posté ? if (!empty($_POST['submit'])) { // Vérification des champs if (empty($_POST['nom'])) echo '<p style="color: red">Veuillez inscrire votre nom !</p>'; elseif (!valid_captcha()) echo '<p style="color: red">La réponse est fausse !</p>'; else echo '<p><strong>Formulaire posté !</strong></p>'; } ?> <form action="FormQuestion.php" method="post"> <table cellpadding="4" cellspacing="1"> <tr> <td>Votre Nom : </td> <td><input name="nom" type="text" size="18" value="<?php echo $_POST['nom']; ?>" /></td> </tr><tr> <td><?php aff_captcha(); ?></td> </tr><tr> <td colspan="2"><input name="submit" type="submit" value="Envoyer" /></td> </tr> </table> </form> (0) commentaires - Voir/Editer |