AccueilFAQStatistiquesDiversContact

Anti-spam : comment plomber les spambots

Ils sont bêtes et méchants, ils ont faim et adorent dévorer les pages HTML remplies d'adresses emails: faisons-leur plaisir et donnons-leur ce qu'ils aiment.

Introduction :

Les spambots sont utilisés par les spammeurs pour voler vos adresses emails. Ils existent sous toutes les formes possibles: scripts, programmes avec interface graphique ou simple ligne de commande. Beaucoup utilisent les moteurs de recherche pour récupérer des pages HTML, en extraire les emails puis suivre les liens vers d'autres pages etc, pour constituer de grosses bases de données d'emails pour mieux vous spammer.
Bien que certains soient plus sophistiqués que d'autres pour éviter les pièges, ils ont tout de même un point commun qui ne joue pas en leur faveur: ce sont des programmes. On peut donc les piéger sans trop de difficultés, tout en prenant soin quand même de ne pas trop les prendre pour des idiots.

Le script Perl ci-dessous effectue cette tâche avec juste une trentaine de lignes, utilisable sur tout serveur Apache ayant le module mod_rewrite activé et, surtout, le fait en toute "transparence". L'un des avantages de mod_rewrite est que si vous ne possédez pas de serveurs dédié ou mutualisé mais un simple hébergement avec CGI, à partir du moment où votre hébergeur a activé ce module vous pourrez utiliser ce script sans devoir modifier la configuration de votre vhost mais tout simplement en rajoutant quelques lignes dans un fichier .htaccess à la racine de votre répertoire. D'autres modules peuvent être utilisés notamment l'excellent mod_security mais celui-ci n'est généralement jamais installé sur un serveur par défaut et la configuration des dernières versions (2.xx) n'est pas vraiment à la portée de tous.

Fonctionnement :

Le script fonctionne de la sorte :

  • le but est de forcer le spambot à appeler des pages HTML qui n'existent pas. Ces pages ont une extension différente de toutes les autres pages du site: on va donc choisir *.htm (la plupart des sites utilisant *.html). Il est impératif qu'aucune page de votre site n'utilise cette extension. Si c'était le cas, vous pouvez en choisir une autre en modifiant les lignes concernant mod_rewrite et la variable $extension du script.

  • le nom de ces pages sera toujours différent et créé aléatoirement par le script.

  • à chaque fois qu'une de ces pages sera appelée, le spambot sera renvoyé sur le script Perl en utilisant mod_rewrite via une simple instruction dans un fichier .htaccess placé à la racine de votre répertoire HTTP ou dans la configuration de votre vhost.

  • il n'est pas nécessaire de renommer le script Perl, puisque le spambot ne connaitra jamais son nom (en fait il ne saura même pas qu'il y a un script derrière tout ça !). C'est une des particularités intéressantes de la redirection utilisée, Apache retournant bien un code HTTP 200 malgré que les pages appelées soient inexistantes.

  • chaque page appelée va générer un nombres X de fausses adresses emails et Y de fausses pages .htm que le robot se fera un plaisir de suivre pour tomber à nouveau sur le script sans le savoir.

  • pour éviter une boucle sans fin, ou la méfiance de certains spambots, on peut configurer le script pour qu'il arrête de créer des fausses pages après un certain nombre de requêtes provenant du même spambot.

  • par précaution, si quelqu'un tombait vraiment par hasard sur le script (en tapant index.htm au lieu de index.html par exemple), une simple page d'erreur lui sera retournée car les faux liens et emails seront masqués dans des balises <DIV> rendues invisibles à tout navigateur par l'instruction CSS 'display:none'.

  • pour attirer le spambot dans le piège, il suffit d'inclure un ou plusieurs liens dans quelques pages de votre site renvoyant vers des pages .htm qui n'existent pas. Ces liens doivent eux-aussi être dissimulés dans des balises identiques afin qu'aucun utilisateur ne clique dessus par erreur. Vous pouvez voir un tel lien en affichant le code HTML de cette page (tout en bas)

  • pour éviter les crawlers (googlebot, yahoo slurp...) on rajoute juste dans la page créée des meta-tags leur indiquant de ne pas suivre les liens
  • Avant toute chose, voici un aperçu du résultat: [test normal] - [test de débogage (emails/liens visibles)]

    Configuration :

    En utilisant mod_rewrite vous disposez de 2 possibilités: inclure les instructions dans le vhost de votre site (serveurs dédiés ou mutualisés) ou un fichier .htaccess (simple hébergement supportant CGI).

    Exemple de configuration #1: fichier de configuration Apache (les 2 lignes à rajouter sont en rouge) :

      <VirtualHost xxx.xxx.xxx.xxx:80>
        DocumentRoot /home/www/domaine.com/httpd
        ServerAlias  domaine.com www.domaine.com
        ServerName domaine.com
        <Directory /home/www/domaine.com/httpd>
          Options -Indexes +Includes
          ...
    
          # redirection pour l'anti-spambot eatme.pl:
          RewriteEngine on
          RewriteRule \.htm$ /cgi-bin/eatme.pl
    
        </Directory>
        ...
      </VirtualHost>
    
    Redémarrez Apache après la modification.

    Exemple de configuration #2 fichier .htaccess :

    Créez un fichier .htaccess à la racine de votre site WWW afin que tous les sous-répertoires soient affectés par la redirection, par exemple :

     home
     |--www
       |--.htaccess
       |--httpd
       |--cgi-bin
    
    Ajoutez au fichier .htaccess les deux lignes suivantes.

      RewriteEngine on
      RewriteRule \.htm$ /cgi-bin/eatme.pl
    

    Ajout des faux liens :

    Sur la page index de votre site, créez au moins un faux lien redirigeant vers une page .htm qui n'existe pas en le cachant dans des <DIV> invisibles. Exemple :

      <div style="display:none;">
       <a href="nimportequoi.htm">cliquez ici</a>
      </div>
    
    Il ne reste plus qu'à copier le fichier eatme.pl dans votre répertoire /cgi-bin.

    Le script :

    
    #!/usr/bin/perl
    
    ######################################################################
    #
    # [Script]: eatme.pl
    #
    # [Version]: v0.10  - 05-07-2007
    #
    # [Auteur]: Jerome Bruandet
    #
    # [Description]: script perl permettant de donner de fausses adresses
    # emails aux spambots. Cree aussi de nouvelles pages aux noms aleatoires
    # qui elles-mêmes renvoient sur de nouvelles listes de faux emails.
    #
    # [Nécessite]: serveur apache + perl + mod_rewrite (ou mod_security)
    #
    # [Installation]: cf http://spamcleaner.org/fr/misc/eatme.html
    #
    ######################################################################
    
    #=================== DEBUT DE LA CONFIGURATION ======================#
    
    # les lettres de l'alphabet qui serviront a créer de faux email.
    @alphabet=('a','b','c','d','e','f','g','h','i','j','l','m',
               'n','o','p','r','s','t','u','v');
    
    # extensions utilisees pour les faux emails:
    @tld=('.net','.com','.org','.fr','.de','.eu');
    
    # extension des fausses page HTML. Par defaut '.htm'
    # si vous modifiez l'extension, pensez aussi a modifier la regle
    # de redirection de mod_rewrite:
    $extension= ".htm";
    
    # nombre maxi de caracteres a generer pour le nom et le domaine
    # des email:
    $max_car=13;
    
    # nombre maxi d'emails a generer (evitez de mettre une valeur
    # superieure à 200 pour ne pas trop charger la page et rendre
    # mefiants les spambots):
    $max_emails=150;
    
    # nombre maxi de liens renvoyant sur d'autres pages d'emails:
    $max_liens=8;
    
    # nombre de pages a generer: apres $max_pages, le script arretera
    # de creer des liens afin d'eviter une boucle sans fin et une
    # surcharge du serveur (le spambot pourrait continuer a relever
    # des emails a l'infini...). La valeur doit etre inferieure à 100.
    $max_pages=10;
    
    # message a afficher pour les utilisateurs qui tomberaient par erreur
    # sur la page:
    $message_404="Erreur: la page demand&eacute;e n'existe pas!";
    
    # pour debogage:
    # 0= masque les emails et les liens dans des <div> (defaut)
    # 1= affiche les emails et les liens
    $debug=0;
    #===================== FIN DE LA CONFIGURATION ======================#
    print "Content-type: text/html\n\n";
    
    # On affiche une erreur pour les utilisateurs "normaux". Seule cette
    # partie leur sera visible, le reste sera cache dans le code HTML/CSS.
    # On ajoute aussi "noindex,nofollow" afin d'eviter que les robots
    # classiques (googlebot etc) ne se prennent les pieds dans notre piege:
    print qq~<html><head>
    <meta name="robots" content="noindex,nofollow">
    </head><body>
    <h1>$message_404</h1>
    ~;
    
    # Partie cachee aux utilisateurs mais bien visible pour les spambots:
    print "<div style='display:none;'>" if not $debug;
    
    $nb_lettres=@alphabet;
    $nb_tld=@tld;
    
    # On verifie si on a deja affiche $max_pages:
    $URL = $ENV{'REDIRECT_URL'};
    if ($URL=~/(\d{1,2})\Q$extension\E$/i){
      if ($1>=$max_pages){goto NO_PAGES}
      $count=$1;
    }
    $count++;
    # Creation des fausses pages/liens:
    $HOST= 'http://'.$ENV{'HTTP_HOST'};
    for (1..$max_liens){
      $HTML_page=&genere_chaine."$count$extension";
      print "<a href=\"$HOST\/$HTML_page\">$HTML_page</a><br>\n";
    }
    print "<p>";
    NO_PAGES:
    # Generer les fausses adresse emails:
    for (1..$max_emails){
      $user_name = &genere_chaine;
      $domain_name=&genere_chaine;
      $ext=$tld[int(rand($nb_tld))];
      print "<a href='mailto:$user_name\@$domain_name$ext'>$user_name\@$domain_name$ext</a> \n";
    }
    print "</div>" if not $debug;
    print "</body></html>";
    exit;
    ######################################################################
    sub genere_chaine{
      $chaine="";
      $nb_car= rand($max_car);
      $nb_car+=2 if $nb_car<4;
      for (1..$nb_car){
        $lettre = int(rand($nb_lettres));
        $chaine.=$alphabet[$lettre];
      }
      return $chaine;
    }
    ######################################################################
    
    



                           



    emails addresses here, click me!