Tracer l’utilisation des liens sortants sur un site web

Sur notre site web, nous avons mis en place un certain nombre de liens sortants par exemple :

Graphes et Métrologie à l’aide de <A href= »http://www.cacti.net/ »>Cacti</A>

Or les utilisateurs cliquant sur ces liens sortent sans laisser de traces dans nos logs : normal le lien est direct ! Afin de tracer ces comportments nous décidons de modifier légèrement le lien afin de générer une redirection vers le site externe tout en effectuant une requête préalable sur notre serveur.

Pour cela, nous utilisons pour cela un module d’Awstats (un des meilleurs outils pour suivre les statisques web avec Google Analytics et iMinR) : awredir.pl.
Ce script Perl a besoin du module Apache2 nommé mod_perl pour fonctionner : or celui-ci n’est pas installé car pour d’évidentes raisons de sécurité, nous n’installons que les modules strictement nécessaires.

Nous voici donc parti pour l’installation de modperl :

#wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
#tar zxvf mod_perl-2.0-current.tar.gz
#cd mod_perl-2.0.3/
#perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
#make
#make install

Nous activons ensuite le module en insérant dans le fichier /usr/local/paache2/conf/httpd.conf :

LoadModule perl_module modules/mod_perl.so

C’est d’ailleurs là la beauté de la modularité DSO d’Apache : les modules se compilent indépendamment du binaire httpd !!

Il reste encore à définir la façon dont les scripts Perl seront pris en charge par mod_perl :

<Virtual Host>
[..]
<Location /perl/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
[..]
</VirtualHost>

Remarquez la façon dont le Handler ne traitera que les fichiers contenus dans le répertoire Perl, de cette façon on gère le containment d’une fonctionnalité potentiellement très dangereuse…

Nous redémarrons ensuite Apache :
#apachectl -k restart

Nous n’avons plus qu’à copier notre script awredrir.pl dans le répertoire $DocumentRoot/perl/ puis à ré-ecrire nos liens sortant dans nos pages :

Graphes et Métrologie à l’aide de <A href= »http://www.randco.fr/perl/awredir.pl?tag=CACTI&url=http://www.cacti.net/ »>Cacti</A>

Et on obtient bien dans les logs :

82.123.76.53 – - [17/Apr/2007:13:28:09 +0200] « GET /perl/awredir.pl?tag=CACTI&url=http://www.cacti.net/ HTTP/1.1″ 302 205 « http://www.randco.fr/?p=supervision_administration » « Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322) »

Cependant, cela ne nous suffit pas car nous voulons que le navigateur du client exécute le code Javascript de Google et iMinR pour le suivi de l’exploration.

Nous devons donc modifier le script awredir.pl ainsi :

# Début des modifications:

# On commente la ligne qui générait le Header Location pour la redirection
print « Location: $Url\n\n »;

# On construit la page avec la redirection
print « Content-type: text/html; charset=iso-8859-1\n »;
print « \n\n\n<html>\n<head>\n »;
print « <meta http-equiv=\ »refresh\ »\n content=\ »0;URL= ».$Url. »\ » />\n »;
print « <title>Redirection vers « .$Tag. »</title>\n »;
print « </head></html>\n »;

## Script Google Analytics
print « \n<script src=\ »http://www.google-analytics.com/urchin.js\ » type=\ »text/javascript\ »></script>\n\n »;
print « <script type=\ »text/javascript\ »>\n »;
print  » uacct = \ »UA-XYZ-1\ »;\n »;
print  » urchinTracker();\n »;
print « </script>\n »;

## Script iMinR
print « <script language=\ »javascript\ » src=\ »http://tag.iminr.com/audit/tag.aspx?id=10XYZ\ »></script>\n »;
# Fin Modification

Nous pouvons maintenant suivre les liens externes les plus populaires…

Post to Twitter

About SR

Expert Réseau et Sécurité. Vous pouvez me contacter sur sreytan.(at).randco.fr
This entry was posted in . Bookmark the permalink.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>