IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Mettre le login dans le access.log d'Apache


Sujet :

Apache

  1. #1
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut Mettre le login dans le access.log d'Apache


    je débarque sur un projet d'appli web et le module d'authentification est déjà implémenté en php. Par contre, il n'y a pas de log des access par user.

    En gros, le login d'une personne authentifiée n'est pas affiché dans le access.log de apache. c'est genant, je voudrais que ca change.

    Lorsque l'auth est géré par apache, il suffit de modifier le formattage du access.log dans la conf de apache. via un %u ou un %{REMOTE_USER}e je crois.

    donc je voudrais que php dise à apache "salut mon auth user c'est <<machin>>" et que derrière apache me jette cette string dans son access.log

    comment faire ?

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pas possible : Apache ne sait pas interagir avec PHP pour récupérer le login. Le seul moyen d'y arriver c'est d'envoyer le login dans un cookie ou un en-tête HTTP spécial que tu traces dans les logs d'Apache, mais cette valeur sera envoyée au navigateur donc visible sur le réseau.

    L'autre solution qu'on applique généralement, c'est faire un traitement sur les logs d'Apache mais après qu'elles ont été écrites. Tu traces dans les logs Apache la valeur du cookie de session PHP et tu demandes à PHP, au moment du login, d'écrire dans un autre fichier la valeur du cookie de session et en face le login. Le traitement va consister à remplacer dans les logs Apache la valeur du cookie de session PHP par le login. Mais ça se fait après l'écriture des logs d'Apache.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    merci mac pour le feedback

    la 1ere solution ne me gene pas, tt passe en https.

    sur la deuxieme par contre, effectuer un autre pass pour modifier le log d'apache par qqch qui n'est pas apache... ca me plait moyen là comme ca.

    je crois que je préfèrerais passer par la 1ere option pour une 1ere approche. tu peux m'en dire un peu plus ?

    merci

    alexis

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ce n'est pas trop compliqué. Dans toutes tes pages PHP, tu mets tout en haut (première ligne du fichier) le code pour envoyer le login dans un en-tête HTTP bidon (AppLogin par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    if (isset($_SESSION["login"])) {
        header("AppLogin: " . $_SESSION["login"]);
    }
    ?>
    et dans la conf Apache, tu dis de loguer la valeur de ce nouvel en-tête AppLogin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LogFormat "\"%{AppLogin}o\" %h %l %u %t \"%r\" %>s %b" common
    (à supposer que le format common soit celui utilisé pour access_log). Le login deviendra le premier champ des logs.
    Tu redémarres Apache et c'est fini.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    mmm yabon !! ca m'a l'air tres bien tt ca.

    je vais tester ca donc

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    L'intérêt du header spécifique c'est qu'il n'est pas stocké par le client, contrairement au cookie, ce qui devrait éviter d'avoir des faux logins apparaître dans les logs après déconnexion par exemple.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    bon finalemet j'ai enfin eu qqs minutes pour m'occuper de ca.

    et effectivement le header spécifique fonctionne bien comme attendu. Deco / reco ca passe nickel, c'est super.

    j'ajoute pour ceux qui ne sont pas familiers avec des %>s %h et autres joyeuseries de apache, j'ai du poser dans la conf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LogFormat "\"%{AppLogin}o\" %h %l %u %t \"%r\" %>s %b"  myformat
    CustomLog /var/log/httpd-access.log myformat
    hop hop par ici pour les cheats => http://httpd.apache.org/docs/2.2/mod...og_config.html

    bon evidemment, puisque l'auth est assuré par php, tout ce qui est appelé et n'est pas php ==> pas de trace de qui a demandé...
    ex (j'ai fait un CTRL+F5 qu'on voit bien):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    "Joe Smith" 123.123.123.123 - - [17/Dec/2009:18:09:59 +0100] "GET /agenda.php HTTP/1.1" 200 30184
    "Joe Smith" 123.123.123.123 - - [17/Dec/2009:18:10:03 +0100] "GET /client.php HTTP/1.1" 200 14584
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:03 +0100] "GET /images/new.png HTTP/1.1" 200 367
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:04 +0100] "GET /images/first.png HTTP/1.1" 200 507
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:04 +0100] "GET /images/last.png HTTP/1.1" 200 521
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:04 +0100] "GET /images/previous_inactive.png HTTP/1.1" 200 284
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:04 +0100] "GET /images/next_inactive.png HTTP/1.1" 200 246
    "Joe Smith" 123.123.123.123 - - [17/Dec/2009:18:10:47 +0100] "GET /dossier.php?getlast HTTP/1.1" 200 39652
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:47 +0100] "GET /images/previous.png HTTP/1.1" 200 469
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:47 +0100] "GET /images/last_inactive.png HTTP/1.1" 200 318
    "-" 123.123.123.123 - - [17/Dec/2009:18:10:47 +0100] "GET /images/delete_small.gif HTTP/1.1" 200 147
    "Joe Smith" 123.123.123.123 - - [17/Dec/2009:18:11:27 +0100] "GET /dossier.php?getlast HTTP/1.1" 200 39652
    "-" 123.123.123.123 - - [17/Dec/2009:18:11:27 +0100] "GET /javascript.js HTTP/1.1" 200 17178
    "-" 123.123.123.123 - - [17/Dec/2009:18:11:27 +0100] "GET /styles.css HTTP/1.1" 200 4694
    "-" 123.123.123.123 - - [17/Dec/2009:18:11:27 +0100] "GET /jscalendar-1.0/calendar-setup_stripped.js HTTP/1.1" 200 4919
    "-" 123.123.123.123 - - [17/Dec/2009:18:11:27 +0100] "GET /jscalendar-1.0/skin_aqua/theme.css HTTP/1.1" 200 5576

    Voilà c'est ce qui se passe lorsque la gestion des users n'est pas effectuée par apache directement. Mais bon puisque de tte facon y'a pas le choix dans ce contexte, cette solution est une alternative heureuse.

    merci _mac_

    voilà un topic qui a bien mérité son RESOLU

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Access] comment mettre plusieurs critères dans le WHERE ?
    Par Marie_2116 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 18/07/2007, 12h53
  2. [D7],[Access],[ADO],enregistrer une erreur dans un fichier log
    Par iam dans le forum Bases de données
    Réponses: 9
    Dernier message: 16/04/2007, 18h24
  3. écrire dans fichier de log d'apache
    Par benkunz dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2007, 13h20
  4. Réponses: 7
    Dernier message: 15/02/2007, 13h32
  5. [Access 2003]Mettre une table dans un formulaire?
    Par steeves5 dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo