Auteur: Daniel S.
Date: 28-01-2004 20:27
Ce script part du principe que les "bons" spiders respectent les normes en vigueur sur le web et évidemment lisent le fichier robot.txt lorsqu'ils indexent un site. L'expérience prouve que ceux qui ne le font pas, ou le font mais n'obéissent pas aux interdits, sont des aspirateurs de sites, des spiders de peu d'audience ou en tout cas de peu de technicité et des applications indésirables.
On va donc mettre dans notre fichier robots.txt l'interdiction de visiter la page nolink_trap.htm pour la bonne et simple raison qu'elle n'existe pas ainsi que l'interdiction pour nolink.htm qui, elle, existe.
- Avant toute chose, introduisez les lignes suivantes dans robots.txt
Disallow: /nolink.htm
Disallow: /nolink_trap.htm
enregistrez et transférez-le sans attendre sur votre site.
On va ensuite écrire dans la premiere ligne du texte visible de toutes les pages du site, ou tout au moins dans celles les plus visitées (index.html comprise) un lien non cliquable et invisible aux yeux des visiteurs mais pas à ceux des "mauvais spiders". Ce lien devra se trouver avant tout autre lien présent dans la page. Prenez un caractère quelconque pour votre lien mais pas une image 1x1 transparente, vous pourriez être déclassé ou exclu par certains spiders.
<a href="nolink.htm" style="color: black; text-decoration: none; background: #FFEBCD" onclick="return false;">?</a>
Ce lien mène vers la page nolink.htm où dans un dernier effort d'avertissement on aura eu soin de renseigner la balise meta robots
Un lien figurant dans cette page renvoit vers nolink_trap.htm qui n'existe pas.
<html>
<head>
<title>Nolink</title>
<meta name="robots" content="noindex, nofollow">
</head>
<body>
<p align="center"><strong><a href="nolink_trap.htm">Ne pas cliquer sur ce lien</a></strong></p>
<p align="center"> </p>
<p align="center"><a HREF="Javascript:history.go(-1)">Retour à la page précédente</a></p>
</body>
</html>
Par cette demande, notre spider sauvage va donc être redirigé par .htaccess grâce à la ligne suivante que vous y aurez ajoutée en fin de fichier.
RewriteRule ^nolink_trap.htm$ /cgi-bin/piege.pl [L]
L'adresse IP de l'intrus sera alors capturée par piege.pl qui va ouvrir le fichier .htaccess et l'y inscrire.
Fichier trap.pl CHMOD 755
#!/usr/bin/perl --
# Script provenant de http://www.toulouse-renaissance.net/c_outils/
# Adapté de l'original et des corrections de Key_Master
# http://www.webmasterworld.com
$htadir = $ENV{DOCUMENT_ROOT};
$htafile = "/\.htaccess";
# Initialisation : chemin de .htaccess
$htapath = "$htadir"."$htafile";
# Capture l'adresse IP de l'indésirable, la convertie en expression régulière (regex).
$remaddr = $ENV{REMOTE_ADDR};
$remaddr =~ s/\./\\\./gi;
# Capture le User-agent et l'heure locale
$usragnt = $ENV{HTTP_USER_AGENT};
$date = scalar localtime(time);
# Ouvre .htaccess en lecture/écriture.
# En bloque l'accès pour qu'il ne soit pas endommagé par d'autres applications.
# Lit le contenu de .htaccess et le mémorise.
open(HTACCESS,"+>>$htapath") || die $!;
flock(HTACCESS,2);
seek(HTACCESS,0,0);
@contents = <HTACCESS>;
# Vide le contenu d'.htaccess, écrit à la première ligne la nouvelle adresse IP à exclure.
# Re-écrit le contenu précédemment mémorisé.
truncate(HTACCESS,0);
print HTACCESS ("SetEnvIf Remote_Addr \^$remaddr\$ getout \# $date $usragnt\n");
print HTACCESS (@contents);
# Ferme .htaccess, le débloque pour d'autres requêtes.
close(HTACCESS);
# Ecrit et affiche une page HTML au visiteur.
print ("Content-type: text/html\n\n");
print ("<html><head><title>Fatal Error</title></head>\n");
print ("<body text=\"#000000\" bgcolor=\"#FFFFFF\">\n");
print ("<p align=\"center\"><u><font size=\"5\" color=\"#FF0000\"><strong>ACCES NON AUTORISE</strong></font></u></p>\n");
print ("<p><strong>Une routine automatique vous a interdit l'accès à ce site, peut-être parce que vous utilisez un aspirateur qui ralenti la visite aux autres internautes ou parce que votre navigateur est mal configuré.</strong></p>\n");
print ("<p><strong>Si vous pensez que ce blocage est injustifié contactez le webmaster d'un autre poste de travail.</strong></p>\n");
print ("</body></html>\n");
exit;
Dans .htaccess vous mettrez au tout début de fichier les lignes suivantes :
SetEnvIf Request_URI "^(/robots\.txt)$" allowsome
<Files *>
order deny,allow
deny from env=getout
allow from env=allowsome
</Files>
D'ici peu de temps votre fichier .htaccess pourra ressembler à ça :
SetEnvIf Remote_Addr ^217\.128\.115\.39$ getout # Sun Dec 29 19:43:40 2003 Microsoft URL Control - 5.01.4319
SetEnvIf Remote_Addr ^172\.180\.49\.156$ getout # Sun Dec 29 15:45:34 2003 Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
SetEnvIf Remote_Addr ^217\.128\.115\.30$ getout # Sat Dec 28 18:43:51 2003 Microsoft URL Control - 5.01.4319
# Begin Block bad-bots
SetEnvIf Request_URI "^(/robots\.txt)$" allowsome
<Files *>
order deny,allow
deny from env=getout
allow from env=allowsome
</Files>
Ce sont toutes les IP inscrites automatiquement dans .htaccess et qui ne pourront plus visiter votre site grâce à <deny,allow>.
N'oubliez pas cependant de supprimer quelques IP de temps en temps afin de ne pas pénaliser ceux qui n'ont pas d'adresses IP fixe.
- Vous veillerez particulièrement à la configuration de votre serveur afin d'adapter le script ci-dessus.
- Beaucoup de crawlers travaillant avec l'ancienne version de votre fichier robots.txt, vous attendrez 2 mois minimum avant de mettre ce script en fonction. En attendant, vous pouvez mettre un script mail,que vous pourrez laisser par la suite, dans le fichier piege.pl
$remaddr = $ENV{REMOTE_ADDR};
$host = $ENV{REMOTE_HOST};
$provenance = $ENV{'HTTP_REFERER'};
$lang = $ENV{'HTTP_ACCEPT_LANGUAGE'};
# Envoie d'un e-mail avec SendMail
open(MAIL, "|/usr/sbin/sendmail -t") || die "Content-type: text/text\n\nImpossible ouvrir /usr/sbin/sendmail!\n";
print MAIL "To: nom\@domaine\.com\n";
print MAIL "From: nom\@domaine\.com\n";
print MAIL "Subject: Un aspirateur a été bloqué sur le site XX\n";
print MAIL "L'adresse IP : \^$remaddr\$ a été bloquée le $date \n";
print MAIL "Navigateur utilisé : $usragnt \n";
print MAIL "Nom de domaine : $host \n";
print MAIL "Provenance : $provenance \n";
print MAIL "Langue : $lang \n";
close(MAIL);
L'application Sendmail vous enverra un message qui vous permettra de contrôler la régularité des intrusions et le fonctionnement partiel du script.
Une explication plus développée de ce script se trouve sur :
http://www.toulouse-renaissance.net/c_outils/c_anti_aspirateurs.htm
- Pour ceux qui ont un site en PHP voyez aussi ce très bon script d'Alain DEBUISSON qui se trouve à la suite de l'interdiction complémentaire par le nom du spider :
http://forum.amen.fr/read.php?f=6&i=185&t=185
ou
http://www.toulouse-renaissance.net/c_outils/c_interdire_aspirateurs.htm
|
|