Recherche rapide
     
Espace Membres
il y'a actuellement 32370 membres
 
Pseudo  
Password  
inscriptions
 
Cours php/Tutoriels
  1/  Apprendre les bases de PHP
  1a/  Divers en PHP, les erreurs, les variables etc...
  2/  Les variables
  3/  Les variables d'environnements
  4/  Les conditions
  5/  Les boucles
  6/  Les cookies
  7/  Travailler sur les dates
  8/  Les tableaux array()
  9/  Travailler avec les fichiers
  10/  Traiter les chaines de caractères
  11/  Récuperer et verifier les données d'un formulaire
  12/  Envoyer des mails
  13/  Les pseudo-frames
  14/  Débuter avec mysql
  15/  Fonctions update et delete de mysql
  16/  Comprendre et utiliser la clause where
  17/  Liste de quelques fonctions mysql
  18/  Mysql par la pratique, construire un livre d'or
  19/  Construire un mini moteur ou annuaire
  20/  Afficher sur plusieurs pages
  21/  La construction de votre forum
  22/  Faire son script de sondage (vote)
  23/  Sessions , mise en pratique
  24/  Sessions , récapitulatif
  25/  Les expressions régulières
  26/  Coder son ANTI-FLOOD
  27/  Utiliser et créer ses fonctions
  28/  Upload et transfert de fichiers
 
 
 
Liens
  Les cours pour bien débuter PHP
Anti Robotic Register Flood n°26


 
Ce cours n'a pas encore été mis à jour.

Peut-être avez vous entendu parler des forums phpBB qui avaient été la cible de robots d'enregistrement. Ce sont de petits scripts qui vont s'enregistrer sur votre site (ou votre forum) en utilisant votre formulaire d'inscription de nouveaux membres. Smartor, avait à l'époque créé un mod pour phpBB, afin de palier à cette faille de sécurité. La technique est simple, elle consiste à générer un text-graphique (sous forme d'image), que l'utilisateur qui souhaite s'enregistrer, doit re-taper dans un champ de votre formulaire. Cette procédure vous garantie que la personne qui valide votre formulaire, est bel et bien en chair et en os, et non en ligne de code ;) Alors comment allons nous procéder ?

Etape 1 : Générer aléatoirement une chaine de caractères d'une longueur définie

Etape 2 : Générer une image au format PNG à partir de cette chaine

Etape 3 : Mettre en place le système dans votre formulaire

 

/!\ Placez bien tous les fichiers suivants dans le même répertoire /!\

 
 

Etape 1 : Génération aléatoire de la chaine de caractères

 

function gen_reg_key() {

   //on initialise la variable $key à "vide"

   $key = "";

   //on définit la taille de la chaine (6 caractères ca suffit ;))

   $max_length_reg_key = 6;

   //on définit le type de caractères ascii de la chaine (l'alphabet suffit amplement, mais libre a vous)

   $chars = array(

      "a","b","c","d","e","f","g","h","i","j","k","l","m",

      "n","o","p","q","r","s","t","u","v","w","x","y","z");

   //on comptabilise le nombre total de caractères possibles (26 pour l'alphabet)

   $count = count($chars) - 1;

   //on initialise la fonction rand pour le tirage aléatoire

   srand((double)microtime()*1000000);

   //on tire aléatoirement les $max_length_reg_key caracteres de la chaine

   for($i = 0; $i < $max_length_reg_key; $i++) $key .= $chars[rand(0, $count)];

   //on renvois la clé générée

   return($key);

}

Bon étape 1 terminée, c'était pas trop compliqué ;) Passons à la suite ...

 
 
 

Etape 2 : Génération d'une image PNG



  Pour faire ce genre d'opération vous devez avant toute chose vérifier que votre hébergeur permet l'utilisation de la librairie graphique GD (utilisez phpinfo() pour en être sur). Si ce n'est pas le cas, vous pouvez oubliez ce cours ... ou prendre un autre hébergeur. Allons-y ...

 

Fichier anti-robotic.php

<?php

//En-tête définissant le format png header

("Content-type: image/png");

//Crée une nouvelle image à palette d'une taille de 200 pixels de largeur par 50 pixels de hauteur

$im = @ImageCreate (200, 50) or die ("Erreur lors de la création de l'image");

//Alloue une couleur pour le fond de l'image

$bgcolor = ImageColorAllocate ($im, 0xC0, 0xC0, 0xC0); //Ca correspond à #C0C0C0

//Alloue une couleur pour le texte de l'image

$font = ImageColorAllocate ($im, 0x00, 0x00, 0x00);

//Dessine un texte avec une police TrueType

ImageTTFText ($im, 35, 0, 10, 37, $font, "./TrueTypeFont.ttf", base64_decode($_GET['code']));

//Envoie l'image PNG vers le navigateur

ImagePng ($im);

?>

 

On pourra par la suite, appeler ce fichier en utilisant <IMG src="anti-robotic.php?code=xxxxxx">. xxxxxx correspond à notre code de tout à l'heure encodé avec la fonction base64_encode() (d'où le base64_decode($_GET['code']) du fichier anti-robotic.php). La fonction base64_encode transforme la chaîne en MIME base64. Dans notre cas, vu que la chaîne code ne dépasse pas les 6 caractères de long, nous n'avons aucunement besoin d'utiliser la fonction chunk_split() pour respecter la RFC 2045.
Remarque : Une chaîne encodée ainsi prend, grosso modo, 33% de plus que les données initiales.
 
 
 

Etape 3 : Mise en place dans le formulaire

Donc maintenant regardons notre formulaire d'inscription. Pour des raisons de facilité de traitement, je préfère utiliser le même fichier php pour le formulaire et sa validation (si c'est pas clair pour vous, vous comprendrez avec ce qui suit).

 

Fichier formulaire.php

 

<html><body>

<?php ... //Inserez ici le code de la fonction gen_reg_key() définie au dessus

//Variable indiquant l'étape

$etape = 1;

//Si le formulaire a été rempli et que le code de vérification est conforme à l'image

if(isset($_GET['login']) && (md5(strtolower($_GET['verifCode'])) == $_GET['verifCode2'])) { $etape ++;

//Passage à l'étape suivante

}

switch($etape) {

case 1 : //Premier affichage ou vérification incorrecte

$code = gen_reg_key(); //Génération de la chaine aléatoire

echo '<form method="post" action="formulaire.php">';

echo 'Login : <input type="text" name="login"><br>';

echo 'Mot de passe : <input type="text" name="password"><br>';

echo '<IMG src="anti-robotic.php?code='.base64_encode($code).'">';

echo 'Veuillez saisir les lettres que vous voyez ci-dessus, dans le champ ci-dessous';

echo '<input type="text" name="verifCode"><br>';

echo '<input type="hidden" name="verifCode2" value="'.md5(strtolower($code)).'">';

echo '<input type="submit" name="submit" value="Enregistrer">';

echo '</form>';

break;

case 2 : //Vérification correcte donc poursuite de la procedure d'enregistrement

echo 'Bravo, vous êtes bien humain et enregistré ;)';

... //Ajout a la base de donnée ou autre traitement

break;

default: }

?>

</body></html>

 

Et voilou ! Vous avez maintenant tout ce qu'il vous faut pour mettre en place cette nouvelle sécurité sur votre site personnel.

 
 

 

Bonne programmation à tous ;)

spinous

>>> Cours suivant n° 1
 

 
 
Rubrique installer
  1°/  Apache et PHP
  2°/  Mysql sur votre PC (version tar.gz)
  3°/  Mysql sur votre PC (version rpm)
 
Newsletter

 
Votez !!
Pas de votes ni suggestions actuellement
 
 
 
Débuter Linux
 1°/   Introduction
 2°/   Installation ( 1ere partie )
 3°/   Installation ( 2ème partie )
 4°/   Connexion / documentation / Synthaxe
 5°/   Les différentes commandes sous linux
 6°/   Installer / Désinstaller / Lister les applications
 7°/   Manipulation des chaines de caractères
 
    © Copyright 2005 - az-php.com - tous droits réservés , reproduction interdite . Hébergé par 1hebergeur.com [ mentions légales & copyright ]