Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ldap mot de passe cryptes.

2 réponses
Avatar
Serge Nazarian
Bonjour,

Je travaille sur une application web pour laquelle il est nécessaire de
s'identifier. Les utilisateurs sont tous enregistrés dans un annuaire LDAP.
L'utilisateur doit donc donner son login et son mot de passe en clair, et je
souhaite vérifier que le couple login/mdp existe bien dans l'annuaire.
Comment faire, sachant que les mots de passe stockés dans LDAP sont cryptés
?
Par exemple le mot de passe
bidon00
est codé
{CRYPT}VGE/fscsyryHw
dans le champ userPassword.

Voici la fonction concernée qui renvoie
return array("2",false);
car l'identification ne se fait pas.
Si dans l'annuaire, je remplace
{CRYPT}VGE/fscsyryHw
par
bidon00
tout marche bien, mais je veux garder les mots de passe cryptés dans
l'annuaire LDAP.


function passwd($uid,$password)
{
include("config/config.php.inc");
$ds=@ldap_connect($server); // Doit être un serveur LDAP valide !
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
$rdn="uid=".$uid.", ".$users_tree;
if ($ds)
{
if (!ldap_bind($ds,$rdn,$password))
{
return array("2",false);
}
else
{
return array("0",true);
}
}
else
{
return array("1",false);
}
}




Merci pour toute aide.
Cordialement,
--
Serge Nazarian

Cliquez ci dessous pour une réponse personnelle :
http://cerbermail.com/?CBBJUUv0pN

2 réponses

Avatar
P'tit Marcel
Voici la fonction concernée qui renvoie
return array("2",false);
function passwd($uid,$password)
{
include("config/config.php.inc");


un vrai attire-hacker, ce fichier inclus qui ne finit pas par .php...


$ds=@ldap_connect($server); // Doit être un serveur LDAP valide !
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
$rdn="uid=".$uid.", ".$users_tree;
if ($ds)
{
if (!ldap_bind($ds,$rdn,$password))
{
return array("2",false);
}



ça serait pertinent de récupérer le contenu de ldap_error/ldap_errno
pour vérifier ce qui fait tousser LDAP.


Sinon, sur le fond de ton problème, la solution est simple : il faut et
il suffit de crypter le mot de passe avant de l'envoyer au serveur LDAP.

Mais, s'interroge le jeune Séraphin Nazarian, comment diantre crypter ce
mot de passe ?

Palsambleu, damoiselle Crypt est ton amie :

$sel = 'VG';
$password_crypte = '{CRYPT}' . crypt($password, $sel);



(sans aucune garantie vu que je connais que dalle en LDAP :-)

--
P'tit Marcel

Avatar
Serge Nazarian
Dans le message numéro 46ae1d9d$0$17833$,

include("config/config.php.inc");
un vrai attire-hacker, ce fichier inclus qui ne finit pas par .php...



ok, je vais changer ça.

$ds=@ldap_connect($server); // Doit être un serveur LDAP
valide ! ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
$rdn="uid=".$uid.", ".$users_tree;
if ($ds)
{
if (!ldap_bind($ds,$rdn,$password))
{
return array("2",false);
}



ça serait pertinent de récupérer le contenu de ldap_error/ldap_errno
pour vérifier ce qui fait tousser LDAP.

Il dit :

Unable to bind to server: Invalid credentials in ...

Sinon, sur le fond de ton problème, la solution est simple : il faut
et il suffit de crypter le mot de passe avant de l'envoyer au serveur
LDAP.
Mais, s'interroge le jeune Séraphin Nazarian, comment diantre crypter
ce mot de passe ?

Palsambleu, damoiselle Crypt est ton amie :

$sel = 'VG';
$password_crypte = '{CRYPT}' . crypt($password, $sel);

Cela ne fonctionne pas : même message

Unable to bind to server: Invalid credentials in ...

De plus , comment récupérer le grain de sel qui n'est pas le même pour
chaque utilisateur ?
J'ai bien une idée :Il faudrait interroger en "anonyme" sous réserve que
l'utilisateur existe, récupérer le mot de passe crypté et extraire les deux
premier caractères après {CRYPT} et utiliser la fonction crypt. Mais on
serait ramené au problème précédent.
--
Serge Nazarian

Cliquez ci dessous pour une réponse personnelle :
http://cerbermail.com/?CBBJUUv0pN