Advertisement
ugo22g

aspi

Mar 2nd, 2012
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.45 KB | None | 0 0
  1. <?php
  2. /////////////////////////////////////////////////////////////////////////////////////
  3. // Script bloquant les aspirateurs de site - v 0.2 - 15/01/2003                    //
  4. // Info: Renardrouge@rocketmail.com        - http://www.1001bd.com                 //
  5. /////////////////////////////////////////////////////////////////////////////////////
  6. // Création: Janvier 2003                                                          //
  7. //       Ce script a été créer suite à une conversation stérile avec le            //
  8. //       developpeur d'un aspirateur de site. Il refusait de reconnaitre les       //
  9. //       dégats que peut entrainer son soft quand il est utilisé à tort            //
  10. //       et à travers, ou contre l'avis des webmasters, en passant outre les       //
  11. //       directives du robots.txt                                                  //
  12. /////////////////////////////////////////////////////////////////////////////////////
  13. // En pratique:                                                                    //
  14. //       Les aspirateurs de site demandent un très grand nombre de pages dans des  //
  15. //       intervalles de temps très court provoquant un surcharge du serveur web,   //
  16. //       un gène des utilisateurs légitimes et une consommation de bande passante  //
  17. //       importante.                                                               //
  18. //       Ce script consomme lui aussi des ressources mais permet d'éviter le pic   //
  19. //       de ressources généré par un aspirateur. Il comporte 3 requetes SQL et une //
  20. //       trentaine de lignes de code.                                              //
  21. /////////////////////////////////////////////////////////////////////////////////////
  22. // Principe de fonctionnement:                                                     //
  23. //       Le nombre de page demandées par IP et par minute est enregistrés. Si      //
  24. //       une IP demande un nombre de pages php trop important, l'IP est interdite  //
  25. //       et le script retourne le message "IP interdite pour abus"                 //
  26. //                                                                                 //
  27. //       Il n'est pas basé sur les user agent car les aspirateurs permettent de    //
  28. //       les modifer sans difficulté.                                              //
  29. //                                                                                 //
  30. //       Un htaccess bloquant les agents connus ne peut qu'aider.                  //
  31. //                                                                                 //
  32. //       Il ne bloque pas les robots comme Googlebot ou Scooter, car les moteurs   //
  33. //       de recherche étalent les acès à une site dans le temps.                   //
  34. //                                                                                 //
  35. //       Un aspirateur va commencer par aspirer la 1ère page de votre site, puis   //
  36. //       de plus en plus au fur et à mesure qu'il découvrira des nouvelles url.    //
  37. //       Il demandera à partir de ce moment plusieurs pages simultanément.         //
  38. //       Au moment ou le script l'aura repéré, l'aspirateur ne trouvera plus de    //
  39. //       nouvelles url. Il terminera l'aspiration des URL qu'il aura codécouverte  //
  40. //       mais aspirera des pages avec le message d'erreur. L'aspiration se         //
  41. //       poursuivra donc quelques minutes encore.                                  //
  42. //                                                                                 //
  43. //       Au final l'utilisateur de l'aspirateur n'aura que les 1ères page du site  //
  44. //       et très rapidement tombera sur des pages blanches                         //
  45. /////////////////////////////////////////////////////////////////////////////////////
  46. // Résultats:                                                                      //
  47. //       Ce script a bloqué les aspirations réalisées avec                         //
  48. //       HTTrack, Memoweb, Offline explorer, Teleport                              //
  49. //       lors de tests menés avec les participants de la liste bar d'ovh           //
  50. //       que je remercie au passage. :-)                                           //
  51. /////////////////////////////////////////////////////////////////////////////////////
  52. // Contre-indications:                                                             //
  53. //       Si votre serveur est "lent" - met plus de quelques secondes a afficher    //
  54. //       les pages PHP - le script ne sert à rien, ne l'installer pas!!            //
  55. /////////////////////////////////////////////////////////////////////////////////////
  56. // Tout commentaire/idée d'amélioration/optimisation sont les bienvenus !!!!       //
  57. // Si vous utilisez ce script, prévenez moi :o)                                    //
  58. /////////////////////////////////////////////////////////////////////////////////////
  59.  
  60. // Installation:
  61.  
  62. // 1 - Renseigner les paramètres de votre base de données en créeant le fichier config_base.php
  63. //     ou décommenter les 4 lignes suivantes et supprimer la ligne: 82 - require("config_base.php");
  64.  
  65. //$dbhost = "localhost";
  66. //$dbuname = "root";
  67. //$dbpass = "";
  68. //$dbname = "base1";
  69.  
  70. // 2 - Créer les tables sql 'ip' et 'ip_bl'. Le code sql se trouve dans le fichier trace_ip.sql
  71.  
  72. // 3 - Configurer la ligne 129 - mail(...) avec vos paramètres
  73. //     Cette ligne envoie un mail en cas de bloquage d'une IP
  74. //     avec les paramètres de la connexion
  75.  
  76. // 4 - Installer ce script au début de toutes vos pages php
  77. //     require ("trace_ip.php");
  78.  
  79. // 5 - Effectuer éventuellement des tests sur une partie de VOTRE site pour
  80. //     affiner la limite de 25 pages/minute (ligne 120).
  81.  
  82. require("config_base.php");
  83.  
  84. $Vcpt  = 0;
  85. $Vdate = date("Y/m/d H:i");
  86. $Vua   = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
  87. $Vip   = $HTTP_SERVER_VARS["REMOTE_ADDR"];
  88.  
  89. $dbic = mysql_connect($dbhost,$dbuname,$dbpass);
  90. mysql_select_db($dbname);
  91.  
  92. if ($dbic <> 0)
  93. {
  94.     // clean up old IP
  95.     mysql_query("DELETE FROM ip WHERE date <> '$Vdate'");
  96.  
  97.     // chercher si le visiteur est interdit
  98.     $res = mysql_query("SELECT ip FROM ip_bl WHERE ip='$Vip'");
  99.     while(list($ip) = mysql_fetch_row($res))
  100.     {
  101.         // Visiteur trouvé dans les IP interdites
  102.             mysql_free_result($res);       
  103.             mysql_close($dbic);
  104.         die("IP interdite pour abus.");
  105.     }
  106.     mysql_free_result($res);
  107.  
  108.     // chercher si le visiteur est déjà passé
  109.     $res = mysql_query("SELECT id, ip, date, cpt FROM ip WHERE ip='$Vip'");
  110.     while(list($id, $ip, $date, $cpt) = mysql_fetch_row($res)) $Vcpt = $cpt;
  111.     mysql_free_result($res);
  112.  
  113.     if ($Vcpt == 0) mysql_query("INSERT into ip (id, ua, ip, date, cpt) values ('', '$Vua', '$Vip', '$Vdate', '1')");
  114.     else
  115.     {
  116.         // Visiteur ayant déjà chargé des pages dans la même minute ==> +1 sur le compteur
  117.         mysql_query("UPDATE ip SET cpt=cpt+1 WHERE ip='$Vip'");
  118.    
  119.         // si limite atteinte (25 pages php/min) ajouter dans la table des ip interdites.
  120.         if ($Vcpt >= 25 )
  121.         {
  122.             mysql_query("INSERT into ip_bl (id, ua, ip, date, cpt) values ('', '$Vua', '$Vip', '$Vdate', '$Vcpt')");
  123.  
  124.             $msg = "HTTP_SERVER_VARS:\n" ;
  125.                 while (list ($key, $val) = each ($HTTP_SERVER_VARS)) $msg .= "$key => $val\n";
  126.                 $msg = addslashes($msg);
  127.                 eval("\$msg = \"$msg\";");
  128.                 $msg = stripslashes($msg);
  129.                 mail ("votre_mail@votre_domaine.tld", "[IP Interdite] $Vip - $Vdate", $msg, "From: banmaster@votre_domaine.tdl");
  130.         }
  131.     }
  132.     mysql_close($dbic);
  133. }
  134. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement