Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /////////////////////////////////////////////////////////////////////////////////////
- // Script bloquant les aspirateurs de site - v 0.2 - 15/01/2003 //
- // Info: Renardrouge@rocketmail.com - http://www.1001bd.com //
- /////////////////////////////////////////////////////////////////////////////////////
- // Création: Janvier 2003 //
- // Ce script a été créer suite à une conversation stérile avec le //
- // developpeur d'un aspirateur de site. Il refusait de reconnaitre les //
- // dégats que peut entrainer son soft quand il est utilisé à tort //
- // et à travers, ou contre l'avis des webmasters, en passant outre les //
- // directives du robots.txt //
- /////////////////////////////////////////////////////////////////////////////////////
- // En pratique: //
- // 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. //
- // Ce script consomme lui aussi des ressources mais permet d'éviter le pic //
- // de ressources généré par un aspirateur. Il comporte 3 requetes SQL et une //
- // trentaine de lignes de code. //
- /////////////////////////////////////////////////////////////////////////////////////
- // Principe de fonctionnement: //
- // Le nombre de page demandées par IP et par minute est enregistrés. Si //
- // une IP demande un nombre de pages php trop important, l'IP est interdite //
- // et le script retourne le message "IP interdite pour abus" //
- // //
- // Il n'est pas basé sur les user agent car les aspirateurs permettent de //
- // les modifer sans difficulté. //
- // //
- // Un htaccess bloquant les agents connus ne peut qu'aider. //
- // //
- // Il ne bloque pas les robots comme Googlebot ou Scooter, car les moteurs //
- // de recherche étalent les acès à une site dans le temps. //
- // //
- // Un aspirateur va commencer par aspirer la 1ère page de votre site, puis //
- // de plus en plus au fur et à mesure qu'il découvrira des nouvelles url. //
- // Il demandera à partir de ce moment plusieurs pages simultanément. //
- // Au moment ou le script l'aura repéré, l'aspirateur ne trouvera plus de //
- // nouvelles url. Il terminera l'aspiration des URL qu'il aura codécouverte //
- // mais aspirera des pages avec le message d'erreur. L'aspiration se //
- // poursuivra donc quelques minutes encore. //
- // //
- // Au final l'utilisateur de l'aspirateur n'aura que les 1ères page du site //
- // et très rapidement tombera sur des pages blanches //
- /////////////////////////////////////////////////////////////////////////////////////
- // Résultats: //
- // Ce script a bloqué les aspirations réalisées avec //
- // HTTrack, Memoweb, Offline explorer, Teleport //
- // lors de tests menés avec les participants de la liste bar d'ovh //
- // que je remercie au passage. :-) //
- /////////////////////////////////////////////////////////////////////////////////////
- // Contre-indications: //
- // Si votre serveur est "lent" - met plus de quelques secondes a afficher //
- // les pages PHP - le script ne sert à rien, ne l'installer pas!! //
- /////////////////////////////////////////////////////////////////////////////////////
- // Tout commentaire/idée d'amélioration/optimisation sont les bienvenus !!!! //
- // Si vous utilisez ce script, prévenez moi :o) //
- /////////////////////////////////////////////////////////////////////////////////////
- // 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);
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement