Logs

From Openflyers

Jump to: navigation, search

Contents

Introduction

Le but des logs est double :

  • tracer toutes les modifications en base de données
  • pouvoir facilement effectuer des recherches sur les logs pour :
    • déterminer qui a fait quoi
    • établir des statistiques comportementales
    • faire ressortir des failles de sécurité (IDS)

Pour ce faire, le stagiaire devra retenir la solution la plus adaptée pour stocker les logs, parmi les solutions suivantes :

  • fichier XML
  • table en base de données
  • un fichier texte 'simple' (plain text)

A priori, la solution la moins coûteuse en ressource et répondant le mieux aux besoins consisterait à créer deux tables :

  • une table qui identifie chaque modification de la base avec simplement l'ID de la personne ayant fait la saisie et un numéro de log
  • une table qui pour chaque numéro de log contienne une ou plusieurs lignes définissant les champs/tables affectées.

Une fois la structure déterminée, il devra créer une classe en PHP permettant de remplir la structure.

Plus

  • mettre en place une interface de consultation/recherche dans les logs
  • mettre en place une interface établissant des statistiques comportementales
  • Intrusion Detection System en fonction des droits des individus

Ordonnancement

  • 1ère semaine : étude des solutions de stockage des logs
    présentation de cette étude sur le wiki comprenant :
    • les solutions de stockage (fichier texte brut, fichier xml, base de données, autre ?)
    • les avantages et inconvénients (taille, accessibilité (vitesse, charge serveur), etc.)
  • 2e à 4e semaine : mise en place d'une solution pour OpenFlyers

Cahier des charges

Premier temps

  • sauver toutes les actions sur la base de données
  • les logs doivent se suffire à eux-même : il doit être possible d'en extraire toutes les informations demandées ci-dessous sans avoir à se référer à une table de la base de données
  • être capable d'interroger en temps réel les logs pour en extraire des informations
    Cette interrogation doit pouvoir se faire pour répondre à ce genre de questions :
    • quelles ont été toutes les actions sur une réservation en particulier
    • quelles ont été les réservations effectuées par telle personne
    • quelles ont été toutes les actions effectuées par telle personne
    • quelles sont les personnes qui ont fait telle action (par exemple : création d'un compte)

Ces interrogations doivent pouvoir être effectuées à l'aide d'un formulaire accessible côté admin.

Second temps

Il devra être possible, côté cahier, d'afficher l'historique des opérations sur une réservation en particulier. Pour cela il suffira alors d'utiliser une classe déjà créée dans le cadre du formulaire.

Un second type d'interrogation doit pouvoir être effectué sur les logs dans le but de la deuxième partie du stage (audit sûreté) dans le but de créer un IDS (intrusion detection system). Voici les interrogations qui doivent être possibles :

  • lister toutes les actions d'un certain type (par exemple création d'un compte) effectuées par un utilisateur qui ne possédait pas le droit adéquat au moment de l'opération
  • lister toutes les résas qui ont été supprimées alors qu'au moment de la suppression la date de début était obsolète.

Troisième temps

Il devra être possible de faire ressortir des statistiques des logs, comme par exemple :

  • graphique représentant la répartition du nombre de résas en fonction de la différence entre le moment où est effectué la résa et le début de la résa
  • graphique représentant la répartition du nombre d'annulations en fonction de la "distance" au début de la résa
  • graphique représentant la répartition du nombre d'annulations en fonction de la "distance" entre la création de la résa et son annulation

Ces graphiques devront pouvoir être restreints à une population donnée ou à une personne donnée.

Etude des solutions de stockage des logs

D'après le cahier des charges, chaque "entrée" dans les logs doit contenir:

  • la date de l'opération
  • le login de la personne ayant effectué l'opération
  • les droits de la personne au moment de l'opération
  • l'intitulé de l'opération effectuée (création_compte, création_réservation, suppression_réservation, etc...)
  • les tables concernées par l'opération
  • les champs qui ont été modifiés et leur nouvelle valeur le cas échéant

Fichier texte

C'est le format de log le plus basique : une ligne de texte par entrée contenant toutes les informations utiles.

date login droits operation table1.champ1=valeur1 table1.champ2=valeur2 table2.champ1=valeur3...
  • avantages :
    • le fichier ne contient pas d'informations superflues, donc sa taille est réduite
    • en cas de plantage du système, le fichier peut être lu sans problème et il suffit d'écrire à la suite du fichier pour continuer la journalisation
  • inconvénients :
    • la récupération et le traitement des informations prend beaucoup de temps étant donné qu'il faut parcourir le fichier en entier

Test de la solution fichier texte

Fichier XML

On peut stocker les entrées dans un fichier XML ayant une structure du type :

 
 <logs>
  <log>
   <date>date</date>
   <login>login</login>
   <droits>droits</droits>
   <operation>operation</operation>
   <tables>
    <tab id=table1>
     <champ id=champ1>valeur1</champ>
     <champ id=champ2>valeur2</champ>
    </tab>
    <tab id=table2>
     <champ id=champ1>valeur3</champ>
    </tab>
   </tables>
  </log>
 </logs>
 
  • avantages :
    • la récupération et le traitement des informations est plus pratique que pour le fichier texte grace à la structure arborescente du fichier XML
  • inconvénients :
    • la taille du fichier est plus importante car chaque entrée est accompagnée d'un certain nombre de balises XML
    • en cas de plantage du système, il se peut qu'une entrée n'ait été écrite que partiellement. Il faut alors vérifier tout le fichier pour s'assurer que toutes les balises sont bien refermées avant de pouvoir écrire d'autres entrées

Test de la solution fichier XML

Table en base de données

Les logs peuvent être stockés dans la base de données même dans une structure du type :

  • une table "journal" contenant le login de la personne ayant effectué l'opération et le numéro de l'entrée dans les logs correspondante

Table journal :

nom du champtypedescription
loginVARCHAR(255)identifiant de la personne
num_logINTEGERauto increment - numéro du log
date_logDATETIMEdate de l'opération
rightsTEXTdroits de la personne
actionTEXTintitulé de l'opération
  • une table "log" contenant le detail de l'opération effectuée

Table log :

nom du champtypedescription
num_logINTEGERclé étrangère vers la table journal
actionTEXTopération effectuée sur le champ (insert, update, etc...)
table_nameTEXTnom de la table
field_nameTEXTnom du champ
field_valueTEXTnouvelle valeur du champ
  • avantages :
    • la taille prise par les informations est plus importante que pour le fichier texte, mais moins que pour le fichier XML
    • la récupération et le traitement des données est extrêmement rapide
  • inconvénients :
    • en cas de plantage du système, ou du système de gestion de base de données, les informations peuvent être extrêmement difficiles à récupérer

Test de la solution base de données

Résumé

Tests efféctués sur des logs contenant 30000 entrées.

Classement des solutions selon les différents critères :

  • Taille
  1. Fichier texte (2.4M)
  2. Base de données (2.8M)
  3. Fichier XML (6.8M)
  • Traitement des données
  1. Base de données (0.04s)
  2. Fichier texte (0.4s)
  3. Fichier XML (5.8s)
  • Reprise en cas de problème
  1. Fichier texte
  2. Fichier XML
  3. Base de données

Le traitement des données étant une partie importante du cahier des charges, le fichier texte ne semble pas être la solution adéquate étant donné le parcours de tout le fichier nécessaire à chaque requète. La meilleure solution semblerait donc être la base de données, qui permet de traiter les données extrèmement efficacement sans prendre énormement de place pour autant. La vitesse de la base de données compense l'inconvénient de stocker les logs dans la base de données qu'ils doivent "surveiller".

Mise en place d'une solution pour Openflyers

Actions sur les réservations

Action de l'utilisateurCommande OpenflyersConséquences sur la baseConséquences sur les logs
Création résarecord_book
TableChampvaleur
bookingIDa
bookingSTART_DATEb
bookingEND_DATEc
bookingAIRCRAFT_NUMd
bookingMEMBER_NUMe
bookingSLOT_TYPEf
bookingINST_NUMg
bookingFREE_SEATSh
bookingcommentsi

Table journal :

loginnum_logdate_logrightsaction
wxyzrecord_book

Table log :

num_logactiontable_namefield_namefield_value
xinsertbookingIDa
xinsertbookingSTART_DATEb
xinsertbookingEND_DATEc
xinsertbookingAIRCRAFT_NUMd
xinsertbookingMEMBER_NUMe
xinsertbookingSLOT_TYPEf
xinsertbookingINST_NUMg
xinsertbookingFREE_SEATSh
xinsertbookingcommentsi
Modification résarecord_book
TableChampvaleur
bookingSTART_DATEa
bookingEND_DATEb
bookingAIRCRAFT_NUMc
bookingMEMBER_NUMd
bookingSLOT_TYPEe
bookingINST_NUMf
bookingFREE_SEATSg
bookingcommentsh

Table journal :

loginnum_logdate_logrightsaction
wxyzrecord_book

Table log :

num_logactiontable_namefield_namefield_value
xbookingIDid
xupdatebookingSTART_DATEa
xupdatebookingEND_DATEb
xupdatebookingAIRCRAFT_NUMc
xupdatebookingMEMBER_NUMd
xupdatebookingSLOT_TYPEe
xupdatebookingINST_NUMf
xupdatebookingFREE_SEATSg
xupdatebookingcommentsh
Suppression résadelete_book
TableChampvaleur
bookingID
bookingSTART_DATE
bookingEND_DATE
bookingAIRCRAFT_NUM
bookingMEMBER_NUM
bookingSLOT_TYPE
bookingINST_NUM
bookingFREE_SEATS
bookingcomments

Table journal :

loginnum_logdate_logrightsaction
wxyzdelete_book

Table log :

num_logactiontable_namefield_namefield_value
xdeletebookingIDa

Requete sur les réservations

Ce qui nous interesse ici est la requete suivante :

Trouver toutes les annulations de réservation ayant été effectuées au plus un jour avant la date effective de la réservation pour tel pilote.

Script de remplissage des tables journal et logs avec des valeur d'exemple et test de la requete : Script requete

Personal tools