/!\ aspirateur de site et anti référencement .

WRInaute passionné
Voila, si j'écris ce post si pour signaler une possible faille de sécurité dans les anti aspirateurs de site, faille qui aurai pour conséquence de vous faire bannir volontairement un bot d'un moteur de recherche et de vous faire couler au fond du classement.

le problème

Le bannissement d'un moteur de recherche par un anti aspirateur de site peut être involontaire (mauvais paramétrage d'un script par exemple) ou volontaire. En effet, un concurrent malhonnête pourrait volontairement vous envoyer des requêtes http avec pour ip source celle d'un moteur de recherche (c'est tout à fait possible, il existe des générateurs de paquets http qui font çà), ce qui aurait pour conséquence de bannir automatiquement le bot de votre site, ce qui ferait autant de pages indexés en moins. Quant à dire que c'est peu probable, vu la concurrence qu'il y a dans le milieu du référencement, je préfère prévenir que guérir ;).

la solution

Heureusement, il existe une solution simple. Elle consiste à définir une liste d'ips de confiance, incluant les ips des bots de recherche. Si l'ip de l'hote fait partie de la liste, on ne le banni pas sinon on le banni et on envoie un mail à l'administrateur.

Code:
Si (ip_appartient_a_liste_de_confiance())
    redirection_vers_l_index_du_site
sinon
    bannissement_par_htaccess
    mail_a_l_administrateur
    affichage_d_un_message
finSi

Remarque : pour ceux qui se dirait que les aspirateurs de site pourraient intégré une technologie qui falsifierai l'ip et la mettrai dans la liste des ips de confiance, dites vous bien que quand un logiciel fait une requête avec une ip qui n'est pas la sienne, la réponse est directement envoyé à l'ip falsifié ce qui n'a aucun n'intêrets pour le leecher.

Implémentation

L'implémentation se fait en plusieurs temps, d'abord on fait un fichier antiaspi.php (source plus bas) qu'on upload sur le serveur. Ensuite, on fait un rewriting sur ce fichier de ce type.

RewriteRule ^([0-9]+)anti\.html$ antiaspi.php [L,NC,NS]

Ce régle renvoie tous les fichiers de la forme [chiffre]anti.html vers antiaspi.php, par exemple 75864anti.html ou 6anti.html.

Ensuite, on "parsème le site web",de liens aléatoires ayant la forme définie précédemment et non visible par l'utilisateur. (il vaut mieux éviter les liens vides car les aspirateurs les détectent et ne les suivent pas)

fichier antiaspi.php
Code:
<?
 // phplicense
 // auteur : mumuri
 // site : http://topflood.com

 // pour une ip en 216.239.33.xxx, mettre 216.239.33. , attention à ne pas oublier le . final
 // pour 216.239.xxx.xxx mettre   216.239.

 // http://www.iplists.com/google.txt
 // http://www.iplists.com/inktomi.txt

 $ip = $_SERVER["REMOTE_ADDR"];  // récupére l'ip

 // Remarque : pour faire des tests, vous pouvez forcer l'ip
 // $ip = "66.249.239.23";     //  bot
 // $ip = "23.66.249.239";     // ip standard
 $ipsautorisees= array(
                '216.239.','66.249.','209.185.','64.68.','64.233.','216.33.',  // google bot

                '141.185.','169.207.','199.177.','202.160.','202.165.','202.212.5.','202.46.19.93','203.123.188.', '203.255.234.', // yahoo
                '206.190.43.','207.126.239.','209.1.12.','209.1.13.','209.131.','209.191.','209.185.', '209.1.32.','209.191.',
                '209.67.206.','209.73.176.', '211.14.8.240','211.169.241.21','213.216.143.','216.109.','216.136.233.164','216.145.58.219',
                '216.155.', '216.198.200.123' ,'216.239.193.','216.32.237.','62.172.199.','62.27.59.245','63.163.102.182', '64.157.137.',
                '64.157.138.','64.75.36.','66.163.170.' ,'66.163.174.65','66.196.101','66.196.65' ,'66.196.67.','66.196.','66.218.65.52',
                '66.228.', '66.94.','68.142.', '72.30.101.','72.30.102.', '72.30.103.','72.30.104.','72.30.107.','72.30.110.','72.30.111.',
                '72.30.128.', '72.30.129.','72.30.131.','72.30.132.','72.30.133.','72.30.134','72.30.135.','72.30.',

                '207.46.98.', '65.54.188.' ,'207.68.146.'  // msn bot
                );

if(is_in_liste($ip)  )
{
// ip de confiance
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: http://votresite.com");
  exit;
} else
{
// banissement

    // --------  bannir ici  : script de Baltyre ------------
      $htaccess="\nDeny from ".$ip;
      $fp = fopen(".htaccess","a");
      if (flock($fp, LOCK_EX)) {
           fputs($fp,$htaccess);
         flock($fp, LOCK_UN);
         }
      fclose($fp);
    // ---------------------------------------------

    // --------------- mailer -------------------

    $Host = gethostbyaddr( $ip );                // Retourne le Host
    $Referer = getenv("HTTP_REFERER");              // Retourne le Referer
    $Date = date("F j, Y, g:i:s");                // Date du jour
    $Client = getenv("HTTP_USER_AGENT");
    $site =    getenv("HTTP_HOST");          // récupére le nom du site , si vous en avez plusieurs

    $message  = "<b>Banissement d'une ip</b> \n";
    $message .= "------------------- \n";
    $message .= " Site : $site \n\n";
    $message .= "<b> Infos sur le banni :</b> \n";
    $message .= " Ip : $ip \n";
    $message .= " Host : $Host \n";
    $message .= " Client : $Client \n";
    $message .= " Date : $Date \n";
    $message .= " Référant : $Referer  \n";

// envoie d'un mail au responsable : utile si par hasard un robot est passé à travers votre filtre
 mail ("votreemail@votredomaine.com", "Alerte Ban: $ip - ".$Date, $message  , "From: banissement@$site");
    // ---------------------------------------------

     // --------------- affichage  -------------------
 // on averti le banni ...
    echo "<html><head><title>Bannissement</title></head><body><pre>";
    echo "<h1>Banissement</h1>\n";

    echo "L'utilisation d'aspirateur de site est proscrite sur ce site . Vous avez donc été banni\n";
    // on lui fait un peu peur ;)
    echo "Les informations suivantes ont été loggué et pourront faire l'objet d'une poursuite judiciaire.\n\n";
    echo $message;
    echo "\n\n";

    // le truc à la con ... ;)
    echo "Apprenez que pour flooder un site, il y a des techniques :<a href=http://topflood.free.fr/zine/base-Techniques-de-flood.php>techniques de flood</a>\n";

    // dés fois que y'en qui s'amuse à afficher la source de certains sites et qu'il teste l'url
    echo "Si vous pensez que c'est une erreur, veuillez en avertir le webmaster à blabla@site.com \n";

    echo "</pre><a href=ban.php>ss</a></body></html>";
    // ---------------------------------------------
}

function is_in_liste($ip)
{ global $ipsautorisees;
 $trouve= false;

 $taille = count($ipsautorisees);
 $i=0;
  while($i<$taille && !$trouve )
    {
      $pos = strpos ($ip,$ipsautorisees[$i]);
      if($pos === 0 )
      {
        $trouve= true;
       }
       $i++;
    }
   return  $trouve;
}
?>

Remarque

Surveillez bien les ips envoyés dans les même de bannissement des fois qu'il manque des ips de bots (et posté les ici tant qu'on y est, je pense que j'en ai oublié pour msnbot)

Le problème est d'autant plus vicieux qu'on ne peux pas identifier le concurrent (dans le cas ou il spoofe son ip).
 
WRInaute passionné
là je vise la news sur la page principale :lol:
avec pour titre "une nouvelle technique d'anti référencement" 8)
 
WRInaute accro
moi j'ai fait un truc moins compliqué que toi :
j'ai d'une part un script qui détecte si l'agent utilisateur est un aspirateur (genre HTTrack), si c'est le cas c'est automatiquement redirigé vers une page du genre "truc.php?page=1" qui ne contient qu'un lien vers "$page++"
>> ça ne bouffe pas trop de bande passante et en plus ça fait bien chier le méchant copieur qui doit patienter des heures pour télécharger mon site ^^ >> et en plus il peut même pas le télécharger, puisqu'il est redirigé vers la page dont je parle au dessus :)

deuxiemement, j'ai fait exprès un lien "cassé". Ce lien est "caché" donc c'est quasiment impossible qu'un utilisateur clique dessus. Je loggue toutes les erreurs 404, avec IP (fuck off la cnil) agents_utilisateurs, etc...
comme ça apres je fais le tri à la fois manuellement, mais aussi si une même IP fait la même erreur dans un court laps de temps et que ce n'est pas un robot "OK" (oui car j'ai une petite liste pour vérifier, au cas où) et bien je bloque.


mais c'est un bon script ton truc, je recommande :)
 
WRInaute passionné
et qu'es ce que tu fais si un gars te balance des paquets avec pour ip sources celui des bots de google et pour useragent "httrack" ? ;).

un générateur de chaine numérique aléatoire pour ceux qui ont la flemme de chercher ;).
Code:
 $rand_str="";
    for($i = 0; $i < rand(1,9); $i++) // taille aléatoire en plus ...
    {
        $rand_str .=rand(0, 255);
    }

---------
chaine aléatoire pour un phpBB
dans un fichier php (genre viewforum.php)
Code:
 $rand_str="";
    for($i = 0; $i < rand(1,9); $i++) // taille aléatoire en plus ...
    {
        $rand_str .=rand(0, 255);
    }
 $template->assign_vars(array('random' => '$rand_str '));

et dans le template
Code:
 {random}


merci pour les 11 recos au passage ;)
 
WRInaute accro
Est-ce que beaucoup d'entre vous utilise un anti-apsirateur de site ?

Est-ce vraiment utile ?

Le gars qui veux pomper le site....il n'a cas le faire...
Malheur à lui si vous vous en apercevez...
 
WRInaute passionné
thierry8 a dit:
Est-ce que beaucoup d'entre vous utilise un anti-apsirateur de site ?

Est-ce vraiment utile ?

Le gars qui veux pomper le site....il n'a cas le faire...
Malheur à lui si vous vous en apercevez...

disons qu'aprés c'est une question de quota de traffic suivant ton hébergement. et je pense que les gros sites doivent tous plus ou moin en utilisé (bien que n'ayant aucune preuve).

faut aussi se dire qu'un administrateur qui utilise des logiciels genre snort et qui connaissent pas bien les ips de google et compagnie pourraient les bannir à tort en voyant les logs de leurs firewalls.
 
WRInaute accro
Mumuri a dit:
et qu'es ce que tu fais si un gars te balance des paquets avec pour ip sources celui des bots de google et pour useragent "httrack" ? ;).
tu aurais dû remplacer le ";)" par "
bricedenice.gif
", méchant ^^

Est-ce vraiment utile ?
ça dépend du site : si c'est un petit site perso ça devrait faire plaisir qu'on te copie (lol), mais quand c'est un site que tu t'es cassé le c** à réaliser, aux fruits d'années de recherches, ça fait chier de voir quelqu'un prend même pas la peine de consulter le site en ligne et le télécharge directement...
d'autant plus si c'est un plagiaire qui fait ça pour remettre ça en ligne à son compte....
 
WRInaute accro
Ni a t-il justement pas un moyen de connaître ce genre de plagiat ?

Mais ne pense-tu pas que si ton site plait et que si quelqu'un souhaite te le pomper il y arrivera de toute manière ?



Encore une chose par rapport aux ips et donc l'idée de Murmuri.
Si celui qui visite ton site a l'ip d'un bot, il pourra te pomper sans
problème tes pages du fait qu'il sera considéré comme un bot ?
(ca va dans les deux sens...si quelqu'un peut prendre une ip d'un bot pour
influencer ton référencement, quelqu'un pourra utiliser une ip pour pomper ton site)
 
WRInaute passionné
thierry8 a dit:
Encore une chose par rapport aux ips et donc l'idée de Murmuri.
Si celui qui visite ton site a l'ip d'un bot, il pourra te pomper sans
problème tes pages du fait qu'il sera considéré comme un bot ?
(ca va dans les deux sens...si quelqu'un peut prendre une ip d'un bot pour
influencer ton référencement, quelqu'un pourra utiliser une ip pour pomper ton site)

j'avais mis une petite remarque pour çà ;)
Remarque : pour ceux qui se dirait que les aspirateurs de site pourraient intégré une technologie qui falsifierai l'ip et la mettrai dans la liste des ips de confiance, dites vous bien que quand un logiciel fait une requête avec une ip qui n'est pas la sienne, la réponse est directement envoyé à l'ip falsifié ce qui n'a aucun n'intêrets pour le leecher.

mort de rire l'icone "brice de nice" tom html ;)
 
WRInaute passionné
Voila toute l'explication

http-spoofe.gif


Tout d'abord,

- le concurrent malhonnéte envoie la requete avec l'ip de googlebot à ton site
- ton site répond à googlebot en lui renvoyant la page (le serveur de ton site renvoie la requete à l ip source contenu dans le paquet)
- googlebot renvoie un paquet a ton site pour dire qu'il n'a pas sollicité cette page.

donc au final le leecher ou le concurrent n'a rien reçu.

PS : ne fais pas attention au légende (syn spoof, syn ack et rst, c'est liée au protocole tcp et non au protocole http, j'ai pas retrouvé les archives de mes fichiers et j'ai du expliquer sur l'image que j'avais )
 
WRInaute impliqué
absoluteweb a dit:
Le principe est d'interdire la page piégée dans robots.txt et dans la page d'accès à la page piégée (noindex, nofollow). Les bons moteurs ne suivront pas ce lien et ne seront donc pas piégés, les mauvais moteurs et les aspirateurs seront bannis.
C'est tres facile à contourner, car je sais que certains aspirateurs permettent de respecter le fichier robots.txt
 
Nouveau WRInaute
Bonjour.

Je suis le webmaster de Toulouse-Renaissance qu’a cité " absoluteweb ".
Comme rien n’est statique en informatique, et afin d’améliorer mon script, je suis intéressé de connaître les aspirateurs qui respectent le protocole robots.txt car, pour ma part, je n’en connais pas.
 
WRInaute occasionnel
Maleville a dit:
Je suis le webmaster de Toulouse-Renaissance qu’a cité " absoluteweb ".
Bonjour,
J'utilise ton script depuis 2 semaines environ et j'en suis satisfait. J'ai juste rencontré un "gros" problème avec les commentaires que tu ajoutes à la fin des lignes d'IP pour indiquer la date. Ma version d'Apache génère des Warning à ce sujet (il faut mettre des " autour des commentaires) et compte tenu du nombre de visites et d'aspirateurs bannis, mon error log apache s'est saturé ! J'ai passé une heure avant de comprendre le problème.

Le script me bloque 3-5 aspirateurs par jour, ce qui me semble assez conséquent. s'agit-il forcement "d'aspirateurs", au sens robots qui visitent toute les pages de mon site ?

Nicolas.
 
Nouveau WRInaute
Pas forcément. L’expérience montre que ceux qui se retrouvent souvent bloqués (30% des visiteurs)sont les utilisateurs de Firefox qui fréquemment désactivent, dans un excès de prudence, JavaScript et peuvent suivrent ainsi le lien interdit. Ce qui donne, par exemple :

Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1
Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.7.12) Gecko/20050920 Firefox/1.0.7
Etc.
Car je ne vois pas quelle autre fonction courante dans Firefox permet d’accéder au lien caché. Mais peut-être, existe t’elle.
Les possesseurs d’Internet Explorer, dans la grande majorité, ne désactivent pas JavaScript.
Il serait peut-être utile alors d’introduire la balise "meta" suivante :

<NOSCRIPT>
<meta http-equiv="refresh" content="0;URL=http://www.votre-domaine.com/pas-de-javascript.html">
</NOSCRIPT>

qui redirigerait les visiteurs n’ayant pas JavaScript activé sur une page d’information. Mais cela ne va t’il pas influencer Google qui n’aime pas du tout la balise "meta refresh 0" ? A y réfléchir.

En revanche, ceux dont l’URL suivit est :
^/_vti_bin/owssvr.dll?UL=1&ACT=4&BUILD=2614&STRMVER=4&CAPREQ=0
semblerait avoir la barre de discussion d’Internet Explorer ouverte. C’est ce qui ressort des forums anglo-saxons.

Puisqu’on en est à parler du blocage automatique par IP, il peut être intéressant pour toi d’employer un automatisme pour « nettoyer » le fichier .htaccess car le faire manuellement est assez fastidieux.
Pour cela j’ai fait un petit script qui observe à intervalle régulier le fichier .htaccess pour en vérifier la présence, vérifier s’il n’a pas été endommagé et le remplacer lorsqu’il devient trop important par l’ajout d’IP. Pour ceux qui sont sur un serveur mutualisé, cette simulation de tâche CRON leur sera très utile d’autant que ce script peut servir à toute autre tâche programmée. Je ne donnerai pas ici le lien direct qui renvoie au script mais une recherche sur mon site avec le mot clef "CRON" y mènera.

En échange de bon procédé, et pour que d’autres ne tombent pas dans le piège, il me serait utile de connaître le détail de ton problème rencontré avec la ligne de remarque (Nom de l’hébergeur, type de serveur -mutualisé-privé, version Apache, syntaxe exacte d’une ligne corrigée avec les ""etc.)
 
WRInaute occasionnel
Maleville a dit:
En échange de bon procédé, et pour que d’autres ne tombent pas dans le piège, il me serait utile de connaître le détail de ton problème rencontré avec la ligne de remarque (Nom de l’hébergeur, type de serveur -mutualisé-privé, version Apache, syntaxe exacte d’une ligne corrigée avec les ""etc.)
Serveur dédié, Apache 1.3.34

Lignes posant problème:
SetEnvIf Remote_Addr ^218\.223\.149\.144$ ban # 04-04-2006 (Tue) 01:36:12

Lignes ne posant plus problème:
SetEnvIf Remote_Addr ^218\.223\.149\.144$ ban "# 04-04-2006 (Tue) 01:36:12"

Nicolas.
 
Discussions similaires
Haut