Bonjour à tous
Lorsqu'on utilise le système de contrôle d'accès d'Apache, l'utilisateur donne son identifieur et son mot de passe qui sont contrôlés par un fichier qui contient la liste identifieur:mot-de-passe-crypté. La méthode de cryptage est bien connue, et je dispose, pour ceux qui seraient intéressés, d'un programme qui permet de crypter de tels mots de passe à partir du mot de passe en clair. Ce programme génère à chaque appel un résultat différent, mais Apache doit contenir un programme qui permet de vérifier que le mot de passe qu'il a reçu est conforme à celui qui a généré le résultat enregistré.
Ce que je voudrais savoir, c'est comment on peut en PHP effectuer la même vérification, c'est à dire contrôler le mot de passe de la même façon que ce que fait Apache.
Merci de vos conseils.
Modifié par PapyJP (30 Dec 2017 - 12:11)
Bonjour PapyJP,
Si tu utilises le chiffrage par défaut d'Apache qui est pour le moment MD5 APR1, tu peux utiliser cette très bonne librairie PHP : https://github.com/whitehat101/apr1-md5

Tu auras du coup tout ce qu'il faut pour vérifier ou créer un mot de passe du même format qu'Apache.

Cependant, je ne sais pas quel est l'usage que tu veux faire de cette authentification.
Si tu ne veux pas forcément utiliser les mêmes mots de passe de ton .htpasswd, PHP utilise plutôt de manière classique les fonctions password_hash() et password_verify().
Modifié par MatthieuR (30 Dec 2017 - 13:23)
Merci
Je vais regarder cela de près.
Je veux remplacer le mécanisme actuel qui repose sur Apache par un autre mécanisme de contrôle sans demander aux utilisateurs de changer de mot de passe. Comme je dispose du fichier avec les mots de passe cryptés, il est plus simple de partir de ce fichier.
Modérateur
Hello,

MatthieuR a écrit :

Si tu utilises le chiffrage par défaut d'Apache qui est pour le moment MD5 APR1, tu peux utiliser cette très bonne librairie PHP : https://github.com/whitehat101/apr1-md5

Pourquoi ne pas utiliser tout simplement crypt() ? Ça suffit amplement normalement. Si besoin, ajouter un peu de sel.

MatthieuR a écrit :
Cependant, je ne sais pas quel est l'usage que tu veux faire de cette authentification.


+1

Le souci est que tu veuilles déléguer la sécurité d'Apache à Php.

@papyjp :
La marche à suivre :
- collecter les login et pass
- les placer dans un fichier plat (yml, json, xml, etc.)/sqlite/mysql/etc.
- si tu as choisis de stocker ces données dans un fichier plat, donner des droits à ce fichier très restreint. Pourquoi ne pas encrypter ce fichier ? créer un système d'accès spécifique à ce fichier.
- créer un formulaire
- à la saisie du formulaire, faire des filtres de saisie en js et php
- vérifier si le mot de passe et login correspondent bien à un user
- créer une session
- rediriger le user vers son index
- Pour faire les choses biens, créer un système pour le mot de passe oublié
Modifié par niuxe (30 Dec 2017 - 18:20)
Ok, je comprend mieux ton but et du coup, le principal serait de savoir quelle est la méthode de chiffrage qui a été mise en oeuvre pour chiffrer les mots de passe que tu as actuellement dans ton .htpasswd.
Le plus simple serait que tu postes ici un mot de passe afin de détecter le type de haschage.
Ça commence par "$apr1$", c'est du MD5 APR.
Ça commence par "$2y$" ou "$2a$" c'est du bcrypt.
Il n'y a pas de préfixe, c'est du crypt().

Si c'est du MD5 APR, aucune fonction native PHP ne gère ce chiffrage (d'où le lien vers la librairie sus-citée).

Sinon, pour la logique, celle de niuxe est correcte même si j'aurais une préférence pour stocker les login/password dans une base de données. Il faut pour cela faire un petit script d'import de ton fichier .htpasswd vers une table en db.

niuxe a écrit :
Pourquoi ne pas utiliser tout simplement crypt() ? Ça suffit amplement normalement. Si besoin, ajouter un peu de sel.

Pourquoi pas, mais ça va dépendre de l'algo utilisé à la base et crypt() est considéré comme peu sûr maintenant. Il y a cependant de grandes chances que les mots de passe aient été hashés avec crypt() étant une méthode utilisée par défaut par Apache dans d'anciennes versions.
C’est bien $apr1$quelquechose, et j’ai pu tester que c’est le bon algorithme en testant sur mon propre mot de passe
Ja vais donc utiliser le code que tu m’as indiqué
Bonne fin d’année à tous