Pseudo Mot de passe
fleche Inscription
fleche Mot de passe oublié ?
Informations Générales
Chargement en cours...
Nombre de Visites fleche [ 140464 ]
Votre IP fleche [ 38.103.63.16 ]
Vous êtes ici : Home Page Dossiers Trucs et astuces (PHP) Anti Robots Spammeurs
Imprimer Imprimer le document

Informations Membres

[195] Posts sur le forum
[177] Membres inscrits
Il y a en ligne :
  arrow 0 Membre
  arrow 1 Invité

fled Membre en ligne:
Aucun

Partenariat

Partenariat Vous pouvez aider ce site à évoluer, en contribuant à son développement. Proposez vos idées de cours et/ou dossiers. Rendez-vous dans « Partenariat » pour en savoir plus.


Nom de domaine

www.

Partenaires

PHP/MySQL - Lutter contre les robots spammeurs (Captcha)

Auteur : 3L!X | Créé le : 25/03/2007 à 16H00

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 :

  • Par Code Visuel, une image est générée dans laquelle une suite de chiffres ou de lettres apparaissent.
  • Par Texte, qui sous forme d'une question subsidiaire peut faire l'objet d'une validation.
  • Par Son, en prononçant un mot ou un nombre à retaper dans un champ de confirmation.

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.

Note : Cet exemple ci-dessous est utilisé sur notre site.

Algorithme en PHP

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;
}
?>
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ôle

Insérer maintenant dans vos formulaires les 3 instructions comme dans l'exemple ci-dessous (Instructions en noir).

  • require("Captcha.php"): pour appeler le fichier anti-spam captcha.
  • !valid_captcha(): pour valider le formulaire en fonction de la réponse.
  • aff_captcha(): pour générer et afficher l'interface captcha, afin de répondre à la question.

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/EditerAjout commentaire

Haut de page