Saturday, September 16, 2006

Un moyen élégant de piéger les robots indélicats

Salut Spitfire, forum.phpbb-fr.com! Merci pour la traduction!

Une trés simple trappe à mauvais robots qui piège à la fois les robots qui ignorent robots.txt et aux aspirateurs de site qui ne lisent pas robots.txt.
Il existe de nombreuses versions de cette trappe. celle-ci n'est pas particulièrement sophistiquée, mais elle marche.
Utilisez-la avec prudence pour être certain de ne pas éjecter des visiteurs souhaités, ou, pire, de ne pas planter votre site.
Si vous ne comprenez pas le code ci-dessous, ne l'utilisez pas.

Requis:

  1. Hébergement acceptant le PHP
  2. Capacité d'incorporer robots.txt
  3. Capacité d'incorporer .htaccess sur votre site
  4. Capacité d'envoyer des emails via PHP
  5. Stamina to monitor your logs and .htaccess file
Les fichiers suivants sont à créer ou éditer et à uploader sur la racine de votre site:

  1. robots.txt
  2. .htaccess
  3. badbots.php
  4. bad-bots-script.php
  5. index.php (ou index.html)
1. Ajouter les lignes suivantes à votre fichiers robots.txt

User-agent: *
Disallow: /badbots.php

2. Créez le fichier suivant: badbots.php

<?php
header("Content-type: text/html; charset=utf-8");
echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ';
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Bad-Bots and Rippers Denied</title>
<meta name="author" content="seven-3-five.blogspot.com 2006-09-04" />
</head>
<body>
<p>whatever message you would like the scum to see</p>
<?php
include 'bad-bot-script.php';
?>
</body>
</html>

3. Créez le fichier suivant: bad-bot-script.php

<?php
/* author: seven-3-five, 2006-09-04, seven-3-five.blogspot.com
* Merci Spitfire pour la tranduction
à français
*Ce script est le plat de résistance de ce piège à robots
* 1. Il vous envoie un email quand la page /badbots.php est visité.
* L'email contient diverses infos sur le visiteur
* 2. Il ajoute la directive
* 'deny from $ip' ($ip étant l'adresse ip du visiteur)
* à la fin de votre fichier .htaccess */

/* VARIABLES SERVEUR UTILISEES
* POUR IDENTIFIER LE ROBOT ATTAQUANT */

$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
$request = $_SERVER['REQUEST_URI'];
$referer = $_SERVER['HTTP_REFERER'];

// CONSTRUIT LE MESSAGE DE L'EMAIL

$subject = 'bad-bots';
$email = 'your_email@your_site.com';
$to = $email;
$message ='ip: ' . $ip . "\r\n" .
'user-agent string: ' . $agent . "\r\n" .
'requested url: ' . $request . "\r\n" .
'referer: ' . $referer . "\r\n";
// referer souvent une page blanche

$message = wordwrap($message, 70);
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer PHP/' . phpversion();


// ENVOIE LE MESSAGE


mail($to, $subject, $message, $headers);

/* AJOUTE 'deny from $ip'
* A LA FIN DE VOTRE FICJIER .htaccess */

$text = 'deny from ' . $ip . "\n";
$file = '.htaccess';
add_badbot($text, $file);

/* Function
* add_bad_bot($text, $file_name): appends $text to $file_name
* Vérifiez que PHP a la permission d'écrire dans $file_name */

function add_badbot($text, $file_name)
{
$handle = fopen($file_name, 'a');
fwrite($handle, $text);
fclose($handle);
}
?>

4. Ajoutez le code suivant, après le tag <body> de votre page d'index, index.php ou index.html:

<p style="color:white;background:white;height:0;visibility:collapse;">
<a href="badbots.php" >.</a>
</p>


5. Testez-le complètement



Que se passera-t-il?

Un vilain robot parcourt le fichier robots.txt et ignore les directives ou utilise cette information. Si le robot suit le lien vers /badbots.php, alors le script bad-bot-script.php se déclenche, écrit l'adresse IP du visiteur dans votre fichier .htaccess et vous signale le fait par email. Le vilain robot ne pourra plus parcourir le site.

Autre possibilité: un aspirateur de sites visite votre site et commence par télécharger tout ce qu'il trouve. Il tombera rapidement sur le lien /badbots.php de votre page d'index. Une fois visité ce lien, il ne pourra plus rien téklécharger d'autre, comme dans l'exemple précédent.

Incidents possibles, dépendant de votre serveur:

  • Vous aurez peut-être à créer un .htaccess vide si votre site n'en a pas déja un
  • Vous aurez peut-être à paramétrer les permissions de .htaccess afin que bad-bot-script.php puisse y écrire. si oui, essayez:
    touch .htaccess
    chgrp www .htaccess
    chmod 664 .htaccess
  • Votre serveur de mails peut ne pas accepter les mails générés par PHP
  • Il a peut-être besoin d'être configuré
  • Si vous avez éjecté tout le mode, essayez d'ajouter les lignes suivantes au début de votre vfichier .htaccess

    order allow,deny
    allow from all

    bien qu'elles devraient être présentes dans le fichier httpd.conf de tout serveur apache public et neseront sans doute pas nécessaires ici (du moins je pense)
  • Vous vous êtes éjecté vous même: cela arrivera chaque fois que vous testerez le système, aussi soyez préparé à enlever votre adresse IP de votre fichier .htaccess
  • Vos tests ajoutent votre adresse IP au fichier .htaccess, mais vous n'êtes pas éjecté: votre serveur n'accepte sans doute pas l'utilisation des fichiers .htaccess

No comments: