Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ANTI FLOOD SANS LA LIBRAIRIE GD


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : antiflood, formulaires, fichiers, codes Niveau : Initié Date de création : 17/08/2005 Date de mise à jour : 19/08/2005 18:47:29 Vu / téléchargé: 4 074 / 268

Note :
7,33 / 10 - par 3 personnes
7,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (31)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Une petite class pour remplacer la librairie GD pour ce qui est de l'anti-flood. Lorsque cette librairie est désactivée (souvent chez les hébergeurs gratuits), on ne peut pas créer des images aléatoires. Cette class le fait et y a avec une autre pour vérifier ce qui est saisi.
L'idée c'est de générer un code (qu'il faut saisir) dont chaque caractère est représenté par une image contenant le même caractère (dans mon exemple c'est des chiffres) mais avec un nom ("xxxxx.jpg") différent à chaque fois, par exemple l'image qui contient le chiffre "6" peut avoir comme nom "xgrt.jpg" ou bien "jhfg.jpg"... Le nombre de carctères pour ça est contrôlable aussi.
A vous de tester et dites ce que vous en pensez ou comment l'améliorer.
 

Source

  • <?php
  • ////////////////////////////////////////////////////////////////////////////////\
  • // //
  • // Nom du code : Anti_Flood_Sans_GD (Class php) //
  • // Version : 1.0 //
  • // Date de création: 17 / 08 / 2005 //
  • // Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
  • // E-mail : FBNKCMaster@hotmail.com //
  • // //
  • // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // Remerciements à : //
  • // -> GRenard pour ses remarques, ses règles //
  • // de la bonnes programmation //
  • // -> Arnotic pour l'idée de son code de génération //
  • // de mots de passe sur cette adresse: //
  • // (http://www.phpcs.com/code.aspx?ID=12787) //
  • // -> Tous ceux qui peuvent apporter des critiques //
  • // constructives à cette source //
  • // //
  • // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // Remarque : //
  • // Merci de ne pas supprimer cette partie //
  • // //
  • // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // ENJOY IT!!! //
  • // //
  • /////////////////////////////////////////////////////////////////////////////////
  • ////////////////////////////////////////////////////////////////////////////////
  • ## Class anti-flood "anti_flood" ##
  • ## fichier anti_flood.class.php ##
  • class anti_flood
  • {
  • var $equiv = array(); //tableau qui contient
  • var $decryptage = array(); //tableau qui contient
  • var $nv_noms = array(); // tableau des nouveaux noms
  • var $dos_img = 'img_flood'; // dossier qui contient les images
  • var $dos_sess = 'sess_flood'; // dossier où sera créé un dossier pour chaque session
  • var $nbr_carac_code; //Nombre de carctères du code à saisir
  • var $nbr_crypt_code; // Nombre de caractères pour crypter les noms originels des images
  • var $sess; // la variable de la session
  • function anti_flood($nbr_car, $nbr_cryp) //le constructeur
  • {
  • $this->nbr_carac_code = $nbr_car;
  • $this->nbr_crypt_code = $nbr_cryp;
  • $this->sess = session_id(); // On génère un id pour la session
  • $this->suppr_dos(); //On vide le dossier des sessions "sess_flood" au cas où la vérification n'est pas faite
  • $code = $this->gen($this->nbr_carac_code,'num');
  • for($i = 0; $i < $this->nbr_carac_code; $i++) // On fait correspondre chaque caractère à une image à qui on génère un nouveau nom aléatoire à l'aide de la méthode $this->gen()
  • {
  • $this->attribuer($code{$i}, $this->gen($this->nbr_crypt_code, 'alpha'));
  • }
  • $this->sess(); // On enregistre toutes les variables (tableaux) pour les traiter lors de la vérification
  • }
  • function suppr_dos() // La méthode pour supprimer les dossiers des sessions créés et leurs fichiers
  • {
  • $dos = opendir($this->dos_sess);
  • while ($fichier = readdir($dos))
  • {
  • $l = array('.', '..');
  • if (!in_array( $fichier, $l))
  • {
  • if (is_dir($this->dos_sess.'/'.$fichier))
  • {
  • $s_dos =opendir($this->dos_sess.'/'.$fichier);
  • WHILE($f = readdir($s_dos))
  • {
  • @unlink($this->dos_sess.'/'.$fichier.'/'.$f);
  • }
  • @closedir($s_dos);
  • @rmdir($this->dos_sess.'/'.$fichier);
  • }else
  • {
  • unlink($this->dos_sess.'/'.$fichier);
  • }
  • }
  • }
  • @closedir($doss);
  • }
  • function gen($nbrcar, $car) // La méthode qui génère les codes
  • {
  • @mkdir($this->dos_sess.'/'.$this->sess, 0777);
  • $caracteres = array('num' => '0123456789', 'alpha' => 'abcdefghijklmnopqrstuvwxyz');
  • $nbr_caracteres = strlen($caracteres[$car]);
  • $code = '';
  • for($i = 0; $i < $nbrcar; $i++)
  • {
  • $code .= $caracteres[$car]{mt_rand()%$nbr_caracteres};
  • }
  • return $code;
  • }
  • function attribuer($nom_orig, $crypt) // La méthode qui attribue chaque code généré à chaque image qui sera affichée (la méthode qui crypte les noms originels des images affichés)
  • {
  • if(array_key_exists($nom_orig, $this->equiv)) // Si la clef (qui correspond au nom original de l'image) existe déjà dans notre tableau "$this->equiv"
  • {
  • // $nom_orig existe déjà, on ajoute "l'ancien" nouveau nom au tableau "$this->nv_noms"
  • $this->nv_noms[] = $this->equiv[$nom_orig];
  • }else
  • {
  • // $nom_orig n'existe pas => donc on ajoute au tableau le code généré à cette clef qui sera son index
  • $this->copier_img($nom_orig, $crypt); // On copie l'image avec son nouveau nom crypté
  • $this->equiv[$nom_orig] = $crypt;
  • }
  • $this->decryptage[] = $this->equiv[$nom_orig]; // Un autre tableau "indispensable!" qui contient les codes de toutes les cles (noms des images) à affiché
  • }
  • function copier_img($nom_orig, $nv_nom) // La méthode qui copie l'image à afficher avec le nouveau nom crypté vers le dossier de la session
  • {
  • if(copy($this->dos_img.'/'.$nom_orig.'.jpg', $this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg'))
  • {
  • // L'image est copiée avec succès donc on ajoute son nouveau nom au tableau "$this->nv_noms"
  • $this->nv_noms[] = $nv_nom;
  • }else
  • {
  • // Sinon on affiche une image nom trouvée
  • echo '<img src="x.jpg" alt="" />';
  • }
  • }
  • function afficher() // La méthode qui affiche les images avec leurs nouveaux noms et emplacement
  • {
  • foreach($this->nv_noms as $nv_nom)
  • {
  • echo '<img src="'.$this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg" alt="" />';
  • }
  • }
  • function sess() // La méthode qui enregistre le nom de la session et les tableaux qu'on va traiter dans la class verif_flood.class.php et on les passe par une variable session
  • {
  • $tableau[] = $this->equiv;
  • $tableau[] = $this->decryptage;
  • $_SESSION[$this->sess] = $tableau;
  • }
  • }
  • ?>
  • ###################################################
  • <?php
  • ////////////////////////////////////////////////////////////////////////////////\
  • // //
  • // Nom du code : Anti_Flood_Sans_GD (Class php) //
  • // Version : 1.0 //
  • // Date de création: 17 / 08 / 2005 //
  • // Auteur : FBNKCMaster <-|| Farid BEN KACEM ||-> //
  • // E-mail : FBNKCMaster@hotmail.com //
  • // //
  • // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // Remerciements à : //
  • // -> GRenard pour ses remarques, ses règles //
  • // de la bonnes programmation //
  • // -> Arnotic pour l'idée de son code de génération //
  • // de mots de passe sur cette adresse: //
  • // (http://www.phpcs.com/code.aspx?ID=12787) //
  • // -> Tous ceux qui peuvent apporter des critiques //
  • // constructives à cette source //
  • // //
  • // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // Remarque : //
  • // Merci de ne pas supprimer cette partie //
  • // //
  • // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| //
  • // //
  • // ENJOY IT!!! //
  • // //
  • /////////////////////////////////////////////////////////////////////////////////
  • ////////////////////////////////////////////////////////////////////////////////
  • ## Class de verification "verif_flood" ##
  • ## fichier verif_flood.class.php ##
  • require_once('anti_flood.class.php');
  • class verif_flood extends anti_flood // On herite de la class mère "anti_flood"
  • {
  • var $code_saisi;
  • function verif_flood($code) // Le constructeur8
  • {
  • $this->code_saisi = $code;
  • $this->sess = session_id(); // On cherche l'id de la session
  • $tableaux = $_SESSION[$this->sess]; // On extrait les tableaux => un tableau multi-dimensionnel
  • foreach($tableaux as $v) // On reconstruit les sous-tableaux
  • {
  • $st[] = $v; // "st" = sous-tableau
  • }
  • $this->equiv = $st[0]; // Là juste pour attribuer le nom à chaque sous tableau pour pas se perdre après...
  • $this->decryptage = $st[1];
  • $this->suppr_dos(); // On vide le dossier des sessions "sess_flood"
  • //return $this->verifier(); // On vérifie
  • }
  • function verifier() // La méthode qui decrypte et verifie le code entré
  • {
  • $nbr_carac_code = strlen($this->code_saisi);
  • //Et là on crypte le code entré: chaque caractère entré correspond à un code qu'on va récupérer dans le tableau d'equivalence "$this->equiv" ayant comme clefs les noms originaux des images
  • $crypt = '';
  • for($i = 0; $i < $nbr_carac_code; $i++)
  • {
  • if(isset($this->equiv[$this->code_saisi{$i}]))
  • $crypt .= $this->equiv[$this->code_saisi{$i}];
  • }
  • // On obtient le code crypté qu'on va comparer avec la suite des codes générés pour chaque images... C'est un peu difficil à comprendre du premier coup mais il faut juste méditer c'est simple l'idée!
  • //Ici on decrypte..non on fait juste sortir et coller les codes générés, de chaque image, du tableau dont j'ai dit "indispensable!"... maintenant je crois que vous compreniez pourquoi ;)
  • $decrypt = '';
  • foreach($this->decryptage as $v)
  • {
  • $decrypt .= $v;
  • }
  • // On obtient la suite des codes les uns après les autres générés
  • // On compare les deux codes obtenus
  • if($crypt === $decrypt)
  • {
  • // C'est le bon code
  • return true;
  • }else
  • {
  • // C'est pas le bon code
  • return false;
  • }
  • }
  • }
  • ?>
<?php
 ////////////////////////////////////////////////////////////////////////////////\
//										//
//	Nom du code		: Anti_Flood_Sans_GD (Class php)		//
//	Version    		: 1.0						//
//	Date de création: 17 / 08 / 2005					//
//	Auteur   	 	: FBNKCMaster <-|| Farid  BEN KACEM ||->	//
//	E-mail 			: FBNKCMaster@hotmail.com			//
//										//
//	|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  	//
//										//
//	Remerciements à	:							//
//			-> 	GRenard pour ses remarques, ses règles		//
//			de la bonnes programmation				//
//			-> 	Arnotic pour l'idée de son code de génération	//
//			de mots	de passe sur cette adresse:			//
//			(http://www.phpcs.com/code.aspx?ID=12787)		//
//			-> 	Tous ceux qui peuvent apporter des critiques	//
//				constructives à cette source			//
//										//
//	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  //
//										//
//	Remarque		:						//
//			Merci de ne pas supprimer cette partie	 		//
//										//
//	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||	//
//										//
//					    ENJOY IT!!!	 			//
//										//
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
## Class anti-flood "anti_flood" ##
## fichier anti_flood.class.php  ##

class anti_flood
{
	var $equiv = array(); //tableau qui contient
	var $decryptage = array(); //tableau qui contient
	var $nv_noms = array(); // tableau des nouveaux noms
	var $dos_img = 'img_flood'; // dossier qui contient les images
	var $dos_sess = 'sess_flood'; // dossier où sera créé un dossier pour chaque session
	var $nbr_carac_code; //Nombre de carctères du code à saisir
	var $nbr_crypt_code; // Nombre de caractères pour crypter les noms originels des images
	var $sess; // la variable de la session
	
	function anti_flood($nbr_car, $nbr_cryp) //le constructeur
	{
		$this->nbr_carac_code = $nbr_car;
		$this->nbr_crypt_code = $nbr_cryp;
		
		$this->sess = session_id(); // On génère un id pour la session
		$this->suppr_dos(); //On vide le dossier des sessions "sess_flood" au cas où la vérification n'est pas faite

		$code = $this->gen($this->nbr_carac_code,'num');
		for($i = 0; $i < $this->nbr_carac_code; $i++) // On fait correspondre chaque caractère à une image à qui on génère un nouveau nom aléatoire à l'aide de la méthode $this->gen()
		{
			$this->attribuer($code{$i}, $this->gen($this->nbr_crypt_code, 'alpha'));
		}
		$this->sess(); // On enregistre toutes les variables (tableaux) pour les traiter lors de la vérification
	}

	
	function suppr_dos() // La méthode pour supprimer les dossiers des sessions créés et leurs fichiers
	{ 
		$dos = opendir($this->dos_sess); 
		while ($fichier = readdir($dos))
		{ 
			$l = array('.', '..'); 
			if (!in_array( $fichier, $l))
			{ 
				if (is_dir($this->dos_sess.'/'.$fichier))
				{
					$s_dos =opendir($this->dos_sess.'/'.$fichier); 
					WHILE($f = readdir($s_dos))
					{
						@unlink($this->dos_sess.'/'.$fichier.'/'.$f); 
					}
					@closedir($s_dos); 
					@rmdir($this->dos_sess.'/'.$fichier);
				}else
				{ 
					unlink($this->dos_sess.'/'.$fichier); 
				} 
			} 
		} 
		@closedir($doss); 
	}
	
	function gen($nbrcar, $car) // La méthode qui génère les codes
	{
		@mkdir($this->dos_sess.'/'.$this->sess, 0777);
		$caracteres = array('num' => '0123456789', 'alpha' => 'abcdefghijklmnopqrstuvwxyz'); 
		$nbr_caracteres = strlen($caracteres[$car]);
		$code = '';
		for($i = 0; $i < $nbrcar; $i++)
		{ 
			$code .= $caracteres[$car]{mt_rand()%$nbr_caracteres}; 
		}
		return $code;
	}
	
	function attribuer($nom_orig, $crypt) // La méthode qui attribue chaque code généré à chaque image qui sera affichée (la méthode qui crypte les noms originels des images affichés)
	{
		if(array_key_exists($nom_orig, $this->equiv)) // Si la clef (qui correspond au nom original de l'image) existe déjà dans notre tableau "$this->equiv"
		{
			// $nom_orig existe déjà, on ajoute "l'ancien" nouveau nom au tableau "$this->nv_noms"
			$this->nv_noms[] = $this->equiv[$nom_orig];
		}else
		{
			// $nom_orig  n'existe pas => donc on ajoute au tableau le code généré à cette clef qui sera son index
			$this->copier_img($nom_orig, $crypt); // On copie l'image avec son nouveau nom crypté
			$this->equiv[$nom_orig] = $crypt;
		}
		$this->decryptage[] = $this->equiv[$nom_orig]; // Un autre tableau "indispensable!" qui contient les codes de toutes les cles (noms des images) à affiché 
	}
	
	function copier_img($nom_orig, $nv_nom) // La méthode qui copie l'image à afficher avec le nouveau nom crypté vers le dossier de la session
	{
		if(copy($this->dos_img.'/'.$nom_orig.'.jpg', $this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg'))
		{
			// L'image est copiée avec succès donc on ajoute son nouveau nom au tableau "$this->nv_noms"
			$this->nv_noms[] = $nv_nom;
		}else
		{
			// Sinon on affiche une image nom trouvée
			echo '<img src="x.jpg" alt="" />';
		}
	}
	
	function afficher() // La méthode qui affiche les images avec leurs nouveaux noms et emplacement
	{
		foreach($this->nv_noms as $nv_nom)
		{
			echo '<img src="'.$this->dos_sess.'/'.$this->sess.'/'.$nv_nom.'.jpg" alt="" />';
		}
	}
	
	function sess() // La méthode qui enregistre le nom de la session et les tableaux qu'on va traiter dans la class verif_flood.class.php et on les passe par une variable session
	{
		$tableau[] = $this->equiv;
		$tableau[] = $this->decryptage;
		$_SESSION[$this->sess] = $tableau;
	}
}
?>

###################################################




<?php
 ////////////////////////////////////////////////////////////////////////////////\
//										//
//	Nom du code		: Anti_Flood_Sans_GD (Class php)		//
//	Version    		: 1.0						//
//	Date de création: 17 / 08 / 2005					//
//	Auteur   	 	: FBNKCMaster <-|| Farid  BEN KACEM ||->	//
//	E-mail 			: FBNKCMaster@hotmail.com			//
//										//
//	|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  	//
//										//
//	Remerciements à	:							//
//			-> 	GRenard pour ses remarques, ses règles		//
//			de la bonnes programmation				//
//			-> 	Arnotic pour l'idée de son code de génération	//
//			de mots	de passe sur cette adresse:			//
//			(http://www.phpcs.com/code.aspx?ID=12787)		//
//			-> 	Tous ceux qui peuvent apporter des critiques	//
//				constructives à cette source			//
//										//
//	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||  //
//										//
//	Remarque		:						//
//			Merci de ne pas supprimer cette partie	 		//
//										//
//	||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||	//
//										//
//					    ENJOY IT!!!	 			//
//										//
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
## Class de verification "verif_flood" ##
##    fichier verif_flood.class.php    ##

require_once('anti_flood.class.php');
class verif_flood extends anti_flood // On herite de la class mère "anti_flood"
{
	var $code_saisi;
	
	function verif_flood($code) // Le constructeur8
	{
		$this->code_saisi = $code;
		$this->sess = session_id(); // On cherche l'id de la session
		$tableaux = $_SESSION[$this->sess]; // On extrait les tableaux => un tableau multi-dimensionnel
		foreach($tableaux as $v) // On reconstruit les sous-tableaux 
		{
			$st[] = $v; // "st" =  sous-tableau
		}
		$this->equiv = $st[0]; // Là juste pour attribuer le nom à chaque sous tableau pour pas se perdre après...
		$this->decryptage = $st[1];
		
		$this->suppr_dos(); // On vide le dossier des sessions "sess_flood"
		//return $this->verifier(); // On vérifie		
	}
	
	function verifier() // La méthode qui decrypte et verifie le code entré
	{
		$nbr_carac_code = strlen($this->code_saisi);
		//Et là on crypte le code entré: chaque caractère entré correspond à un code qu'on va récupérer dans le tableau d'equivalence "$this->equiv" ayant comme clefs les noms originaux des images
		$crypt = '';
		for($i = 0; $i < $nbr_carac_code; $i++)
		{
			if(isset($this->equiv[$this->code_saisi{$i}]))
			$crypt .= $this->equiv[$this->code_saisi{$i}];
		}
		// On obtient le code crypté qu'on va comparer avec la suite des codes générés pour chaque images... C'est un peu difficil à comprendre du premier coup mais il faut juste méditer c'est simple l'idée!
			
		//Ici on decrypte..non on fait juste sortir et coller les codes générés, de chaque image, du tableau dont j'ai dit "indispensable!"... maintenant je crois que vous compreniez pourquoi ;)
		$decrypt = '';
		foreach($this->decryptage as $v)
		{
				$decrypt .= $v;
		}
		// On obtient la suite des codes les uns après les autres générés
			
		// On compare les deux codes obtenus
		if($crypt === $decrypt)
		{
			// C'est le bon code
			return true;
		}else
		{
			// C'est pas le bon code
			return false;
		}
	}
}
?>

Conclusion

################### Exemple d'utilisation ######################

################################################################
## la page où s'affichera le code à saisir (par ex: index.php)##
<?php
session_start();
echo '<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title>ANTI-FLOOD SANS GD</title>
    </head>
    <body>
<div align="center">
';
require_once('anti_flood.class.php');
$anti_flood = new anti_flood(6, 4); // On ainstancie la class avec les deux parmèttres: "6"-> nombre de caractères à saisir "4"-> nombre de caractères pour crypter les noms originels des images
$anti_flood->afficher(); // On affiche les caractères (les images)
echo '
<br />
<form method="post" action="verif_flood.php">
<input type="text" name="flood" /><br />
<input type="submit" value="Valider" />
</form>
</div>
    </body>
</html>
';
?>

#################################################
##  fichier de verification (verif_flood.php)  ##
<?php
session_start();
echo '<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title>ANTI-FLOOD SANS GD</title>
    </head>
    <body>
<div align="center">
';
if(isset($_POST['flood']))
{
$code = $_POST['flood']; // On récupère le code saisi
require_once('verif_flood.class.php');
$verif = new verif_flood($code); // On instancie la class de verification aveccomme paramèttre le code saisi
if($verif->verifier() === true)
{
echo 'C\'est le bon code!!';
}else
{
echo 'Code invalide!!!';
}
}
echo '
</div>
    </body>
</html>
';
?>
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

19 août 2005 18:47:29 :
Voir la discussion en bas.

Commentaires et avis

signaler à un administrateur
Commentaire de malik7934 le 18/08/2005 08:17:47

Salut, dommage que ton anti flood affiche un chiffre autant facile a lire... je pense pas qu'il tienne une seconde face a un robot. En employant des caracteres aussi simple a l'affichage, autant utiliser du js pour afficher un chiffre qui ne soit pas dans le code de ta page en jouant avec fromCharCode. Ce sera plus simple a l'emploi et tout autant efficace.

signaler à un administrateur
Commentaire de f bnkcm le 18/08/2005 11:34:47

Non mais le robot ne pourra pas lire ces images car leurs noms changent à chaque fois et jamais par exemple l'image qui contient le caractère "1" se nommera "1.jpg" elle aura plutôt un nom comme "kjht.jpg" ou "qlayd.jpg".. dépendant du nombre de caractères de cryptage. Sinon tu peut changer les images et mettre d'autres à ton goût mais ça changerai rien.

signaler à un administrateur
Commentaire de malik7934 le 18/08/2005 11:36:33

Le probleme est ailleurs. le robot ne va pas lire le code, mais reconnaitre les chiffres sur l'image elle meme. C'est pour ca que la plupart des flooders evolues ont des images toutes tordues avec du bruit dessus!

signaler à un administrateur
Commentaire de f bnkcm le 18/08/2005 12:26:46

Je ne suis pas sûr de ce que tu dis là mais je vais chercher.
Mais alors si c'est ça le problème alors la solution est simple, tu change les images avec celles qui te semble illisible par le robot et voilà!

signaler à un administrateur
Commentaire de GRenard le 18/08/2005 13:53:24

Les robots ne sont pas SI intelligents encore, ils doivent être capables de détecter que c'est un code caché et ils doivent trouver la boîte texte où l'écrire... Faites dont un robot capable de faire ça, vous allez voir c'est du sport... L'image en tant que tel, tu ne sais pas si elle est en 1 morceau ou en plusieurs, c'est hard ca.

signaler à un administrateur
Commentaire de malik7934 le 18/08/2005 14:03:03

GRenard, je serais pas si categorique si j'etais toi... quel est donc l'interet pour les 'whois' par exemple d'utiliser des codes a retaper qui soient difficile a lire a ton avis? Je crois que je vais camper sur mes positions :) Si je devais developper un tel outil, je sais exactement dans quel sens je partirais: un melange de screenshot et datamining.

signaler à un administrateur
Commentaire de f bnkcm le 18/08/2005 18:12:27

Comme j'ai dit dans la présentation, cette class est juste pour remplacer la librairie GD en ce qui concerne la protection anti-flood. Donc si ce que tu dis est vrai (que les robots peuvent lirent le contenu de l'image) alors c'est le même cas avec l'image générée par la GD, donc des images tordues ici feront l'affaire aussi, j'ai déjà dit ça.
Mais je suis avec GRenard, je ne crois pas qu'ils sont si intelligents sinon il faut trouver une autre méthode que la vérification du code.

signaler à un administrateur
Commentaire de Anthomicro le 19/08/2005 00:18:15

Salut,

je trouve que c'est une très bonne idée. Le javascript c'est à bannir selon moi si on veut faire des pages accessibles. Ensuite les robots ne sont pas spécialement intelligents, il y en a bien sûr qui sont au top, mais ceux-la ne vont pas s'attaquer au site de marcel qui joue dans la marre si tu vois ce que je veux dire... Une protection comme celle-ci convient parfaitement, au pire vu que ce sont des images que tu as crées tu peux très bien infliger des rotations et effets spéciaux aux caractères, ça ne mange pas de pain et ne nuit pas aux performances.

Tu peux par contre optimiser ça vu que tu utilises tous les caractères (cf ma source et le commentaire de Coucou747) :

#         $caracteres = array('num' => '0123456789', 'alpha' => 'abcdefghijklmnopqrstuvwxyz');
#         $nbr_caracteres = strlen($caracteres[$car]);
#         $code = '';
#         for($i = 0; $i < $nbrcar; $i++)
#         {
#             $code .= $caracteres[$car]{mt_rand()%$nbr_caracteres};
#         }

=> $code=substr(md5(microtime()),0,$nbrcar);

8/10 pour ma part.

a +

signaler à un administrateur
Commentaire de f bnkcm le 19/08/2005 12:46:02

Tout à fait.

Mais pour cette ligne " $code=substr(md5(microtime()),0,$nbrcar); " c'est vrai que c'est plus propre et court, le problème c'est que les images ne sont que des chiffres et donc pour utiliser ça il faut avoir tous les caractères (chiffres et lettres) en images (0.jpg, 1.jpg....a.jpg, b.jpg, c.jpg... Il faut être bcp patient pour faire ça ;P ), tu vois ce que je veux dire..

Merci pour la note.

signaler à un administrateur
Commentaire de Anthomicro le 19/08/2005 12:57:33

ouais je vois, on en revient au même problème lorsque Coucou m'avait suggéré ça, moi je n'utilise ni le 0 ni le o pour éviter les confusions.

signaler à un administrateur
Commentaire de fjxokt le 19/08/2005 16:32:02

malik7934 a raison
ce genre de robot qui "lit" l'image est tout à fait d'actualité, et un robot un tant soit peu perfectionné pourra lire ton image sans probleme
Le seul moyen pour leur compliqué la tache est comme ça a été dit plus haut, de bruiter l'image, de la tordre, et d'y inserer des lignes qui vont perturber le bot

signaler à un administrateur
Commentaire de Anthomicro le 19/08/2005 16:44:41

Tout à fait, étant donné que ce sont des images préenregistrées, il est facile de leur ajouter quelques effets de torsion, etc...

signaler à un administrateur
Commentaire de f bnkcm le 19/08/2005 18:38:34

>> fjxokt
Si on parle de Robots Super-Intélligents, qui vont pas sûrement s'attaquer à un site hébergé là où il y a pas de GD (vous voyez de quels sites je parle là, un peu comme ce que Anthomicro a dit) alors même l'image bien tordue générée avec une GD ne resistera à ces R.S.I ...
Mais là, une idée encore qui va améliorer cette protection:
Je vais modifier les images, pas en tordant les chiffres mais plutôt en les transcrivant en lettres: c'est à dire les images contienderont "zéro" au lieu de "0", "un" au lieu de "1"...
Je vais mettre à jour la source pour mieux comprendre, vous me dites ce que vous en pensez.

signaler à un administrateur
Commentaire de Anthomicro le 19/08/2005 18:41:17

le problème de ta solution actuelle c'est que les chiffres sont des images identiques toujours placées pareil, le robot n'a plus qu'à lire les 9 chiffres, il copie les 9 images différentes dans sa mémoire, et il les recherche dans l'image, vu que la position verticale ne change jamais, c'est assez simple. Il faut juste avoir le courage de faire le robot quoi lol

signaler à un administrateur
Commentaire de fjxokt le 19/08/2005 19:04:50

non je sais que de toute manière quelqu'un qui voudra eviter tout flood optera pour une image generée avec une GD (plus sur que ta methode) mais bon, le but de ta source n'est pas de concurrence GD donc ta class reste neanmoins efficace !

signaler à un administrateur
Commentaire de f bnkcm le 19/08/2005 19:37:02

Oui voilà, je cherche pas à dire que mon code est parfait ou invulnérable, en informatique y a pas ce terme, il faut se mettre d'accord sur ça ok? (même avec la GD en utilisant vos RSI ;P )
Cette source c'est pour les petits sites ne disposant pas de la GD, mais qui pensera à attaquer comme ces pauvres avec un tel outils?? ("Celui là ne mérite pas d'être sur Terre..." lol)
Hmm.. Ok, On peut poussez un peu encore la sécurité à son maximum avec cette source, comment? Eh bien, l'utilisateur n'aura qu'à changer les images de temps en temps; parfois en chiffres, parfois en lettres, parfois tordues, parfois non... Et voilà!
Non mais y aura une autre façon mieux que ça, si y a des idées n'hésitez pas!
++

signaler à un administrateur
Commentaire de malik7934 le 20/08/2005 09:06:54

Hello,
Juste pour rajouter un commentaire, je viens de faire une petite promenade sur des sites parlant de flood et en fait, la solution la plus simple et la plus efficace est de poser une question.

Plusieurs cas de figure:
1/ tu génères un chiffre aléatoire et tu demandes d'entrer ce chiffre "+1" par exemple
2/ tu poses une question simple: quelle est la couleur du ciel -> bleu
3/ tu affiches une série d'image représentant toutes la meme chose et tu demandes qu'est-ce que c'est. Exple un chat.

J'ai lu qqpart que c'est la meilleure méthode car elle fait intervenir l'humain. Ceci dit, des spammeurs ont trouvés le moyen de parer ce problème! Ils créent des sites porno gratuits et pour y entrer, le mateur doit répondre à une question... qui est exactement celle posée sur le site utilisant ces méthodes d'anti-flood! Simple et efficace...

En d'autres termes, on est jamais à l'abri... mais c'est bien sûr vrai qu'il est inutile de protéger une grange avec un tank ou de mettre une porte blindée si la fenêtre est ouverte (ouhaou les belles phrases ;))

signaler à un administrateur
Commentaire de Anthomicro le 20/08/2005 09:37:05

"2/ tu poses une question simple: quelle est la couleur du ciel -> bleu"

Ils prennent en compte la météo ? bon ok je sors ^^

signaler à un administrateur
Commentaire de f bnkcm le 21/08/2005 12:29:38

Tout à fait  Malik7934, mais pas pour "1/ tu génères un chiffre aléatoire et tu demandes d'entrer ce chiffre "+1" " car un robot qui saura lire le contenu de l'image saura bien faire l'addition avec "1", non?
La 3ième me semble faisable avec cette class, ça serait peu être la version 2 ;)
++

signaler à un administrateur
Commentaire de psykocrash le 13/11/2005 14:03:00

Le gros problème de ce genre de fausse sécurisation c'est que si un floodeur en veut à ton site, il lui suffira de télécharger toutes tes images, et créer un robot tout bête. Il mettra les correspondaces image->valeur dans la mémoire du robot, et le robot n'aura plus qu'à comparer le contenu des images avec les images qu'il a en mémoire (donc même pas besoin de faire de la reconnaissance de formes) et renvoyer la valeur correspondate. Donc même si tu changes à chaque chargement le nom des fichiers, ça n'influra pas sur le comportement du robot. C'est pour ça que l'on utilise une image unique (je veux dire par la qu'on n'utilise pas une suite d'images).
Cela dit, mieux vaut une fausse sécurisation que pas de sécurisation du tout (comme les caméras factices), ça en découragera quelque uns, c'est toujours ça de gagné !

signaler à un administrateur
Commentaire de psykocrash le 13/11/2005 14:16:03

Ah je viens de penser à un truc. Tu peux, au lieu de donner un nouveau nom aux fichiers à chaque utilisation, donner le même nom à tous les fichiers. En fait tu appelleras un fichier (disons antiflood.php) qui se chargera de renvoyer une image choisie aléatoirement. Exemple :
Fichier avec un code à 5 chiffres :

<html><body><img src="./antiflood.php" alt="" /><img src="./antiflood.php" alt="" /><img src="./antiflood.php" alt="" /><img src="./antiflood.php" alt="" /><img src="./antiflood.php" alt="" /></body></html>

et le fichier 'antiflood.php' :

<?php
// Soit $code ton code anti flood
// Récupération de $code
// Sélection aléatoire d'un nombre dans $nombre
$code = $code.$nombre;
readfile($nombre.".png");
?>

Je ne t'ai donné là que l'idée générale, à toi de la coder si ça t'intéresse :)

Bonne continuation !

signaler à un administrateur
Commentaire de Anthomicro le 13/11/2005 14:22:05

ça revient à faire ce que tu disais peu efficace dans ton commentaire précédent :-)

"il lui suffira de télécharger toutes tes images, et créer un robot tout bête. Il mettra les correspondaces image->valeur dans la mémoire du robot, et le robot n'aura plus qu'à comparer le contenu des images avec les images qu'il a en mémoire"

signaler à un administrateur
Commentaire de psykocrash le 14/11/2005 18:59:56

Merci je sais ce que j'ai dit, mais comme certains sont obligés d'utiliser ce code, autant l'optimiser et ne pas fatiguer le serveur avec des changements de nom de fichier a chaque ouverture de la page...
:)

signaler à un administrateur
Commentaire de Anthomicro le 14/11/2005 22:44:06

c'est surement plus rapide que de faire appel à gd je pense ;-)

signaler à un administrateur
Commentaire de psykocrash le 16/11/2005 12:47:26

Plus rapide, et inefficace ^^

signaler à un administrateur
Commentaire de Anthomicro le 16/11/2005 15:25:44

Tout comme le fait de choisir une image aléatoirement, si tu gardes la même image c'est inefficace, mais à choisir entre deux solutions inefficaces, autant prendre celle qui bouffe le moins de performances si tu vois ce que je veux dire :-)

signaler à un administrateur
Commentaire de psykocrash le 16/11/2005 18:57:49

Tout à fait d'accord avec toi :)
Mais bon je crois qu'il faudrait qu'on en reste là, sinon il va être dégouté d'avoir posté sur phpcs :p
f bnkcm c'est pas toi qu'on critique, c'est la méthode !!

signaler à un administrateur
Commentaire de f bnkcm le 16/11/2005 19:28:25

Salut,
Anthomicro et Psykocrash => Alors en fin de compte mon petit code devient inefficace :(
Je suis d'accord, mais pour un site sans la GD, c'est peut être une solution efficace surtout si on la combine avec l'idée que Malik7934 a proposé un peu plus haut.
Si j'ai un peu de temps je pourrais m'y pencher dessus.
Psykocrash => Les critiques constructives sont toujours les bienvenues (même si elles sont vexantes des fois..snif...) ;)
Merci pour votre contribution.
++

signaler à un administrateur
Commentaire de masternico le 21/07/2006 10:56:38

je passais par la et lisais tout vos commentaires.
Bien que le sujet de la sécurité aurait pu faire l'objet d'un post à part, je voulais répondre à Grenard qui disait qu'un robot ne pouvait déchiffrer facilement la zone chiffrée.
Il est une appliquation que pratiquement tout détenteur de scanner possède : un reconnaisseur de caractères qui te lit une page de livre et la transcrit en fichier texte modifiable. Si un tel programme fonctionne sur l'ordi des communs des mortels, alors imagine ce que peut faire le même programme sur l'ordi d'un hacker acharné et débrouilard. Il lui suffit juste de "scanner" la portion de l'écran ou apparait l'image chiffrée et optient en retour le numéro correspondant.
Donc même si l'idée de ne pas utiliser la GD pour faire son affaire est interessante, cela demandera un peut plus que de simples images de chiffres, car même si le but est de proteger le petit marcel en maillot de bain (lol, je l'ai trouvée excelente celle la), le hacker finira par s'en occuper car son but est de montrer qu'il est plus fort que les autres... Et comme tu l'empêche de passer à son aise, il forcera le passage, peut importe ce qui se trouve au bout... juste pour le fun...
F BNKCM ==> j'espère que tu n'as pas baissé les bras car l'idée est interessante. Il faudrait remplacer les images par une application flash qui afficherait un piaf sur un arbre, et il faudrait pouvoir répondre s'il se trouve sur la branche, sur la racine, etc... comme l'application flash est une vidéo, cela complique la tâche d'un ou d'une hackeuse (pourquoi pas, on se les imagine toujours binoclar et moche comme des poux... mais c'est peut être une petite pépé roulée comme une déesse? he he he) qui s'attache à déchiffrer une image fixe. De plus, il faudrait un timer de temps de réponse pour éviter que le robot n'ai trop de temps pour répondre à la question...
A+

signaler à un administrateur
Commentaire de f bnkcm le 02/09/2006 14:25:10

Re bonjour tout le monde!
Je viens de poster une nouvelle source, que j'ai codé juste la nuit, elle traite encore de l'anti-flood sans gd..eh oui le petit marcel il faut le porteger à n'importe quel prix! ;P
Suite à vos remarques et critiques (merci) et surtout la dernière suggestion de masternico, l'idée de l'application falsh, j'ai donc fait un petit mélange flash/php très basique et j'aimerai bien si vous y jetter un coup d'oeil pour vos critiques et essayer de l'améliorer.
Et pour celle là, si j'aurai plus de temps, j'essayerai de voir comment appliquer l'idée de malik, sinon ça reste comme ça pour l'instant.
++

signaler à un administrateur
Commentaire de f bnkcm le 02/09/2006 14:29:39

J'ai oublié de vous passer l'adresse désolé.
la voici: http://www.phpcs.com/code.aspx?ID=39397
++

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment tester les fichiers PHP [ par Clem ] Comment tester les fichiers PHP sans les publier sur son site ? Dans le genre de PWS avec l'asp Tri de fichiers par date [ par Clem ] Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :&lt;?$rep=opendir('.');while ($file = r Fichiers dans une base de donnée [ par Clem ] Comment uploader un fichier dans une base de données, et le downloader ? réaliser et envoyer des fichiers zip [ par pupuce ] J'ai vu qu'il est possible de créer des fichiers zip, jusque là je vois bien comment faire mais :Je veut pouvoir envoyer le zip au client, sans qu'il Compter des fichiers.... [ par FleX ] Alors voila. je voudrais me faire un script php3 qui compte le nombre de fichiers dans un dossier et que le resultat soit mis dans une variable, que j créer un fichier ???? petit PB [ par MangaII ] Hello les gars !Voilà, j'ai un petit soucis, j'ai besoin de créer des fichiers (TXT) sur mon site, depuis ma page en PHP ! le PB, c que je pe pas ! Je Encore les fichiers [ par koko ] bon c'est encore moi avec mes fichiers.txt... cette fois-ci, je voudrais que lorque j'ouvre le fichier, il mets les variables qui sont à l'intérieur d fichiers batch et username [ par booth ] bonjour, je cherche le moyen soit de lancer un batch sur la machine client, soit de récupérer directement son username (log windows ou netware)si kelk zipper plusieurs fichiers [ par eax ] help! je cherche à apprendre comment faire pour zipper plusieurs fichiers (des images par exemple). si qqun connait un bon tutorial ou un code source connection FTP par PHP [ par JulienC ] Bonjour à toutes et à tous,Mon but est de pouvoir uploader sur mon site des fichiers ayant une extension particulière (on les nommera .ext). Ces fichi


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,562 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.