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

Tomcat et TomEE Java Discussion :

Ne pas journaliser les paramètres des requêtes GET


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut Ne pas journaliser les paramètres des requêtes GET
    Bonjour,

    Je travaille en ce moment sur une application WEB MVC, que j'appellerai application A par la suite. On m'a demandé de permettre à une autre application, B, d'accéder à des écrans de A.

    Problème : B ne peut faire que des requêtes GET dont seule l'URL peut être modifiée. Hors, A manipule des données confidentielles, accéder à ses écrans nécessite une authentification via un formulaire POST. J'ai donc modifié l'authentification de A pour qu'elle accepte des requêtes GET, et catastrophe! Les mots de passe apparaissent en clair dans les logs de Tomcat.

    Pour être plus clair, j'ai voulu permettre l'authentification via des requêtes de la forme
    http://serveur.com/accesJardin?login...d=CestUnSecret
    Comme Tomcat enregistre les URL dans son journal, on peut y lire http://serveur.com/accesJardin?login...d=CestUnSecret

    Idéalement, je voudrais pouvoir configurer Tomcat de façon à ce que ce paramètre, pour cette adresse précise, n'apparaisse pas. Au pire, désactiver entièrement la journalisation des accès éviterai ce problème, mais c'est un outil de débogage précieux.

    Est-il possible de configurer Tomcat de façon à ce que les requêtes, ou au moins leurs paramètres, ne soient pas journalisées? Si oui comment?

    Notes :
    - Je n'ai pas non plus le droit d'utiliser HTTP basic.
    - Je peux faire ce que je veux avec A, mais je ne peux pas toucher à B.
    - Je sais qu'il vaut mieux ne pas utiliser les paramètres GET pour des données confidentielles, mais je n'ai pas le choix.
    - J'ai envoyé un message similaire sur le forum Spring MVC, pour résoudre le même problème dans les journaux de Spring. Sur ce sujet, il s'agit de Tomcat.

    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Après avoir cherché pendant des heures, j'ai fini par trouver une solution. Je la met ici au cas où quelqu'un avec le même problème trouverai ce sujet.

    Les logs d'accès sont configurés dans server.xml via l'élément Valve. Sur mon serveur, configuration était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt" />
    Le paramètre pattern permet de choisir quels éléments on souhaite voir apparaitre dans le log. En mettant %h %l %u %t &quot;%m %U %H&quot; %s %b les paramètres GET n'apparaissent plus.

    J'ai trouvé comment faire mieux : cacher les paramètres uniquement pour les requêtes le demandant, grâce aux paramètres conditionIf et conditionUnless, qui filtrent les requêtes selon qu'elles ont ou non un attribut.
    Dans le controller Spring, il faut ajouter un attribut à la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("hideQueryString", "hideQueryString");
    Dans la configuration de Tomcat, créer deux loggers, un qui enregistre les requêtes sans cet attribut avec les paramètres GET et un autre qui enregistre les requêtes avec ces attributs sans les paramètres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt" conditionUnless="hideQueryString" />
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%m %U?hiddenQueryString %H&quot; %s %b" prefix="localhost_access_log." suffix=".txt" conditionIf="hideQueryString" />
    Le resultat dans localhost_access_log.2015-09-25.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    127.0.0.1 - - [25/Sep/2015:14:42:52 +0200] "GET /accesJardin?hiddenQueryString HTTP/1.1" 200 10568
    127.0.0.1 - - [25/Sep/2015:14:42:52 +0200] "GET /autreAdress?parametre=afficheHTTP/1.1" 200 10568
    Voir la documentation ici:
    https://tomcat.apache.org/tomcat-7.0...fig/valve.html

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est bien le serveur de B qui fait les requetes vers l'appli A, ce n'est pas le browser? Parce qu'il ne faut jamais mettre des mots de passes dans des url manipulées par le browser. Ces fichiers sont stockés dans le cache du browser, les url apparaissent dans l'historique du browser etc....


    Si tu passe par le browser, le plus simple c'est d'avoir les deux applis dans un meme domaine, histoire qu'être authentifié sur l'une signifie être authentifié sur l'autre.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    C'est le serveur B et non le navigateur qui fait les appels. Le problème, c'est que B est une application propriétaire que je ne peux pas modifier.

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

Discussions similaires

  1. Ne pas journaliser les paramètres des requêtes GET
    Par BugFactory dans le forum Spring Web
    Réponses: 0
    Dernier message: 24/09/2015, 20h14
  2. identifier les paramètres de requêtes GET
    Par razam dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 06/10/2014, 17h56
  3. Réponses: 2
    Dernier message: 18/02/2012, 17h56
  4. Logger les valeurs des paramètres des requêtes
    Par thebloodyman dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/12/2011, 10h16
  5. Lister les paramètres des procédures d'un schéma
    Par raoulbranche dans le forum Oracle
    Réponses: 4
    Dernier message: 20/09/2006, 12h27

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