Contre les Aspirateurs WEB

News sur ce langage, versions PhpBB etc ...

Modérateurs: Guardian, AgnesD

Contre les Aspirateurs WEB

Messagede FLORIAN le Sam 16 Juil 2005 - 10:56

Les aspirateurs de site demandent un très grand nombre de pages dans des intervalles de temps très court provoquant un surcharge du serveur web, un gène des utilisateurs légitimes et une consommation de bande passante importante.


Belver voila un script SQL pour te permettre ( a moins que tu ne l'ai deja fait ) d'empecher certains aspirateurs

exemple = HTTrack, Memoweb, Offline explorer, Teleport



FICHIER A RENOMMER EN TRACE IP.SQL

#
# Structure de la table `ip`
#
CREATE TABLE ip (
id int(11) NOT NULL auto_increment,
ua char(100) NOT NULL default '',
ip char(50) NOT NULL default '',
date char(20) NOT NULL default '',
cpt int(11) NOT NULL default '0',
PRIMARY KEY (id),
KEY ip (ip),
KEY date (date)
) TYPE=MyISAM;

#
# Structure de la table `ip_bl`
#

CREATE TABLE ip_bl (
id int(11) NOT NULL auto_increment,
ua char(100) NOT NULL default '',
ip char(50) NOT NULL default '',
date char(20) NOT NULL default '',
cpt int(11) NOT NULL default '0',
PRIMARY KEY (id),
KEY ip (ip)
) TYPE=MyISAM;





Installation:

1 - Renseigner les paramètres de votre base de données en créeant le fichier config_base.php
ou décommenter les 4 lignes suivantes et supprimer la ligne: 82 - require("config_base.php");

$dbhost = "localhost";
$dbuname = "root";
$dbpass = "";
$dbname = "base1";

2 - Créer les tables sql 'ip' et 'ip_bl'. Le code sql se trouve dans le fichier trace_ip.sql

3 - Configurer la ligne 129 - mail(...) avec vos paramètres
Cette ligne envoie un mail en cas de bloquage d'une IP
avec les paramètres de la connexion

4 - Installer ce script au début de toutes vos pages php
require ("trace_ip.php");

5 - Effectuer éventuellement des tests sur une partie de VOTRE site pour
affiner la limite de 25 pages/minute (ligne 120).

require("config_base.php");

$Vcpt = 0;
$Vdate = date("Y/m/d H:i");
$Vua = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
$Vip = $HTTP_SERVER_VARS["REMOTE_ADDR"];

$dbic = mysql_connect($dbhost,$dbuname,$dbpass);
mysql_select_db($dbname);

if ($dbic <> 0)
{
clean up old IP
mysql_query("DELETE FROM ip WHERE date <> '$Vdate'");

chercher si le visiteur est interdit
$res = mysql_query("SELECT ip FROM ip_bl WHERE ip='$Vip'");
while(list($ip) = mysql_fetch_row($res))
{
Visiteur trouvé dans les IP interdites
mysql_free_result($res);
mysql_close($dbic);
die("IP interdite pour abus.");
}
mysql_free_result($res);

chercher si le visiteur est déjà passé
$res = mysql_query("SELECT id, ip, date, cpt FROM ip WHERE ip='$Vip'");
while(list($id, $ip, $date, $cpt) = mysql_fetch_row($res)) $Vcpt = $cpt;
mysql_free_result($res);

if ($Vcpt == 0) mysql_query("INSERT into ip (id, ua, ip, date, cpt) values ('', '$Vua', '$Vip', '$Vdate', '1')");
else
{
Visiteur ayant déjà chargé des pages dans la même minute ==> +1 sur le compteur
mysql_query("UPDATE ip SET cpt=cpt+1 WHERE ip='$Vip'");

si limite atteinte (25 pages php/min) ajouter dans la table des ip interdites.
if ($Vcpt >= 25 )
{
mysql_query("INSERT into ip_bl (id, ua, ip, date, cpt) values ('', '$Vua', '$Vip', '$Vdate', '$Vcpt')");

$msg = "HTTP_SERVER_VARS:\n" ;
while (list ($key, $val) = each ($HTTP_SERVER_VARS)) $msg .= "$key => $val\n";
$msg = addslashes($msg);
eval("\$msg = \"$msg\";");
$msg = stripslashes($msg);
mail ("votre_mail@votre_domaine.tld", "[IP Interdite] $Vip - $Vdate", $msg, "From: banmaster@votre_domaine.tdl");
}
}
mysql_close($dbic);
}
?>
FLORIAN
 

Retourner vers Php/mySql - PhpBB

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron