begin process at 2008 08 29 12:02:29
1 233 606 membres
143 nouveaux aujourd'hui
14 291 membres club

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 !

BANNISSEMENT PAR IP (PDO REQUIS)


Information sur la source

Description

Voici un simple code qui vous permet de bannir ou débannir une IP. PDO est requis pour la gestion de la BDD mais étant donnée la simplicité du code et de la table demandée, il vous sera facile d'adpter le code pour utiliser un fichier texte.

(Pour la table, il s'agit d'une simple table avec un seul champ en vachar(16) nommé "ip", la table est nommé "ip_ban")

Si l'utilisation de la variable $_SERVER['REMOTE_ADDR'] vous rebute, il est également aisé d'adapter avec la source qui se trouve içi: http://www.phpcs.com/codes/RECUPERER-IP-VISITEUR_40034.aspx

A noter qu'il existe deux usages possible:
[1] Avec une vérification dans l'index de votre site et une redirection comme c'est le cas içi (ce qui interdit jusqu'à la visite du site par l'ip bannis)
[2] Avec une verification par exemple avant l'affichage d'un formulaire pour poster un commentaire, sans direction (plus souple, celà permet de garder un visiteur qui se voit restreint les fonctions interactives de votre site)

Source

  • --------------------------VERIFICATION---------------------------------------
  • <?
  • // Script de bannissement d'IP
  • // Version 1.0
  • // Auteur: Angellore
  • // Permet un banissement d'IP au niveau d'une fonction ou d'un accès global à un site.
  • // Connexion SQL (A supprimer lors d'une utilisation réelle puisqu'on suppose qu'elle est déjà faite)
  • $user = 'root';
  • $pass = '';
  • $ban_mess = 'Vous avez été bannis de ce site! Vilain pas beau!<br />'; // Message affiché si la redirection de marche pas.
  • $dbh = new PDO('mysql:host=localhost;dbname=localhost', $user, $pass);
  • foreach ($dbh->query('SELECT * from ip_ban WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"') as $row)
  • {
  • if(!empty($row))
  • {
  • header("Location: http://google.fr"); // Redirection
  • exit();
  • echo $ban_mess;
  • }
  • }
  • ?>
  • --------------------------FORMULAIRE ADMIN------------------------------------
  • <?
  • // Connexion SQL (A supprimer lors d'une utilisation réelle puisqu'on suppose qu'elle est déjà faite)
  • $user = 'root';
  • $pass = '';
  • $dbh = new PDO('mysql:host=localhost;dbname=localhost', $user, $pass);
  • switch ($_GET['a'])
  • {
  • case 'ban': // Bannissement
  • // Verifications de la validité du formulaire
  • if ($_POST['verif'] != '1') { echo '<span class="warn">Veuillez cocher la case de vérification de soumission du formulaire</span>'; }
  • else
  • {
  • $dbh->exec('INSERT INTO ip_ban (ip) VALUES ("'.$_POST['ip'].'")');
  • echo 'L\'adresse IP ('.$_POST['ip'].') a correctement été bannie.';
  • }
  • break;
  • case 'dban': // Debannissement
  • $dbh->exec('DELETE FROM ip_ban WHERE ip = "'.$_POST['ip'].'"');
  • echo 'L\'adresse IP ('.$_POST['ip'].') a correctement été débannie.';
  • break;
  • }
  • ?>
  • <!-- Exemple de Style -->
  • <style>
  • .warn { color: FF0000; }
  • </style>
  • <h5> Bannir une adresse IP </h5>
  • <form method=post action="?a=ban">
  • <input type="text" name="ip" value="<? echo $_POST['ip']; ?>" size="11" maxlength="15" /><br />
  • <label><input type="checkbox" name="verif" value="1" /><b>Êtes-vous sur(e)?</b> <span class="warn">/!\ Il s'agit d'une action lourde de conséquences.</span></label><br />
  • <input type="submit" name="go" value="GO" />
  • </form>
  • <h5> Débannir une adresse IP </h5>
  • <form method=post action="?a=dban">
  • <select name="ip" size="1">
  • <?
  • foreach ($dbh->query('SELECT * from ip_ban') as $row) // On va chercher les adresses déjà enregistrées pour les proposer comme choix
  • {
  • echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
  • }
  • ?>
  • </select>
  • <input type="submit" name="go" value="GO" />
  • </form>
--------------------------VERIFICATION---------------------------------------
<?

// Script de bannissement d'IP
// Version 1.0
// Auteur: Angellore
// Permet un banissement d'IP au niveau d'une fonction ou d'un accès global à un site.

// Connexion SQL (A supprimer lors d'une utilisation réelle puisqu'on suppose qu'elle est déjà faite)

$user = 'root';
$pass = '';
$ban_mess = 'Vous avez été bannis de ce site! Vilain pas beau!<br />'; // Message affiché si la redirection de marche pas.

$dbh = new PDO('mysql:host=localhost;dbname=localhost', $user, $pass);

foreach ($dbh->query('SELECT * from ip_ban WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"') as $row) 
	{
		if(!empty($row)) 
		{ 
			header("Location: http://google.fr"); // Redirection
			exit();
			echo $ban_mess;
		}
	}

?>


--------------------------FORMULAIRE ADMIN------------------------------------
<?

// Connexion SQL (A supprimer lors d'une utilisation réelle puisqu'on suppose qu'elle est déjà faite)

$user = 'root';
$pass = '';

$dbh = new PDO('mysql:host=localhost;dbname=localhost', $user, $pass);

switch ($_GET['a']) 
	{
    		case 'ban': // Bannissement
       			// Verifications de la validité du formulaire
			if ($_POST['verif'] != '1') { echo '<span class="warn">Veuillez cocher la case de vérification de soumission du formulaire</span>'; }
			else 
				{
					$dbh->exec('INSERT INTO ip_ban (ip) VALUES ("'.$_POST['ip'].'")');
					echo 'L\'adresse IP ('.$_POST['ip'].') a correctement été bannie.';
				}
        		break;
    		case 'dban': // Debannissement
       			$dbh->exec('DELETE FROM ip_ban WHERE ip = "'.$_POST['ip'].'"');
			echo 'L\'adresse IP ('.$_POST['ip'].') a correctement été débannie.';
       		break;

	}


?>
 <!-- Exemple de Style -->
<style>
.warn { color: FF0000; }
</style>

<h5> Bannir une adresse IP </h5>
<form method=post action="?a=ban">
	<input type="text" name="ip" value="<? echo $_POST['ip']; ?>" size="11" maxlength="15" /><br />
	<label><input type="checkbox" name="verif" value="1" /><b>Êtes-vous sur(e)?</b> <span class="warn">/!\ Il s'agit d'une action lourde de conséquences.</span></label><br />
	<input type="submit" name="go" value="GO" />
</form>

<h5> Débannir une adresse IP </h5>
<form method=post action="?a=dban">
	<select name="ip" size="1">
  		<? 
		foreach ($dbh->query('SELECT * from ip_ban') as $row) // On va chercher les adresses déjà enregistrées pour les proposer comme choix
			{
				echo '<option value="'.$row['0'].'">'.$row['0'].'</option>';
			}
		?>
	</select>
	<input type="submit" name="go" value="GO" />
</form>

Conclusion

Je ne pense pas que cette source soit mise à jour étant donnée sa simplicité.
Par contre, j'aimerais bien quelques petits commentaires, puisqu'il s'agit de ma première source! :D
En espérant qu'elle puisse vous êtes utiles. =)
  • signaler à un administrateur
    Commentaire de jdalton42 le 01/08/2007 18:40:55

    suffit d'avoi une ip dynamique et ton truc est foutu...

  • signaler à un administrateur
    Commentaire de coucou747 le 01/08/2007 19:52:14

    #  exit();
    # echo $ban_mess;
    lol

    jdalton, ca evite toujours les proxys...

  • signaler à un administrateur
    Commentaire de Evangun le 01/08/2007 20:04:07

    Hello,

    outre le fait que cette source existe déjà en 50 exemplaires et n'a aucun intérêt, tu devrais au moins enregistrer la date pour effacer au fur et à mesure, sinon
    1) tu vas exploser ta base
    2) tu finiras par bloquer des gens qui ont récupéré l'adresse IP de quelqu'un d'autre

  • signaler à un administrateur
    Commentaire de coucou747 le 01/08/2007 20:07:35

    lol cote explosion de base... si c'etait de Mr sorel cette source, je comprendrais... mysql gere jusqu'a 2^32 lignes dans une myisam... ton hd craquera avant le sgbd, c'est ensuite la requette qui pourrait etre longue [...]

    j'avais un truc qui enregistrait chaque demande de page, les arguments, le navigateur, etc... ca permet de voir plein plein de choses... au pire, si ca devient trop long, tu fais une db archive...

  • signaler à un administrateur
    Commentaire de Evangun le 01/08/2007 20:41:59

    Oui potentiellement ça peut être intéressant, mais moi les bases de 100Mo je ne peux plus les voir en peintures, surtout si c'est pour des informations aussi inutiles que bannir une IP... :)

  • signaler à un administrateur
    Commentaire de Luzy le 01/08/2007 21:03:16

    #  exit();
    # echo $ban_mess;

    Inversé les deux effectivement.

    Quand à la taille de la base, je ne vois pas le problème, je me vois mal bannir des millier de personnes. Une dizaine d'entrée au maximum et voilà.

  • signaler à un administrateur
    Commentaire de coucou747 le 01/08/2007 21:39:14

    ban si tu ban tor et quelques proxys, t'en est a 10 000 ips en gros

  • signaler à un administrateur
    Commentaire de malalam le 02/08/2007 09:29:03 administrateur CS

    Hello,

    bannir une IP est une pratique courante et parfois utile. Même si c'est loin d'être infaillible.
    Et le risque de faire exploser la base me parait franchement minime, comme le dit Coucou. Les serveur de bdd sont costauds et supportent facilement plusieurs millions de lignes. Un insert, un delete, un select sur 1 seule ligne ne risquent pas non plus d'être lentes.
    Là où je suis d'accord avec Evangun, c'est qu'il existe des tas de codes de ce genre sur PHPCS. Je le laisse pour une seule raison : il utilise PDO, ce qui est assez rare sur les sources ici; donc, ça a un intérêt.
    Quelques remarques :
    test du GET ?
    Test de l'existence d'une IP dans la base avant de l'insérer (histoire d'éviter des doublons franchement inutiles).
    PDO lance des exceptions lors d'erreurs, autant les utiliser. Un petit block try catch ne peut pas faire de mal.
    PDO permet d'échapper les données en accord avec le moteur de bdd choisi...là encore, pourquoi ne te sers tu pas de cette possibilité (on ne sait jamais ce qui peut arriver sur ton code) ?

  • signaler à un administrateur
    Commentaire de jdalton42 le 02/08/2007 12:00:38

    bah moi quand je fais un ban sur mon site j'utilise l'ip, le login et l'adresse email.

    quand le mec a changé d'ip et qu'il essaye de se logger, sa réenregistre l'ip et il est rebannis...

  • signaler à un administrateur
    Commentaire de malalam le 02/08/2007 14:14:55 administrateur CS

    Y a des mecs sur ton site qui quand ils sont bannis, tentent de revenir avec une IP différente, mais le même compte...? Sont pas très futés dis donc...;-)

  • signaler à un administrateur
    Commentaire de TheSin le 02/08/2007 14:16:42

    jdalton42 => Dans ce cas, pourquoi se servir de l'ip pour ban et pas simplement ban l'utilisateur ? (puisque login et email, juste à rajouter un champ booléen dans la table pour savoir si il est ban ou non non ?)

  • signaler à un administrateur
    Commentaire de jdalton42 le 02/08/2007 14:29:08

    je t'assure que la plupart des bannis le font ^^

  • signaler à un administrateur
    Commentaire de jdalton42 le 02/08/2007 14:30:35

    oui mais au moin, avec l'ip, il ne voit carrément plus le site... ensuite si son ip a changé et qu'il réutilise son compte, bah il voit de nouveau plus le site meme si il est pas loggé ! puis l'email est bannis des inscriptions :)

  • signaler à un administrateur
    Commentaire de TheSin le 02/08/2007 17:30:13

    bin qu'il n'utilise simplement plus son compte non ?
    en bannissant une ip pour un membre puisque c'est bien de celà qu'il s'agit, tu peux bannir toutes les bécanes qui passent par le meme routeur/proxy, donc si son collègue est aussi sur le site au taff, y'a pas un peu problème ?

  • signaler à un administrateur
    Commentaire de apxa le 04/08/2007 02:14:20

    iop all,
    Juste pour info, si tu veux bannir une IP ou un mask d'IP sans requeter alors ecris direct dans le hosts.deny. C'est radical, pas de requetes.
    De plus ...

    Have Fun ;)

  • signaler à un administrateur
    Commentaire de coucou747 le 04/08/2007 11:00:12

    /etc/hosts.deny n'est pas forcement accessible en ecriture par php ou autre...

  • signaler à un administrateur
    Commentaire de MATHIS49 le 05/08/2007 08:46:43

    Par expérience seul un système de modération efficace empêche les internautes de mettre le bordel sur un site.
    Le problème du bannissement IP est que si l'internaute est par exemple derrière un routeur en PAT, tu risques de bannir plusieurs personnes au lieu d'une...

  • signaler à un administrateur
    Commentaire de TheSin le 05/08/2007 09:56:37

    Mathis49 => C'est en partie ce que je disais, en mieux dit :-)

  • signaler à un administrateur
    Commentaire de apxa le 05/08/2007 12:02:46

    iop all,
    oui il est vrai pour hosts.deny.
    Mais il reste alors .htaccess

    Options +FollowSymLinks
    order allow,deny
    deny from IP or Mask
    allow from all

    Have Fun ;)

  • signaler à un administrateur
    Commentaire de jdalton42 le 05/08/2007 13:04:25

    bah le gars empechera son réseau d'y acceder, c'est son probleme, il n'aura cas s'arranger avec eu...

    perso je me suis fais bannir de cannavallee.com pour multicompte alors que je n'ai qu'un compte... mais mon frere s'est connecté juste apres moi sur son compte... j'ai envoyé un mail a l'admin du site mais il s'en fou...

  • signaler à un administrateur
    Commentaire de TheSin le 05/08/2007 20:49:35

    jdalton42 => En général faut prévenir les admins avant de faire ce multicomptes, mais bon, c'est sur que la plupart s'en fiche, ils sont pas forcément tous professionnels dessus et développent des trucs pour se faire un peu d'argent ou pour le fun et ils ont autre chose à côté ^^
    Mais c'est sûr que ce n'est pas la solution que de bannir une IP, mais le ban pour multicomptes avec vérification IP, on a pas trop le choix, je vois pas comment faire autrement ....... et c'est fort dommage :/

  • signaler à un administrateur
    Commentaire de coucou747 le 05/08/2007 22:27:26

    on ne peut pas faire autrement... ici, on croise un type sur une ip, il a plusieurs pseudos ici, et on l'a croise sur irc avec une bonne vingtaine de pseudos et d'histoires delirantes... mais il aide bien, alors bon...

  • signaler à un administrateur
    Commentaire de TheSin le 06/08/2007 00:26:00

    Oui, mais dans l'entraide ou le chat, on se fiche royal d'un multi-comptes, ça ne peut poser préjudice à personne, tandis que sur un jeu, il est normal de supprimer les tricheurs qui possèdent plusieurs comptes et qui par conséquent peuvent gérer l'équivalent d'une équipe complète ... alors bon ... :P
    Ce qui serait utile par contre serait de pouvoir récupérer l'IP locale en + de l'IP Internet, mais là encore, en espace public, c'est difficille.
    Et justement, tient, prenons l'exemple basique des joueurs de cyber-café, ils y a forcément détectage d'une seule IP pour plusieurs comptes sur un même site, dans le cas où, évidemment, plusieurs personnes en même temps s'y retrouveraient connectées.
    C'est dans ce genre de situations où il n'est malheuresement pas possible de se fier au bannissement IP ...
    N'oublions pas que nos chers ordinateurs dit "PC" ne le sont plus depuis longtemps puisque qu'un ordinateur est aujourd'hui prévu pour plusieurs utilisateurs.
    Là, même l'IP locale n'est pas fiable.
    Bref, j'en reviens toujours au même point de vue, arrêtons les bannissements IP, même pour les robots.
    Pour les aspirateurs de sites, il me semble qu'il existe des solutions basiques à cet effet, pour des membres, il existe simplement une solution de booléen dans la BDD, pour les robots, ils ont générallement le nom de domaine, et dans le pire des cas, il existe encore simplement la même solution que les aspirateurs.
    Non ?

    (Si jme trompe, dites-le moi, j'aime bien quand on me remet les choses en place quand il le faut ;-) )

  • signaler à un administrateur
    Commentaire de coucou747 le 06/08/2007 08:03:03

    si tu te faisais attaquer sur irc, tu serais d'un autre avis... pour moi, une ip de proxy -> ban, une ip perso d'un connard -> ban, si il debranche son routeur pour revenir -> ban large... (j'ai vu des admins qui posaient des bans sur tout un FAI...)

  • signaler à un administrateur
    Commentaire de TheSin le 06/08/2007 09:07:27

    oui, mais encore, celà ne reste que le cas d'IRC, et entre une appli graphique et une appli Web y'a un monde ....
    moi j'essaie de rester dans le cadre d'une appli Web, conctrètement, on a pas besoin de ban une IP quand même, à moins de pas la ban plus de 24h à cause d'IP dynamique.
    Je me souviens il y a 2 ans, jme ballaidais tous les jours sur un site Web, à un moment, après reconnexion FAI, bin plus accès au site avant prochaine reconnexion, car IP bannie.
    Quand tu bannis une IP sur le net, c'est pas qu'une seule personne que tu peux bannir, c'est pas non plus simplement une pièce, c'est une série de personnes distinctes dont 1 seule à fait qqc de mal ....
    C'est pour ça que je ne supporte pas le bannissement par IP sur de l'application Web.

  • signaler à un administrateur
    Commentaire de guill76 le 06/08/2007 20:13:50

    ouais , interessant comme polémique tout ça.
    Moi je suis plutot également pour le banissement de compte:
    D'ailleurs, c'est en extrapolant, un peu comme le prof qui punit toute la classe quand le cancre fauteur ne veut pas se dénoncer lui même: j'avais horreur de ça à l'époque.
    Certes s'il faut punir ou bannir, bien évidemment bannissons le compte pas l'adresse ip ni le fournisseur.
    Pour info je suis pratiquement sûr que lequipe.fr avait banni tout aol pendant plusieurs mois l'année dernière => toutes les tentatives restaient vaines depuis 1 connexion aol irreprochable: lamentable.
    Donc même si ça existe restons pour une administration web générale permissive et pour favoriser une responsabilisation de chacun.
    Dans le cas des attaques à mon avis les admins des FAI devraient pouvoir agir et bloquer certaines connexions chez eux, s'ils pouvaient être alertés par les admins web avec raison valable(toutes les connexions doivent être historisées pendant un laps de temps, eux savent à qui appartient l'ip qui s'est connectée à tel site à tel moment). Dans ce cas, c'est vrai que pour les attaques émanant des cybercafés c'est plus dur, là c'est à l'administrateur du cybercafé de jouer. Enfin bon, pour poursuivre la réflexion s'il faut faire tout un cycle de delation et de flicage là ça peut devenir aussi dangereux pour les libertés de chacun...
    Pour conclure, Il faudrait et c'est peut-être le plus dur avoir des admins responsables pour cela (aucune allusion à CS à ce sujet :))

  • signaler à un administrateur
    Commentaire de guill76 le 06/08/2007 20:13:51

    ouais , interessant comme polémique tout ça.
    Moi je suis plutot également pour le banissement de compte:
    D'ailleurs, c'est en extrapolant, un peu comme le prof qui punit toute la classe quand le cancre fauteur ne veut pas se dénoncer lui même: j'avais horreur de ça à l'époque.
    Certes s'il faut punir ou bannir, bien évidemment bannissons le compte pas l'adresse ip ni le fournisseur.
    Pour info je suis pratiquement sûr que lequipe.fr avait banni tout aol pendant plusieurs mois l'année dernière => toutes les tentatives restaient vaines depuis 1 connexion aol irreprochable: lamentable.
    Donc même si ça existe restons pour une administration web générale permissive et pour favoriser une responsabilisation de chacun.
    Dans le cas des attaques à mon avis les admins des FAI devraient pouvoir agir et bloquer certaines connexions chez eux, s'ils pouvaient être alertés par les admins web avec raison valable(toutes les connexions doivent être historisées pendant un laps de temps, eux savent à qui appartient l'ip qui s'est connectée à tel site à tel moment). Dans ce cas, c'est vrai que pour les attaques émanant des cybercafés c'est plus dur, là c'est à l'administrateur du cybercafé de jouer. Enfin bon, pour poursuivre la réflexion s'il faut faire tout un cycle de delation et de flicage là ça peut devenir aussi dangereux pour les libertés de chacun...
    Pour conclure, Il faudrait et c'est peut-être le plus dur avoir des admins responsables pour cela (aucune allusion à CS à ce sujet :))

Ajouter un commentaire

Discussions en rapport avec ce code source

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS