begin process at 2012 02 13 07:26:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > IMAGE CRYPTÉE DE PROTECTION POUR FORMULAIRE WEB

IMAGE CRYPTÉE DE PROTECTION POUR FORMULAIRE WEB


 Information sur la source

Note :
5,75 / 10 - par 8 personnes
5,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaires Niveau :Débutant Date de création :22/06/2003 Date de mise à jour :23/06/2003 23:06:51 Vu / téléchargé :17 548 / 1 694

Auteur : matrey

Ecrire un message privé
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Permet d'éviter les requêtes automatisées, qui aboutissent à un ralentissement du serveur et à l'engorgement de la base de données

Source

  • MAJ 23/06/03
  • Suite à une remarque de Nova, voila le code source des fichiers ainsi que la méthode pour intégrer çà dans un formulaire existant. En téléhcargeant le zip, vous avez l'avantage d'avoir un exemple tout pret :D mais peut être plus difficile à réutiliser pour les débutants
  • Fichier crypt.php
  • ------------------------
  • <?
  • // -------------------------------------------------------
  • // Image cryptée de protection pour formulaire web
  • // -------------------------------------------------------
  • // Permet d'éviter les requêtes automatisées, qui
  • // aboutissent à un ralentissement du serveur et à
  • // l'engorgement de la base de données
  • // -------------------------------------------------------
  • // © 2003 - Mathieu Rey <matreypub@hotmail.com>
  • // -------------------------------------------------------
  • require("./functions.php");
  • // Si le numéro de session est indiqué
  • if ($session!=""){
  • // Connexion BDD
  • $db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
  • mysql_select_db($base_mysql,$db);
  • // Lancement de la requete
  • $query = mysql_query("SELECT * FROM $table_mysql WHERE session = '$session'");
  • $row = mysql_fetch_row($query);
  • // Si la session est effectivement valable
  • if ($row[2]!=""){
  • // Créer l'image avec le code
  • CreateImage($row[2]);
  • }
  • }
  • ?>
  • Fichier functions.php
  • ------------------------------
  • <?
  • // -------------------------------------------------------
  • // Image cryptée de protection pour formulaire web
  • // -------------------------------------------------------
  • // Permet d'éviter les requêtes automatisées, qui
  • // aboutissent à un ralentissement du serveur et à
  • // l'engorgement de la base de données
  • // -------------------------------------------------------
  • // © 2003 - Mathieu Rey <matreypub@hotmail.com>
  • // -------------------------------------------------------
  • # -------------INFOS DE CONNEXION A MYSQL------------- #
  • $serveur_mysql = "localhost";
  • $login_mysql = "root";
  • $pass_mysql = "";
  • $base_mysql = "test";
  • $table_mysql = "codes";
  • # ---------------------------------------------------- #
  • # ---------------DUMP DE LA TABLE MYSQL--------------- #
  • /*
  • CREATE TABLE codes (
  • id tinyint(4) NOT NULL auto_increment,
  • session text NOT NULL,
  • code text NOT NULL,
  • now text NOT NULL,
  • PRIMARY KEY (id,id)
  • ) TYPE=MyISAM;
  • */
  • # ---------------------------------------------------- #
  • # Crée un code suivant le sid #
  • function CreateSession($session){
  • // Création d'un code à 6 chiffres
  • $code = substr(md5(time().time()), 0, 6);
  • // Création d'un identifiant de temps
  • $now = time();
  • // Enregistrement dans la base de données
  • $db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
  • mysql_select_db($base_mysql,$db);
  • $query = mysql_query("INSERT INTO $table_mysql VALUES('','$session','$code','$now')");
  • }
  • # Génère un image contenant le code #
  • function CreateImage($code){
  • // Définition des dimensions
  • $img = imagecreate(72, 25);
  • // Défintion des couleurs
  • $bgc = imagecolorallocate($img, 255, 255, 255);
  • $black = imagecolorallocate($img, 0, 0, 0);
  • $gris = imagecolorallocate($img, 128, 128, 128);
  • // Remplissage du fond
  • imagefilledrectangle($img, 0, 0, 72, 25, $bgc);
  • // Ecriture du code (le premier 5 est la taille - de la police par défaut - la plus grande dans GD)
  • // Ca évite d'avoir à installer FreeType, librairie qui ajoute le support des polices TrueType
  • imagestring($img, 5, 12, 5, $code, $black);
  • // Ajout d'un bruit
  • for($i=0;$i<150;$i++) {
  • imagesetpixel($img, rand(0,72), rand(0,25), $gris);
  • }
  • // Crétion de l'entête
  • header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  • header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  • header("Cache-Control: no-store, no-cache, must-revalidate");
  • header("Cache-Control: post-check=0, pre-check=0", false);
  • header("Pragma: no-cache");
  • // Création de l'image (qualité 15% : très médiocre)
  • imagejpeg($img, '', 15);
  • imagedestroy($img);
  • }
  • ?>
  • A faire maintenant :
  • 1. Configurez le fichier "functions.php"
  • 2. Executez le dump dans MySQL
  • Puis...
  • A ajouter dans votre formulaire, au niveau de l'affichage des champs
  • --------------------------------------------------------------------------------------------------
  • require("./functions.php");
  • // Affichage code + formulaire
  • $session = md5(time());
  • $numero = CreateSession($session);
  • ?>
  • <table border="0" cellspacing=0 cellpadding=3 bgcolor="#FDF1D5">
  • <tr>
  • <td colspan="2" bgcolor="#87D118"><font size="2"
  • face="Verdana"><strong>Vérification d'authenticité</strong></font></td>
  • </tr>
  • <tr>
  • <td width="60%"><font size="2" face="Verdana">Pour
  • garantir la sécurité de notre base de données, nous
  • vous demandons de bien vouloir recopier le code (à
  • droite) dans la zone de texte.<br>
  • Ce code est une image qui ne peut être lue par une
  • machine. Cela permet d'éviter que des programmes
  • automatiques ne submergent le serveur par leurs requêtes.</font></td>
  • <td width="40%"><p align="center">
  • <input type=hidden name=sid value=<? echo $session; ?>><font size="2"
  • face="Verdana">Votre code est :<br>
  • <img src=crypt.php?session=<? echo $session; ?>></font></p>
  • <p align="center"><font size="2" face="Verdana">Tapez
  • votre code ici :<br>
  • <input type=text name=code>
  • </font></p>
  • </td>
  • </tr>
  • </table>
  • A ajouter dans votre formulaire, au niveau du traitement des données reçues
  • --------------------------------------------------------------------------------------------------------------
  • require("./functions.php");
  • // Validation du code
  • if ($sid=="" OR $code == ""){
  • // Manque des éléments
  • echo "<script language='JavaScript'>window.alert('Vous n\'avez pas rempli tous les champs !');history.go(-1);</script>";
  • exit();
  • }
  • // Connexion BDD
  • $db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
  • mysql_select_db($base_mysql,$db);
  • // Lancement requete
  • $query = mysql_query("SELECT * FROM $table_mysql WHERE session = '$sid'");
  • $row = mysql_fetch_row($query);
  • if ($row[2]=="" or $row[2]!=$code){
  • // Code non valide
  • echo "<script language='JavaScript'>window.alert('Code incorrect !');history.go(-1);</script>";
  • exit();
  • }else{
  • // Code valide
  • // -----------
  • // Bien sur, si le code est correct, remplacez le message d'information par
  • // la suite du traitement du formulaire.
  • echo "<script language='JavaScript'>window.alert('Code correct !');</script>";
  • }
  • A ajouter dans votre formulaire, au niveau du traitement des infos recues, après avoir effectué toutes les vérifications
  • -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • // Suppression
  • // -----------
  • // /!\ Ne supprimez l'enregistrement de la base de données que lorsque aucun erreur
  • // ne peut plus avoir lieu (car si une info manque et que le code a déjà été supprimé
  • // de la base, la revalidation du formulaire échouera)
  • $query = mysql_query("DELETE FROM $table_mysql WHERE session = '$sid'");
  • Voila !
  • Si vous avez un quelconque problème avec ce script, n'hésitez pas à le dire !
 MAJ 23/06/03
Suite à une remarque de Nova, voila le code source des fichiers ainsi que la méthode pour intégrer çà dans un formulaire existant. En téléhcargeant le zip, vous avez l'avantage d'avoir un exemple tout pret :D mais peut être plus difficile à réutiliser pour les débutants

Fichier crypt.php
------------------------

<?
// -------------------------------------------------------
// Image cryptée de protection pour formulaire web
// -------------------------------------------------------
// Permet d'éviter les requêtes automatisées, qui
// aboutissent à un ralentissement du serveur et à
// l'engorgement de la base de données
// -------------------------------------------------------
// © 2003 - Mathieu Rey <matreypub@hotmail.com>
// -------------------------------------------------------

require("./functions.php");

// Si le numéro de session est indiqué
if ($session!=""){
 // Connexion BDD
 $db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
 mysql_select_db($base_mysql,$db);
 // Lancement de la requete
 $query = mysql_query("SELECT * FROM $table_mysql WHERE session = '$session'");
 $row = mysql_fetch_row($query);
 // Si la session est effectivement valable
 if ($row[2]!=""){
  // Créer l'image avec le code
  CreateImage($row[2]);
 }
}
?>


Fichier functions.php
------------------------------

<?
// -------------------------------------------------------
// Image cryptée de protection pour formulaire web
// -------------------------------------------------------
// Permet d'éviter les requêtes automatisées, qui
// aboutissent à un ralentissement du serveur et à
// l'engorgement de la base de données
// -------------------------------------------------------
// © 2003 - Mathieu Rey <matreypub@hotmail.com>
// -------------------------------------------------------

# -------------INFOS DE CONNEXION A MYSQL------------- #
$serveur_mysql = "localhost";
$login_mysql = "root";
$pass_mysql = "";
$base_mysql = "test";
$table_mysql = "codes";
# ---------------------------------------------------- #

# ---------------DUMP DE LA TABLE MYSQL--------------- #
/*
CREATE TABLE codes (
  id tinyint(4) NOT NULL auto_increment,
  session text NOT NULL,
  code text NOT NULL,
  now text NOT NULL,
  PRIMARY KEY  (id,id)
) TYPE=MyISAM;
*/
# ---------------------------------------------------- #

# Crée un code suivant le sid #
function CreateSession($session){
 // Création d'un code à 6 chiffres
 $code = substr(md5(time().time()), 0, 6);
 // Création d'un identifiant de temps
 $now = time();
 // Enregistrement dans la base de données
 $db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
 mysql_select_db($base_mysql,$db);
 $query = mysql_query("INSERT INTO $table_mysql VALUES('','$session','$code','$now')");
}

# Génère un image contenant le code #
function CreateImage($code){
 // Définition des dimensions
 $img = imagecreate(72, 25);
 // Défintion des couleurs
 $bgc = imagecolorallocate($img, 255, 255, 255);
 $black = imagecolorallocate($img, 0, 0, 0);
 $gris = imagecolorallocate($img, 128, 128, 128);
 // Remplissage du fond
 imagefilledrectangle($img, 0, 0, 72, 25, $bgc);
 // Ecriture du code (le premier 5 est la taille - de la police par défaut - la plus grande dans GD)
 // Ca évite d'avoir à installer FreeType, librairie qui ajoute le support des polices TrueType
 imagestring($img, 5, 12, 5, $code, $black);
 // Ajout d'un bruit
 for($i=0;$i<150;$i++) {
  imagesetpixel($img, rand(0,72), rand(0,25), $gris);
 }
 // Crétion de l'entête
 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
 header("Cache-Control: no-store, no-cache, must-revalidate"); 
 header("Cache-Control: post-check=0, pre-check=0", false);
 header("Pragma: no-cache");
 // Création de l'image (qualité 15% : très médiocre)
 imagejpeg($img, '', 15);
 imagedestroy($img);
}
?>

A faire maintenant :
 1. Configurez le fichier "functions.php"
 2. Executez le dump dans MySQL
Puis...

A ajouter dans votre formulaire, au niveau de l'affichage des champs
--------------------------------------------------------------------------------------------------

require("./functions.php");

// Affichage code + formulaire
$session = md5(time());
$numero = CreateSession($session);
?>
<table border="0" cellspacing=0 cellpadding=3 bgcolor="#FDF1D5">
<tr>
<td colspan="2" bgcolor="#87D118"><font size="2"
face="Verdana"><strong>Vérification d'authenticité</strong></font></td>
</tr>
<tr>
<td width="60%"><font size="2" face="Verdana">Pour
garantir la sécurité de notre base de données, nous
vous demandons de bien vouloir recopier le code (à
droite) dans la zone de texte.<br>
Ce code est une image qui ne peut être lue par une
machine. Cela permet d'éviter que des programmes
automatiques ne submergent le serveur par leurs requêtes.</font></td>
<td width="40%"><p align="center">
<input type=hidden name=sid value=<? echo $session; ?>><font size="2"
face="Verdana">Votre code est :<br>
<img src=crypt.php?session=<? echo $session; ?>></font></p>
<p align="center"><font size="2" face="Verdana">Tapez
votre code ici :<br>
<input type=text name=code>
</font></p>
</td>
</tr>
</table>


A ajouter dans votre formulaire, au niveau du traitement des données reçues
--------------------------------------------------------------------------------------------------------------

require("./functions.php");

// Validation du code
if ($sid=="" OR $code == ""){
 // Manque des éléments
 echo "<script language='JavaScript'>window.alert('Vous n\'avez pas rempli tous les champs !');history.go(-1);</script>";
 exit();
}
// Connexion BDD
$db = mysql_connect($serveur_mysql, $login_mysql, $pass_mysql);
mysql_select_db($base_mysql,$db);
// Lancement requete
$query = mysql_query("SELECT * FROM $table_mysql WHERE session = '$sid'");
$row = mysql_fetch_row($query);
if ($row[2]=="" or $row[2]!=$code){
 // Code non valide
 echo "<script language='JavaScript'>window.alert('Code incorrect !');history.go(-1);</script>";
 exit();
}else{
 // Code valide
 // -----------
 // Bien sur, si le code est correct, remplacez le message d'information par 
 // la suite du traitement du formulaire. 
 echo "<script language='JavaScript'>window.alert('Code correct !');</script>";
}


A ajouter dans votre formulaire, au niveau du traitement des infos recues, après avoir effectué toutes les vérifications
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Suppression
// -----------
// /!\ Ne supprimez l'enregistrement de la base de données que lorsque aucun erreur 
// ne peut plus avoir lieu (car si une info manque et que le code a déjà été supprimé 
// de la base, la revalidation du formulaire échouera)
$query = mysql_query("DELETE FROM $table_mysql WHERE session = '$sid'");

Voila !
Si vous avez un quelconque problème avec ce script, n'hésitez pas à le dire !


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

FLUX D'ENTRÉE ET DE SORTIE
TOUTES LES FONCTIONS DE PHP DÉTAILLÉES !
Source avec Zip Source avec une capture CRÉATION DYNAMIQUE DE BANNIÈRES
JOUR D'UNE DATE

 Sources de la même categorie

Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
Source avec Zip Source avec une capture CALENDRIER RÉSERVATION POUR CHAMBRES D'HÔTES EN PHP MYSQL par oallais
Source avec Zip Source avec une capture UPLOADEUR DE FICHIERS MULTIPLES V1 par cod57
FORM, ORM POUR FORMULAIRE par choy
Source avec Zip Source avec une capture LOGIN SHA1 + CRÉATION UTILISATEUR par aventurier19

Commentaires et avis

Commentaire de nova le 23/06/2003 12:13:11

salut

tres bien ce code, mais comme je debute, je souhaite l'intégrer à un formulaire déjà existant dans lequel je demande le nom, prenom et l'email  avec stockage de ces infos dans une bdd...

comment dois-je faire? et puis-je rassembler la table de ton script dans la mienne existante?

@++
Nova

Commentaire de Granola le 24/06/2003 09:24:30

Super ce script :)
Merci à toi j'en cherchais justement un :)

Commentaire de bricethenetman le 24/07/2003 18:38:42

Ce script a l'air super mais g juste une question. Est ce ke ya besoin de d'installer une librairie particuliere.

Commentaire de bricethenetman le 24/07/2003 18:41:54

Ce script a l'air super mais g juste une question. Est ce ke ya besoin de d'installer une librairie particuliere.

Commentaire de matrey le 25/07/2003 17:14:06

Alors, niveau librairies, il en faut une : GD.
Comme on génère du JPG "bas de gamme" (très compressé, n'importe quelle antique version de GD peut être utilisée. Depuis PHP 4....(chais plus la version :$), cette librairie est incluse dans PHP, sinon elle a été largement distribuée dans les packages faciles genre EasyPHP. Bref, tous les hébergeurs la proposent !
Pour le texte, je me sert seulement d'une police système, ce qui évite d'installer FreeType (d'un autre côté, si vous avez FreeType, çà permet d'utiliser n'importe quelle police True Type) !

Commentaire de bricethenetman le 25/07/2003 17:27:44

Ok merci matrey. Dsl pour mon double poste c'est pas volontaire bon ben j'installe ce script sur mon site mais en attendant je te mes un 10/10.

Commentaire de matrey le 26/07/2003 21:57:08

merci !
n'hésite pas a me communiquer une URL où je pourrai voir ton job !

Commentaire de Anthomicro le 01/04/2004 20:29:42

Vive les variables globales !
Et l'indentation du code, c'est plus clair...

(désolé je mets un commentaire vite fait : je fais comme toi quand tu commentes les sources des autres, que de la critique, Cf. autre post sur l'image cryptée)

Commentaire de larr le 10/06/2004 05:23:25

Moi j'ai un bleme  l'image veus pas ce creer pourtant j'ai bien la gd 2
peus etre ça viendrais des chmod ou un truc con jsuis sur
enfin si y'a moyen d'avoir quelque aide dessus c bon a prendre :p

Commentaire de UniCyclon le 21/06/2004 09:26:41

juste une remarque : pour faire des systèmes de protection par des images, comme celui présenté, il est en général d'utiliser des libraries complémentaires comme Image Magick, ou encore, et mieux, les CGI. Ces derniers permettent en effet des effets de distorsions, etc... que ne permettent pas GD

Voir à ce sujet le Gimpy-r du projet Captcha (http://www.captcha.net)

Commentaire de Kevin007 le 24/06/2004 19:49:53

Salut,
Je t'ai ajouté a ma liste de contacts MSN :
Ce code ne devrait pas exister !
Tu as oublié les variables globales !
Les choses valides en html (-&gt; ou Xhtml) tu connais pas !
Enfin bon ce code est "à mettre à la poubelle" !
J'ai passé une nuit pour remettre ce "code" d'aplomb !
A+

Commentaire de bayosky le 19/08/2005 15:43:30

Salut,

Je débute en php et ce script, même s'il n'est pas parfait, a le grand mérite d'être assez clairement documenté et de fonctionner. De plus on n'y trouve aucune trace suspecte de pompage dans une autre source ....

Je met donc 10, par principe.

A+
bien amicalement,

Bayosky.

P.S. pour Kevin007 : Euh, si vous êtes si fortiche, pourquoi ne proposez- vous pas vos propres codes... La base de données de code_source ne contient rien de vous me semble-t-il... aucun script, pas de site, ...

Commentaire de Anthomicro le 19/08/2005 15:53:51

Il a pourtant raison, ce code ne fonctionne pas avec les versions de php bien configurées...

Commentaire de matrey le 19/08/2005 16:03:38

J'ai posté cette source en juin 2003, et les variables globales n'étaient alors qu'une "nouveauté". Depuis j'ai eu la flemme de mettre à jour la source... dsl...

Commentaire de Kevin007 le 19/08/2005 19:09:44

Salut,

Pour répondre à la vérité énoncée par BAYOSKY :

Il est vrai que je me suis "un peu" emballé dans mon commentaire : je le regrette :D

Quant à mon nombre de sources : mon but profond est l'originalité... je ne poste donc pas les choses vues et revues... mais je vais bientôt poster un code qui permettra de compresser/décompresser des archives ZIP/BZIP/GZIP/TAR...

Quant à vous : la "seule" source que vous ayez postée attend toujours sa mise à jour "compatibilité" Firefox... lol

-> http://www.javascriptfr.com/code.aspx?ID=20870

Sans rancune ;)

A+

Commentaire de pythonsbz le 13/11/2006 15:30:14

en effet c tres bon comme code mais moi comme etant debutant, j'ai du mal a visualiser limage aliatoire.

Commentaire de tartane le 03/05/2007 19:14:46

Le dump de la table ne marche pas sous MySQL v5.  On crée une clé primaire dupliqué (2 fois) sur le champ id

Commentaire de coucou747 le 06/06/2007 13:08:29 administrateur CS

ce captcha est comme celui ci :
http://www.phpcs.com/codes/CAPTCHA-GENERATEUR-IMAGE-AVEC-CODE-VOULUT-SYSTEME-ANTISPAM_42855.aspx
il se casse sur le meme principe :( c'est domage, ca en fait une protexion contre les bots basics, et/ou non cibles...
si tu veux vois du cassage de captcha t'as :
http://www.phpcs.com/codes/POURQUOI-CAPTCHA-NE-SONT-ILS-PAS-TOUS-SUR_42153.aspx
http://sam.zoy.org/pwntcha/

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales