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 ?
Pour des raisons simples, car il faut penser aux personnes malvoyantes et malentendantes, donc proscrire les codes visuels (souvent illisibles) et les sons.
Pour 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;
}
?>
Insé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>