2010-05-28 9 views
3

$ _SERVER ['REMOTE_USER'] renvoie le nom d'utilisateur de l'utilisateur connecté à Active Directory. Je souhaite récupérer ces informations utilisateur en utilisant ldap_search().PHP - filtre ldap_search(). Recherche de l'utilisateur

C'est ce que j'ai maintenant:

$ad = // ldap_connection id 
$filter = "(|(sn=$username*)(givenname=$username*))"; 
$attr = array("displayname", "mail", "mobile", "homephone", "telephonenumber", "streetaddress", "postalcode", "physicaldeliveryofficename", "l"); 
$dn = // OU, DC etc.. 

ldap_search($ad,$dn,$filter,$attr); 

Il fonctionne, mais je ne suis pas sûr qu'il fonctionnera si deux utilisateurs ont presque les mêmes noms. Comment est-ce que je recherche seulement leur nom d'utilisateur unique de sorte que je reçois toujours seulement un utilisateur?

+0

filtre $ = « (samaccountname = $ nom d'utilisateur) "; <- est-ce correct? "samaccountname" est le nom d'utilisateur unique droit? – horgen

Répondre

4

sAMAccountName est le nom d'utilisateur-attribut utilisé dans Active Directory, de sorte (&(objectClass=user)(sAMAccountName=%s)) serait le filtre correct pour vérifier le LDAP pour un nom d'utilisateur donné (avec %s être remplacé par le nom d'utilisateur réel naturellement).

S'il vous plaît être conscient que vous devez gérer des caractères spéciaux dans $username pour éviter les filtres malformés ou à des injections LDAP pire malveillants (voir RFC 2254):

Tous les caractères de contrôle avec un code ACII < 32 ainsi que les caractères avec une signification particulière dans les filtres LDAP « * », « (», «) », et « \ » (la barre oblique inverse) sont convertis dans la représentation d'une barre oblique inverse suivie de deux hexagonaux chiffres représentant l'hexadéci mal valeur du caractère.

3

ldap_search() trouver toutes les entrées correspondantes, vous devrez vérifier le résultat. Disons que $link est votre lien vers la base de données LDAP créée avec ldap_connect() ldap_get_entries (lien $, $ result) Vous pouvez vérifier que comme ceci:

$result = ldap_search(); 
if(ldap_count_entries($link, $result) === 1) { 
    ... 
} 

ou

$result = ldap_search(); 
$entries = ldap_get_entries($link, $result); 
if(sizeof($entries) === 1) { 
    ... 
} 
Questions connexes