Bannissement par ip (pdo requis)

Contenu du snippet

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 / Exemple :


--------------------------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. =)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Luzy)