Module d'authentification Apache avec base de donnée

Fermé
Lou - 26 oct. 2022 à 14:43
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 29 oct. 2022 à 02:15

Bonjour,

J'ai récemment mis en place une authentification pour un serveur Web (Apache), en utilisant le module "mod_authn_dbd". Ce module permet de travailler avec une base de donnée pour vérifier les mots de passe.

J'effectue d'abord un filtre sur IP, puis un filtre sur l'authentification sur un seul répertoire, comme ceci : (site-web.conf)

<VirtualHost *:80>
        # Block all access to server root
        <Directory "/var/www/site-web.com/html/">
          Require all denied
        </Directory>

        # Allow white list IPs for repertory 1
        <Directory "/var/www/site-web.com/html/repertoire1">
          Require all denied
          Require ip X.X.X.X
        </Directory>

        #######     authentication with database     #######

         DBDriver mysql
         DBDParams "dbname=site_db user=user pass=xxxx"

         DBDMin 4
         DBDKeep 8
         DBDMax 20
         DBDExptime 300

         <Directory "/var/www/site-web.com/html/repertoire1">

          # mod_authn_core and mod_auth_basic configuration 
          # for mod_authn_dbd 

          AuthType Basic
          AuthName "test"
          AuthDigestNonceLifetime 10

          # To cache credentials, put socache ahead of dbd here 
          AuthBasicProvider socache dbd

          # Also required for caching: tell the cache to cache dbd lookups! 
          AuthnCacheProvideFor dbd
          AuthnCacheContext my-server

          # mod_authz_core configuration 
          Require valid-user

          # mod_authn_dbd SQL query to authenticate a user 
          AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
         </Directory>
</VirtualHost>

 En fait, je n'arrive pas à analyser les vulnérabilités de cette méthode car je ne vois pas trop comment est comparé le mot de passe. La requête SQL permet de sélectionner le mot de passe dans la base de donnée avec le nom d'utilisateur entré, à ce moment là, il y a un risque d'injections SQL non ? Ensuite, je ne sais pas par quel moyen le mot de passe entré est comparé à celui de la base de donnée.

Quelqu'un peut-il m'éclairer ?

Merci par avance

Lou

2 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
28 oct. 2022 à 13:02

Bonjour,

Ce forum (Webmaster) convient pour cette question se rapportant à Apache. Le forum "Firewall" est plutôt réservé aux questions se rapportant aux pare-feu réseaux, logiciels ou matériels.

Le module mod_authn_dbd utilise des requêtes préparées, il n'y a donc pas vraiment de risque d'injections SQL.

Le mot de passe est simplement comparé par égalité de chaine de caractères, mais il faut tenir compte de la méthode HTTP utilisée et du "hash" appliqué : https://httpd.apache.org/docs/trunk/misc/password_encryptions.html

Les risques sont :

  1. Transmission du mot de passe (ou de son hash) en clair. Pour éviter cela, il faut utiliser HTTPS.
  2. Mot de passe faible. Il faut imposer des règles sur le choix du mot de passe.
  3. Brute-force. Tu peux bloquer les connexions après trop de tentatives en utilisant des outils comme fail2ban ou CSF.
2
Lou_2044 Messages postés 10 Date d'inscription mercredi 26 octobre 2022 Statut Membre Dernière intervention 9 janvier 2023
28 oct. 2022 à 16:00

Bonjour, merci pour votre réponse !

Concernant les requêtes préparées, avez-vous un lien donnant cette information ? Je n'ai rien trouvé à ce sujet pour ce module :/

Cela signifie que lorsque les identifiants sont entrés, ils sont hachés et ensuite donnés à la requête SQL :

"SELECT passwd FROM mysql_auth WHERE username = %s"

C'est cela ?

Pour les risques, en effet j'ai déjà configuré du TLS, il ne me manque plus qu'à passer les mots de passe en SHA256, car actuellement ma base de donnée traite du MD5.

0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497 > Lou_2044 Messages postés 10 Date d'inscription mercredi 26 octobre 2022 Statut Membre Dernière intervention 9 janvier 2023
29 oct. 2022 à 02:15

Bonjour,

Concernant les requêtes préparées, avez-vous un lien donnant cette information ? Je n'ai rien trouvé à ce sujet pour ce module :/

Oui c'est indiqué ici : https://httpd.apache.org/docs/trunk/mod/mod_authn_dbd.html#security

Cela signifie que lorsque les identifiants sont entrés, ils sont hachés et ensuite donnés à la requête SQL : "SELECT passwd FROM mysql_auth WHERE username = %s" C'est cela ?

Non, on peut tout à fait faire des requêtes SQL préparées avec l'information telle que donnée par le visiteur (sans calculer son hash).

0
Lou_2044 Messages postés 10 Date d'inscription mercredi 26 octobre 2022 Statut Membre Dernière intervention 9 janvier 2023
28 oct. 2022 à 12:32

Coucou, je crois que j'aurais mettre ce sujet dans Virus/Sécurité -> Firewall. Est-il possible de le déplacer ?

0