Ruby on Rails : Fichiers de log : Données sensibles et rotation

posté par Anthony Heukmes le 15-02-2008

Ruby on Rails : fichiers de log : données sensibles et rotation

Lorsque je lance un nouveau site web, j'aime bien "tracer" mes premiers visiteurs par l'intermédiaire du fichier de log afin de déterminer leur parcours.
Cela me permet par exemple de découvrir qu'une page que je considère comme importante n'est pas spécialement visitée.
J'ajoute alors un lien bien placé sur une certaine page et magie, ma page commence à avoir du succès.

Astuce pour afficher son fichier de log en temps réel :

$ tail -f production.log

Lorsque j'ai lancé ma première application Ruby On Rails (RoR) j'ai été assez surpris de constater qu'un fichier de log peut contenir des informations plutôt sensibles.
Par exemple, j'ai toujours pris soin de stocker les mots de passe des utilisateurs sous forme de digest dans ma base de données. Il m'est donc impossible d'accéder au mot de passe d'un de mes utilisateurs, et si un hacker arrive à accéder à ma base, il ne trouvera pas grand chose d'intéressant.

Astuce pour générer le digest de votre mot de passe en Ruby :

Digest::SHA1.hexdigest(your_password)

Mais le fichier de log de rails stocke toutes les informations liées aux requêtes HTTP et donc les paramètres qui sont passés à vos controllers par l'intermédiaire des formulaires.
Ainsi, lorsqu'un utilisateur complète votre formulaire de login avec son pseudo et son password, ces données sont envoyées à votre serveur web et stockées en clair dans votre fichier de log.
Une vraie mine d'or pour un éventuel pirate qui arriverait à accéder à votre fichier de log.

Il existe heureusement une solution très simple : filtrer votre fichier de log!
Ouvrez votre ApplicationController (application.rb) et ajoutez la ligne suivante :

filter_parameter_logging :password

Cette méthode va automatiquement filtrer tous les paramètres appelés 'password' en les remplaçant par la chaîne [FILTERED].
Si vous passez comme paramètre :user, ce sont tous les paramètres contenus dans le tableau user qui seront filtrés.

Rotation des fichiers de log

Chaque requête HTTP est insérée dans le fichier de log de Rails, la taille de celui-ci peut très vite atteindre une taille gigantesque et ralentir tout votre système.
Il est très simple de mettre en place un système de rotation de vos fichiers.
Dès qu'un fichier de log dépasse une certaine taille, il est déplacé et renommé en .log.x (x étant le numéro de version) et un fichier de log vide est recréé pour votre application.

Pour effectuer cette tâche il faut utiliser l'utilitaire logrotate que vous devez configurer comme ceci :

# vi /etc/logrotate.conf

Ajoutez ce bloque en fin de fichier :

/path/to/your/rails/applicaton/log/*.log
{
daily
missingok
rotate 5
compress
delaycompress
notifempty
copytruncate
}


C'est tout! Logrotate est lancé automatiquement plusieurs fois par jour et effectuera le boulot!
Si vous voulez le tester directement, il suffit de lancer la commande :

# /usr/sbin/logrotate -f /etc/logrotate.conf

Grâce au *.log, tous les fichiers de type .log présents dans le dossier spécifié seront automatiquement traités (et donc même vos logs propres à Mongrel par exemple).
rotate 5 représente le nombre de fichiers à garder (on ira ici jusqu'à production.log.5).



  Version imprimable


Commentaires

Pseudo :
Code anti-spam : (recopier : )



Il n'y a actuellement aucun commentaire sur cet article!


© 2dconcept Tous droits réservés 2007 | Plan du site | Hébergement par Netux