Accueil Boite à Outils Scripts PHP Page contact en PHP 3/3

Publié le : 10 juillet 2007
Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Page contact en PHP 3/3
3. Page contact avec captcha

En raison du spam perturbant la bonne gestion d’une page contact, j’ai voulu compléter les articles précédents (Page contact classique et Page contact avec éléments supplémentaires) avec un captcha afin de bloquer les messages envoyés par des robots.

Dans un soucis d’accessibilité pour ceux qui ont une mauvaise vue, je n’ai pas voulu d’un captcha visuel ; mon choix s’est donc porté sur un script de FredoMkb [1] : CaptchaGuest version 1.1.0 script dont voici l’adaptation pour une page contact [2].

Principe [3]

Le but est d’afficher un petit captcha textuel de sécurité afin d’autoriser un visiteurs (guest) à envoyer son message tout en empêchant l’accès des robots de spam.

Une question, tirée au hasard parmis 4 listes disponibles demande à l’utilisateur de noter la bonne reponse dans un champ dédié.

Si la réponse est correcte lors de la validation, le message sera accepté et envoyé, dans le cas contraire, un avertissement s’affichera invitant l’utilisateur à corriger le résultat proposé.

Personnalisations : Vous pouvez modifier et personnaliser certaines données utilisées, comme la liste des questions posées, le nombre de tentatives autorisées ainsi que la liste des conseils prodigués aux utilisateurs étourdis...

Ces éléments sont identifiables par un commentaire contenant la mention "(à adapter selon vos besoins)", et ils sont desormais tous regroupes dans le fichier PHP nommé "CaptchaGuestValeurs.php".

Sécurité : Le résultat de la question affichée, choisie au hasard, qui permet de tester l’exactitude de la réponse fournie, est conservée dans une variable de session.

De plus, les questions affichées sont converties en codes Ascii Html, correspondant au jeux de caractères à la norme ISO 8859-1

AVERTISSEMENT : Malgré les différents mécanismes de sécurité utilisés, cette mod ne peut en aucun cas être considérée comme une méthode infaillible contre les attaques de certains robots de spams sofistiqués.

Installation

Zip - 7.1 ko
CaptchaGuest.zip



L'archive ci-jointe comprend 3 fichiers :

- contact.php qui reprend l’exemple de page contact décrite dans le premier article, avec les modifications nécessaires au fonctionnement du captcha,
- CaptchaGuest.php qui contient les principales fonctions du script,
- CaptchaGuestValeurs.php où sont les listes de questions à poser pour valider le Captcha ainsi que les différentes options de traitement.

Ces fichiers doivent être dans le même répertoire [4].

Modifications de contact.php

Voici les modifications du code de contact.php par rapport à la version sans captcha décrite dans l’article Page contact classique :

- au début de la page, on inclue le fichier CaptchaGuest.php :

<?php
include('CaptchaGuest.php');

- la fonction d’affichage du formulaire est modifiée pour permettre l’affichage des questions :

function formulaire($Nom="", $Profession="", $Email="", $Message="", $captcha) {
  global $libelle, $inputSize, $inputMax;
  $captchaQstRes = captchaQuestion();
?>

- l’affichage de la question et du champ de réponse est ajoutée au dessus du bouton d’envoi :

<td width="80%"><center>
          <fieldset style="margin: 10px 0px 0px 0px;">
                        <legend>Captcha Anti-Spam</legend>
                        <div class="infldset">
                                <p><?php echo $libelle ?></p>
                                <p><strong><?php echo $captchaQstRes ?></strong>
                                        <input name="captcha" id="captcha" type="text" size="<?php echo $inputSize ?>" maxlength="<?php echo $inputMax ?>" value="<?php if (isset($_POST['captcha'])) { echo $_POST['captcha']; } ?>" style="text-align: center;" />
                                </p>
                        </div>
                </fieldset>
         <br />
         <input type="submit" name="Submit" value="Envoi" alt="Envoi" style="background-color:#00ff00" title="Envoi de votre message" onmouseover="this.style.color='#ff0000'" onmouseout="this.style.color='#000000'" onmousedown="this.style.color='#ff9900'" />
       </center></td>

- avant d’envoyer le mail, on s’assure qu’il y a bien une réponse à la question anti-spam :

if (empty($_POST['captcha'])) {
  echo "<p class='red'>Vous n'avez pas complété le Captcha Anti-Spam&nbsp;:</p>";
  $erreur=1;
}

- si la réponse envoyée n’est pas correcte, on envoie un message d’information :

if ($_POST['captcha']) {
  $captchaRepRes = captchaReponse();
  if ($captchaRepRes[0]) {
        echo $captchaRepRes[1];
        $erreur=1;
  }
}

- s’il y a une erreur, le message n’est pas envoyé et on réaffiche le formulaire :

if ($erreur==1) {
  formulaire($Nom,$Profession,$Email,$Message,$captcha);
}

- si la réponse est correcte, on vide les variables de session et on envoie le message (la suite du script est inchangée) :

else {
  eraseVars();
  mail($destinataire,$titre,$message,"From: $vEmail");

 


 

 

[1] Ce script est une adaptation d’une contribution de Vincent Garnier sur les forums de PunBbFr.

[2] Je n’ai pas conservé la possibilité d’enregistrer les tentatives de post du script initial.

[3] Je reprends ici les explications de FredoMkb.

[4] A moins de modifier le code du script pour indiquer le chemin au moment de l’inclusion des fichiers.




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article


Réactions à l'article :