Bannir un visiteur
Le principe du bannisement est d'empècher le visiteur de revenir en bloquant son adresse IP. Le plus gros
problème vient du fait que l'addresse IP que l'on obtient avec $_SERVER['REMOTTE_ADDR'] change à chaque
connection. Il suffirait donc au visiteur banni de se déconnecter puis de se reconnecter pour pouvoir
à nouveau visiter le site et vous ennuyer.
Pour pallier à ce problème, nous allons utiliser $_SERVER['HTTP_X_FORWARDED_FOR'].
Pour mieux comprendre la différence entre ces deux variables serveur, voici un petit tableau explicatif
qui provient du site:
http://frederic.bouchery.free.fr.
Proxy transparent (proxy normal)
| Variable | Adresse IP |
| REMOTE_ADDR | adresse IP du proxy |
| HTTP_VIA | adresse IP du proxy |
| HTTP_X_FORWARDED_FOR | adresse IP de l'utilisateur |
Proxy anonyme
| Variable | Adresse IP |
| REMOTE_ADDR | adresse IP du proxy |
| HTTP_VIA | adresse IP du proxy |
| HTTP_X_FORWARDED_FOR | adresse IP du proxy |
Proxy aléatoire
| Variable | Adresse IP |
| REMOTE_ADDR | adresse IP du proxy |
| HTTP_VIA | adresse IP du proxy |
| HTTP_X_FORWARDED_FOR | une adresse IP aléatoire à chaque requête |
Proxy hautement anonyme
| Variable | Adresse IP |
| REMOTE_ADDR | adresse IP du proxy |
| HTTP_VIA | (rien) |
| HTTP_X_FORWARDED_FOR | (rien) |
Copyright © http://frederic.bouchery.free.fr/?2004/09/12/17-Ip-Ip-Ip-Houra
Comme vous avez pu le remarquer, il n'y a qu'avec HTTP_X_FORWARDED_FOR qu'il y a moyen d'obtenir la
"vraie" adresse IP du visiteur. Nous allons donc pouvoir faire une petite fonction pour vérifier
si l'utilisateur a été banni ou non.
Pour ce faire, nous aurons besoin d'une table contentant deux champs, un id et un autre pour contenir
l'ip. Je vous laisse le faire, vous savez commenf faire. Nommez cette table bannisement .
Le script
En premier lieu, on déclare la fonction qui aura comme argument l'adresse IP du visiteur. On appellera
donc la fonction commme ceci:
banni($_SERVER['HTTP_FORWARDED_FOR']);
Commenceons maintenant notre fonction:
function banni($ip){
if($ip == ''){
$ip = $_SERVER['REMOTE_ADDR'];
}
J'ai mis ici une petite condition au cas où le visiteur aurait un proxy hautement anonymeet que nous
n'aurions pas son adresse IP. Dans ce cas, mieux vaux utiliser REMOTE_ADDR plutôt que de laisser l'IP
vide.
Il faut maintenant vérifier si l'IP est déjà dans la table, auquel cas, l'utilisateur est banni.
C'est parti:
$connection = mysql_connect("localhost", "root", "m_d_p");
mysql_select_db("data_base");
//Connection à la BDD
$mysql_query = "SELECT * FROM bannisement WHERE ip='$ip'";
$query = mysql_query($mysql_query) or die(mysql_error());
$resultat = mysql_num_rows($query);
//On a compté le nombre de fois que l'IP est dans la table.
if($resultat == 1){
S'il y a un résultat (donc que le visiteur est banni, on lui dit de passer son chemin. Sinon, on le laisse
charger la page comme il le souhaite.
echo'Désolé, vous figurez sur les listes noires de ce site. Vous pouver <a href="contact.php"> prendre
contact avec le webmaster</a> pour qu'il vous explique les raisons de ce bannisement.';
mysql_close($connection);
//On se déconnecte
exit;
//Bon voyage pour le banni!
}
Dans ce script, on c'est contenté d'afficher un petit message si le visiteur était banni en lui donnant
un lien vers la page de contact (qui ne peut pas être protégée, sauf si vous ne souhaitez pas que
le visiteur banni puisse prendre contact avec vous) pour qu'il puisse s'expliquer avec vous sur les
raisons qui vous ont motivé à le bannir.
Si l'IP n'est pas dans la table, on le laisse visiter tout ce qu'il veut, et donc on termine la fonction.
De plus, il n'y a pas besoin de "else".
mysql_close($connection);
//S'il n'est pas banni, il n'a pu se déconnecter.
}//Fin de la fonction
Voilà, votre fonction est terminée. Il suffit de la placer un premier sur TOUTES les pages de votre site
pour que le visiteur banni n'aie accès à aucune page.
Trouver l'IP du trouble-fête
S'il y a un visiteur qui vous gène sur votre site, arrangez vous, par exemple, pour enregistrer l'adresse IP
de tous les visiteurs qui postent dans le livre d'or (s'il écrit des "saloperies" dans le livre d'or). Il
ne vous restera donc plus qu'à insérer son IP dans la BDD à l'aide de PHPMyAdmin (vous pouvez vous créer
un petit formulaire si vous le voulez).
: arrangez vous pour découvrir avec certitude
l'adresse IP du "troube-fête" pour ne pas bannir un innocent visiteur.