6 votes

Empêcher un serveur Apache 2 d'enregistrer des données sensibles

Apache 2 enregistre par défaut l'intégralité de l'URI de la requête, y compris la chaîne de requête, pour chaque requête.

Quel est le moyen le plus simple d'empêcher un serveur web Apache 2 d'enregistrer des données sensibles, par exemple des mots de passe, des numéros de carte de crédit, etc., tout en enregistrant le reste de la requête ?

Je voudrais enregistrer toutes les tentatives de connexion, y compris le nom d'utilisateur, comme le fait Apache par défaut, et empêcher Apache d'enregistrer directement le mot de passe.

J'ai parcouru la documentation d'Apache 2 et il ne semble pas y avoir de moyen simple d'y parvenir, à part empêcher complètement l'enregistrement de ces requêtes (en utilisant SetEnvIf).

Comment puis-je y parvenir ?

16voto

JP Hellemons Points 2544

Vous pouvez masquer les mots de passe avant qu'ils ne se retrouvent dans le fichier access.log en combinant une directive CustomLog avec un peu de magie sed (comme indiqué dans la section https://stackoverflow.com/a/9473943/102170 ) :

Cela remplacerait chaque occurrence de password=secret con password=[FILTERED] en /votre/chemin/access.l :

CustomLog "|/bin/sed -u -E s/'param=[^& \t\n]*'/'param=\[FILTERED\]'/g >> /your/path/access.log" combined

Cela dit, il est préférable d'éviter de placer des données sensibles dans les chaînes de requête si possible.

6voto

Dmitry Points 101

Par défaut, Apache 2 enregistre l'intégralité de la requête URI de la requête, y compris la chaîne de requête de chaque requête.

Quel est le moyen le plus simple de d'empêcher un serveur web Apache 2 de d'enregistrer des données sensibles, par exemple mots de passe, numéros de carte de crédit, etc, tout en enregistrant le reste de la requête ?

Si je comprends bien, vous envoyez des informations sensibles dans l'URI en tant que QueryString ? Je vous suggère de modifier l'application pour qu'elle ne le fasse pas en premier lieu.

Il ne serait alors pas nécessaire de modifier Apache, puisqu'il ne fait rien de tel par défaut.

3voto

ChrisR Points 303

Vous vous documentez sur la différence entre GET et POST et réécrivez vos applications pour ne plus mettre de mots de passe et d'informations dans les paramètres GET.

1voto

krushik Points 11

Vous pouvez modifier certains paramètres de la requête pendant la phase d'enregistrement avec LuaHookLog (mod_lua). Bien que la ligne de requête (%r dans le format de journal 'combiné') soit en lecture seule, vous pouvez masquer la chaîne de requête directement, et ensuite ajuster tous vos formats de journal pour l'utiliser. Pour masquer password=XXX dans la chaîne de requête, procédez comme suit :

  1. Créer /etc/apache2/log_mask.lua :

    function log_mask_password(r)
      if r.args then
        r.args = r.args:gsub("([pP][aA][sS][sS][wW][oO][rR][dD])=[^&=]*(&?)", "%1=XXX%2")
      end
      return apache2.OK
    end
  2. activer le mod_lua dans apache avec a2enmod lua

  3. mettez en place un crochet pour le journal lua quelque part dans votre configuration apache :

    <IfModule lua_module>
        LuaHookLog /etc/apache2/log_mask.lua log_mask_password
    </IfModule>
  4. corrigez votre LogFormat pour utiliser "%m %U%q %H" au lieu de "%r". par exemple :

    LogFormat "%a %l %u %t \"%m %U%q %H\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

N'oubliez pas de corriger également tous vos autres formats de journaux pour éviter les fuites de mots de passe dans tous ces formats !

Aussi, vous pouvez simplement faire return apache2.DONE dans le code lua pour supprimer complètement le message du journal (il s'agirait d'un autre code avec des correspondances de modèles de données if et sensibles).

Attention : Il n'est pas recommandé d'utiliser le module lua sur un serveur partagé avec des utilisateurs en qui vous n'avez pas confiance (et qui ont les droits de modifier les fichiers de configuration d'apache), car il peut être utilisé de manière abusive pour modifier le fonctionnement interne de httpd.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X