2011-09-29 7 views
0

Supposons qu'une application peut être configurée pour utiliser un serveur LDAP - ActiveDirectory ou OpenLDAP, par exemple - pour authentifier ses utilisateurs et récupérer des informations supplémentaires à leur sujet à des fins d'autorisation. La manière dont l'application se lie au serveur LDAP est également configurable: elle peut utiliser une liaison simple ou une liaison SASL, en fonction de ce que le serveur LDAP prend en charge et des exigences de sécurité globales.Vérification des informations d'identification sur un serveur LDAP

Il est supposé que si une liaison réussit avec les informations d'identification fournies par l'utilisateur, cela signifie que ces informations d'identification sont valides. Cependant, ce n'est pas toujours le cas; il peut arriver qu'une liaison simple réussisse même si un mot de passe vide a été fourni où un non-vide était en fait attendu. Selon le RFC about LDAP authentication methods une liaison simple avec un nom d'utilisateur non vide et un mot de passe vide est interprétée comme une intention d'établir une connexion non authentifiée, avec une autorisation anonyme. Le serveur peut être configuré pour échouer de telles tentatives avec unwillingToPerform, mais il peut également les autoriser. La question est: dans un tel scénario, où une application peut être configurée pour utiliser une variété de serveurs LDAP, et lier de manière configurable - simple ou via SASL - est-il possible de vérifier sans équivoque les informations d'identification de l'utilisateur? entré contre ce serveur LDAP particulier, autre que d'essayer de lier avec ces informations d'identification, étant donné qu'une liaison simple peut conduire à des faux positifs?

Merci et j'attends vos réponses avec impatience.

Répondre

0

Tout ce que vous avez à faire est de ne pas autoriser, ou peut-être même de vous souvenir, des cas où le mot de passe était vide?

+0

En effet, une possibilité serait d'interdire d'emblée de fournir un mot de passe vide. Cependant, j'essayais de savoir s'il y avait une autre façon de résoudre ce problème. –

+0

@Catalina Caloian 'ou même juste se souvenir'. Il y a 3 cas. 1. Le serveur n'autorise pas l'authentification simple sans mot de passe: problème résolu. 2. L'utilisateur n'a pas donné de mot de passe et l'utilisateur a un mot de passe: pas de problème; c'est le cas que vous essayez d'identifier. 3. L'utilisateur n'a pas de mot de passe => ce n'est pas votre problème, c'est un serveur non sécurisé; il n'y a aucun moyen de vérifier les informations d'identification car il n'y a pas d'informations d'identification à vérifier. – EJP

+0

J'ai essayé d'utiliser 'ldap_compare' pour comparer la valeur de 'userPassword' avec celle fournie par l'utilisateur, comme indiqué [ici] (http://stackoverflow.com/questions/4066265/ldap-how-to-check- un-nom d'utilisateur-mot de passe-combinaison). Cependant, cela ne semble pas fonctionner avec ActiveDirectory, et c'est un bouchon de spectacle. À la fin, j'ai ajouté un paramètre qui interdit les mots de passe vides. –

0

En PHP, au moins, il vous suffit de le faire:

<?php 
$ds = ldap_connect($ip_address); 
if(@ldap_bind($ds, $username, $password) { 
    // Login successful! 
} else { 
    // Login unsuccessful :(
} 
?> 

Votre kilométrage peut varier avec d'autres langues, mais cela a fonctionné pour moi.

Questions connexes