[Php] Formulaire de contact avec protection | Le Blog John's Graphisme, freelance sur Paris Ce blog est libéré des NOFOLLOW !

[Php] Formulaire de contact avec protection


// Alors, voici un petit tutoriel ressorti d’un fond de tirroir, qui explique comment réaliser et cela en php, un formulaire d’envois de mail avec une image de protection. Pour dire plus simplement, c’est un formulaire de contact. Nous allons faire cela en 3 étapes, il faudra créer dans un premier temps l’image dynamique qui permettra de mettre en place un sécurité pour les spambots. Dans un second temps le formulaire de contact en lui même, et enfin le traitement du formulaire. Se sont des étapes classiques pour la création d’un module comme celui-ci.

Création de l’image dynamique :

<?
// Démarage d'une session
session_start();
// Définition de la liste des caractères autoriés, on exclus le 0
$liste = "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// On créer la valeur du code
$code = '';
// On crée la chaine de 5 caractères
while(strlen($code) != 5) {
$code .= $liste[rand(0,63)];
}
$_SESSION['code']=$code;
// On crée une image
$larg = 50;
$haut =20;
$img = imageCreate($larg, $haut);
$rouge = imageColorAllocate($img,255,0,0);
$noir = imageColorAllocate($img,0,0,0);
$code_police=5;
header('Expires: Mon, 08 Dec 2008 12:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header("Content-type: image/jpeg");
// On intégre le code dans l'image
imageString($img, $code_police,($larg-imageFontWidth($code_police)*strlen("".$code.""))/2,0, $code,$noir);
// On créé une image de mauvaise qualité, 23% de l'image normal
imagejpeg($img,'',23);
imageDestroy($img);
?>

Enregistrez votre fichier sous dynamique.php

Création du formulaire de contact :

<form action="contact.php" method="post" name="contact" id="contact">
<p>
<label for="mail">Votre adresse mail :</label><br />
<input type="text" id="mail" name="mail" size="20" maxlength="100"/><br />
<label for="objet">Objet du mail :</label><br />
<input name="objet" type="text" size="20" maxlength="100" /><br />
<label for="msg">Texte du mail :</label><br />
<textarea name="msg" cols="40" rows="4"></textarea><br />
<img src="dynamique.php" alt="securisation du formulaire" title="securisation du formulaire" /><br />
<label for="verif">Recopier le code ci dessus dans le champ qui suit :</label><br />
<input type="text" name="verif" size="10" maxlength="5" />
</p>
<p>
<input type="submit" value="Envoyer" />
</p>
</form>

Enregistrez votre fichier sous formulaire.php

Création du traitement :

<?
// Demarrage de session
session_start();
// Test de la variable
if(!isset($_SESSION['code']) OR strlen($_SESSION['code']) !=5) exit("Erreur !");

// Comparaison des valeurs
if($_SESSION['code'] != $_POST['verif']) exit("Erreur les valeurs sont différentes !");
// Recuperation du mail de l'envoyeur
$exp = $_POST['mail'];
// On formate les chaines
$objet = stripslashes($_POST['objet']);
$msg = stripslashes($_POST['msg']);
// Envoi du mail
$envoi=mail("contacta@site.net", $objet, $msg,"From: $exp\r\n"."Reply-To: $exp\r\n");
if($envoi) echo"Le mail a bien été envoyé !";
else echo"L'envoi a échoué, merci de renouveller l'opération !";
// On efface et détruit les varaibles de sessions
session_unset();
session_destroy();
?>

Enregistrez ce fichier sous contact.php

Voila, le tour est joué, il ne reste plus qua le tester.






















3 commentaires

  1. 1 CharlesNo Gravatar _(1 commentaires) dit :

    Le reverse de cette fonction d’embrouillage est assez simple, en fait, il suffit d’appliquer un contraste élevé, et d’utiliser soit la FFT (Fast Fourrier Transform) pour reperer les hautes fréquences, et ainsi récuperer les contour et utiliser les algo open source de scan OCR pour récuperer le texte, soit utiliser les transformées de Laplace, qui sont bien moins couteuses en terme de complexité (et donc en temps)

    Le principe d’un tel embrouillage est trés proche de celui des fonctions de hachages, qui doivent rendre impossible le retour à l’original d’un texte embrouillé, informatiquement parlant. Mathématiquement, on parle d’une fonction surjective mais pas injective. De plus, on passe d’un espace à n couleurs à un espace d’arrivée à m couleur ou n > m, on perd ainsi en qualité, ce qui est un peu le but. Donc, appliquons les lemmes des fonctions de hachage dans la vérification (et preuve) de sécurité, en gardant à l’esprit, cependant, que l’oeil humain doit pouvoir reverser cette fonction.

    Probleme complexe, mais si on y réfléchit bien, l’outil principal d’un reverser, c’est les fréquences, donc les variations de couleur, rapides. Il faut donc incruster un pattern en arriere plan, assez aléatoire pour ne pas pouvoir etre simplement « retranché » par la suite, qui ne perturbe pas l’oeil humain. L’ordinateur traite en 2D, nous, nous passons l’image en 3D, faisant intervenir des plans.

    La meilleure solution, maintenant, est de se referer au trés lourd projet qu’est reCaptcha (http://recaptcha.net/) qui implémente la recherche dans ce domaine.

    Cependant, la preuve de sécurité ne peut etre démontrée, car l’authentification d’un utilisateur répondant au CAPTCHA n’est pas vérifiée… (et ne peut, pour ainsi dire, PAS l’être)

  2. 2 John's GraphismeNo Gravatar _(188 commentaires) dit :

    // Coucou Mister Charles,

    ton commentaire me fait plaisir, j’ai essayé de tout comprendre, mais je crois qu’il y a cetain passage, je suis dans le flu, sinon, pour le reCaptcha, ouais, je connaissais, mais je voulais faire un ptit tutorial ou il ne fallait pas faire appel a un élément extérieur. Mais je t’avoue, je ne pensais pas que ce que je proposé pouvait être cassé aussi facilement.

  3. 3 CurLyNo Gravatar _(2 commentaires) dit :

    Excellent tutos :)
    Merci.

Aucun trackback