Bannir une liste d'IP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bannir une liste d'IP

par Xenon_54 » 18 sept. 2005, 23:31

Bonjour,

Pourquoi ne pas utiliser la fonction file() afin de charger complètement le fichier dans un tableau pour ensuite utiliser la fonction in_array() ?

Cette fonction ferait exactement le même traitement que vous faites présentement mais en moins de ligne. La fonction in_array() devrait arrêter sa recherche dès qu'il trouvera une occurence de la valeur recherchée.

Pour ceux qui sont toujours sceptique fasse à la performance de cette méthode, une comparaison serait la bienvenue et je me soumettrai volontier aux résultats retournés.

Vous pouvez également utiliser la fonction ip2long() et long2ip() pour tranformer une adresse IP en format numérique. Ceci permet d'avoir une adresse IP plus facile à manipuler puisqu'elle ne comporte plus de points et que des intervalles peuvent être facilement calculés.

La solution de la base de données est également envisageable. Cependant est-ce qu'une connexion vers une base de données SQL vaudrait réellement la peine pour le traitement voulu? S'il y a une connexion déjà établie, alors ce serait une solution envisageable. Dans le cas contraire, il ne serait pas approprié d'en créer une si l'on peut obtenir le même résultat par lecture d'un simple fichier texte.

La base de données pourrait permettre en revange un calcul et une récupération des IP plus facile. Vous pourrez également créer des intervales plus facilement en créant deux champs représentant le début de l'intervale et sa fin.

par Cyrano » 18 sept. 2005, 21:49

Alors un petit test de vérification:
// On vérifie l'existence du fichier
if(file_exists("./Listeban.txt"))
{
    // on ouvre le fichier Listeban.txt qui se trouve ici à la racine
    // ouverture en mode lecture ("r")
    $fichier = fopen("./Listeban.txt" , "r");

    if ($fichier)
    {
        // Le fichier Listeban.txt a bien été ouvert
        // on test chaque ligne (donc adresse ip) pour la comparer
        while (!feof ($fichier))
        {
            // on récupere la ligne
            $adr_ip = fgets($fichier, 4096);
            // on enleve les eventuel espace en début et fin de la ligne
            $adr_ip = trim($adr_ip);
            if ( $adr_ip == $REMOTE_ADDR){
                //code a executer en cas d'ip banni trouvée
                echo 'Vous êtes banni !';
                // on referme le fichier Listeban.txt
                fclose ($fichier);
                // on quitte le script
                exit();
            }
        }
        // on referme le fichier Listeban.txt
        fclose ($fichier);
    }
    else
    {
        // Le fichier Listeban.txt est introuvable
        echo 'fichier introuvable';
    }
}

par enky » 18 sept. 2005, 21:46

Merci beaucoup ! C'est exactement ce que je veux !

Par contre, les lignes :
else { // Le fichier Listeban.txt est introuvable
echo 'fichier introuvable';

ne servent à rien, parce que si le fichier listeban.txt est introuvable, alors ca renvoi une erreur à la ligne 3.

par Reiji » 18 sept. 2005, 20:30

Je te propose ici une solution :

Pour commencer je pense que tu devrai disposer d'une adresse IP par ligne dans ton fichier Listeban.txt :

Code : Tout sélectionner

XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY ZZZ.ZZZ.ZZZ.ZZZ
ensuite pour verifier si l'adresse qui tente de se connecter est banni tu peux procéder ainsi :
// on ouvre le fichier Listeban.txt qui se trouve ici à la racine
// ouverture en mode lecture ("r")
$fichier = fopen("./Listeban.txt" , "r");

if ($fichier){ // Le fichier Listeban.txt a bien été ouvert
	// on test chaque ligne (donc adresse ip) pour la comparer
	while (!feof ($fichier)) {
		// on récupere la ligne
	  $adr_ip = fgets($fichier, 4096);
	  // on enleve les eventuel espace en début et fin de la ligne
	  $adr_ip = trim($adr_ip);
	  if ( $adr_ip == $REMOTE_ADDR){
	  	//code a executer en cas d'ip banni trouvée
	  	echo 'Vous êtes banni !';
	  	// on referme le fichier Listeban.txt
	  	fclose ($fichier);
		// on quitte le script
		exit();
	  }
	}
	// on referme le fichier Listeban.txt
	fclose ($fichier);
}
else { // Le fichier Listeban.txt est introuvable
	echo 'fichier introuvable';
}
Voila.

par HD » 18 sept. 2005, 17:59

probleme : si je me connecte avec une ip deja utilisée par quelqu'un banni, je serais traité injustement (oui je sais la probabilité est tres faible mais bon... c'est possible !)
mais surtout : l'ip change à chaque connexion donc dans quelque temps tu te retrouvera avec une TRES longue liste tres lourde (et lente) à gerer -à chaque fois que quelqu'un se connecte- et surtout qui ne servira à RIEN puisque l'ip du banni changera à chaque fois !!!

par Truc » 18 sept. 2005, 17:31

Salut, en començant à récuperer les ip du fichier text:
:arrow: fopen()
:arrow: fgets()

par enky » 18 sept. 2005, 17:22

Oui, mais la liste des IP indésirables se trouve dans un fichier texte : listeban.txt

par Visiteur » 18 sept. 2005, 12:57

Le mieux se serait de le faire avec une BDD alors tu fais a la main un truc du style
If ($ip<xxx.xxx.xxx) (ou) ($ip=xxx.xxx.xxx)
{
echo "vous ètes banni !"
}
$ip contiendrais l'ip (evidemment)

par enky » 18 sept. 2005, 12:24

Je souhaite vérifier que l'IP du visiteur n'est pas dans la liste des IP bannis (le fichier listeban.txt où il y a déjà une longue liste).

Si oui, alors faire exit();

par Xenon_54 » 17 sept. 2005, 23:37

Bonjour,

Quel est le problème exact?
- La vérification auprès de plusieurs adresses IP?
- La possibilité de vérifier une étendue d'IP?
- Le stockage des adresses IP bannies?

Il faut nous expliquer plus en détails le problème si tu désires de l'aide.

par JazzFinder » 17 sept. 2005, 21:59

---

par enky » 17 sept. 2005, 20:54

Sans BDD c'est plus simple. Il suffit de copier-coller dans n'importe quel script.

par JazzFinder » 17 sept. 2005, 20:35

---

Bannir une liste d'IP

par enky » 17 sept. 2005, 20:17

Salut,
Je souhaite bannir une liste d'IP que j'ai ajouté dans un fichier texte : listeban.txt

Ce fichier texte contient tous les IP à bannir (avec un espace entre chaque IP). Exemple : 999.99.999.999 888.88.888.888 777.77.777.777

Pour bannir un IP, il suffit de faire :
if($REMOTE_ADDR == 'XXX.XXX.XXX.XXX')
{ echo 'Vous êtes banni !';
exit();}
Mais comment faire si j'ai une liste d'IP que j'ai ajouté dans le fichier texte listeban.txt ?