PHP - ldap_search () filtresi.

2 Cevap php

$ _SERVER ['REMOTE_USER'] Active Directory için oturum açmış kullanıcının kullanıcı adını döndürür. I) ldap_search (kullanarak bu kullanıcıların bilgi alınamadı istiyorum.

Bu şimdi ne var:

$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);

It works, but i'm not sure it will work if two users have almost the same names. How do I only search for their unique username so that i always only get one user?

2 Cevap

sAMAccountName Active Directory içinde kullanılan kullanıcı adı-nitelik, yani (&(objectClass=user)(sAMAccountName=%s)) %s ile değiştirilebilir (belirli bir kullanıcı adı için LDAP denetlemek için doğru filtre olacaktır Gerçek adı doğal olarak).

: $username hatalı biçimlendirilmiş filtreleri önlemek için ya da en kötü niyetli LDAP enjeksiyonu (bkz. RFC 2254) Eğer özel karakterleri işlemek gerekir unutmayın

Any control characters with an ACII code < 32 as well as the characters with special meaning in LDAP filters "*", "(", ")", and "\" (the backslash) are converted into the representation of a backslash followed by two hex digits representing the hexadecimal value of the character.

ldap_search() will find all matching entries, you will have to verify the result. Let's say $link is your link to the LDAP database created with ldap_connect()ldap_get_entries($link, $result) You can verify that like this :

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

veya

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