Discussion:
ldap mot de passe cryptes.
(trop ancien pour répondre)
Serge Nazarian
2007-07-30 13:29:55 UTC
Permalink
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
P'tit Marcel
2007-07-30 17:24:58 UTC
Permalink
Post by Serge Nazarian
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...
Post by Serge Nazarian
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
Serge Nazarian
2007-07-30 19:32:07 UTC
Permalink
Post by P'tit Marcel
Post by Serge Nazarian
include("config/config.php.inc");
un vrai attire-hacker, ce fichier inclus qui ne finit pas par .php...
ok, je vais changer ça.
Post by P'tit Marcel
Post by Serge Nazarian
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 ...
Post by P'tit Marcel
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 ?
$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
Loading...