Php ldap bind - IT Новости

IT Новости
14 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Php ldap bind


(PHP 4, PHP 5, PHP 7)

ldap_bind — Привязать к LDAP директории


Связывает LDAP-директорию с указанным RDN и паролем.

Список параметров

Идентификатор ссылки LDAP, возвращенный ldap_connect() .

Если bind_password не определен, то будет попытка анонимной привязки. Также для анонимной привязки можно оставить пустым bind_rdn , как определено в

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.


Пример #1 Пример использования привязки LDAP

// используется ldap-привязка
$ldaprdn = ‘uname’ ; // ldap rdn или dn
$ldappass = ‘password’ ; // ассоциированный пароль

// соединение с сервером
$ldapconn = ldap_connect ( «ldap://» )
or die( «Не могу соединиться с сервером LDAP.» );

// привязка к ldap-серверу
$ldapbind = ldap_bind ( $ldapconn , $ldaprdn , $ldappass );

// проверка привязки
if ( $ldapbind ) <
echo «LDAP-привязка успешна. » ;
> else <
echo «LDAP-привязка не удалась. » ;

Пример #2 Использование анонимной привязки LDAP

//анонимное использование ldap-привязки

// соединение с сервером ldap
$ldapconn = ldap_connect ( «ldap://» )
or die( «Не могу соединиться с сервером LDAP.» );

// анонимная привязка
$ldapbind = ldap_bind ( $ldapconn );

if ( $ldapbind ) <
echo «Анонимная привязка LDAP прошла успешно. » ;
> else <
echo «Анонимная привязка LDAP не удалась. » ;

Смотрите также

  • ldap_bind_ext() — Привязать к директории LDAP
  • ldap_unbind() — Разорвать привязку к директории LDAP

User Contributed Notes 39 notes

if you can’t bind to active directory with the error «49: Invalid Credentials», you can get the extended error output from the ldap_get_option function, using the option: LDAP_OPT_DIAGNOSTIC_MESSAGE. Unfortunately php hasn’t defined this by default, but it’s value is 0x0032.

This is useful if a user must change their password at first login (Data: 773), or if their account has expired on the network (Data: 532).

$handle = ldap_connect ( ‘ldap://’ );
$bind = ldap_bind ( $handle , ‘user’ , ‘expiredpass’ );

if ( $bind ) <
if ( ldap_get_option ( $handle , LDAP_OPT_DIAGNOSTIC_MESSAGE , $extended_error )) <
echo «Error Binding to LDAP: $extended_error » ;
> else <
echo «Error Binding to LDAP: No additional information is available.» ;

Or something to that effect..

It took me a while to work this one out, so i figured i’d share my results..

I couldn’t get ldap_bind to work on an ldaps connection until I followed some instructions about creating an ldap.conf file. I don’t see these instructions anywhere on the php site. Maybe they’re on the OpenLDAP site, but I thought it would be useful to have here as well. Credit goes to a dude known as ‘LRM’, and I found my solution here:

My setup is XAMPP on Win XP.
###### ApacheFriends XAMPP (basic package) version 1.6.3a ######

+ Apache 2.2.4
+ MySQL 5.0.45
+ PHP 5.2.3 + PHP 4.4.7 + PEAR
+ PHP-Switch win32 1.0 (please use the «php-switch.bat»)
+ XAMPP Control Version 2.5 from
+ XAMPP Security 1.0
+ SQLite 2.8.15
+ OpenSSL 0.9.8e
+ phpMyAdmin 2.10.3
+ ADOdb 4.95
+ Mercury Mail Transport System v4.01b
+ FileZilla FTP Server 0.9.23
+ Webalizer 2.01-10
+ Zend Optimizer 3.3.0
+ eAccelerator for PHP 5.2.3 (comment out in the php.ini)

Читать еще:  Php datetime сравнение дат

1. create C:OpenLDAPsysconfldap.conf (Yes, it MUST be this path because it’s hard-coded in the dll)
2. put this line at the top:

3. Save, stop/start apache.

The reason is, I think, because it doesn’t understand the certificate, so this directive tells it to not bother checking it. I guess that could be unsafe in some cases, but in my case I’m confident with the server I’m connecting to.

My connection code was as follows (nothing new here, I don’t think):

= @ ldap_connect ( ‘ldaps://the.ldap.server’ , 636 );
ldap_set_option ( $con , LDAP_OPT_PROTOCOL_VERSION , 3 );
ldap_set_option ( $con , LDAP_OPT_REFERRALS , 0 );
var_dump (@ ldap_bind ( $con , ‘’ , ‘password’ ));

Good luck! LDAPS can be a real bitch.

When using Active Directory 2003 (possibly also 2000) you can’t search anonymously so you have to bind with a (known) user and password. Or else you will get an Search operations error. I also can confirm that an empty password bind succeeds! So test for an empty password first!

Some excellent information is found here:

Note that you have to specify the protocol version prior to making a call to ldap_bind, when the server is expecting LDAP protocol version 3. If you do not, you will receive a warning and fail to bind, such as:

ldap_bind(): Unable to bind to server: Protocol error

In order to avoid this, make this call:


Where $ds is the result returned by ldap_connect(. );

If you are still having trouble after following all the instructions on the Web to get LDAPS to work, here’s what worked for me:

I was trying to do LDAPS connection (our LDAP server was using port 40636) by running following command:

This didn’t work for days till I changed it to the following format:

Hope it’ll help some out there.

A number of examples and implementations of authentication schemes which use LDAP simple binds to authenticate users fail to properly sanitize user-submitted data. This can allow for an anonymous user to authenticate to a web-based application as an existing user. Provided below is a brief description and example of how this vulnerability can arise. For more detailed information please visit the links at the bottom of this posting.

The bind operation of LDAP, as described in RFC 4513, provides a method which allows for authentication of users. For the Simple Authentication Method a user may use the anonymous authentication mechanism, the unauthenticated authentication mechanism, or the name/password authentication mechanism. The unauthenticated authentication mechanism is used when a client who desires to establish an anonymous authorization state passes a non-zero length distinguished name and a zero length password. Most LDAP servers either can be configured to allow this mechanism or allow it by default. Web-based applications which perform the simple bind operation with the client’s credentials are at risk when an anonymous authorization state is established. This can occur when the web-based application passes a distinguished name and a zero length password to the LDAP server.
This is commonly encountered when no password is provided from the client to the web-based application. This situation is described in some of the postings found below. For this situation, the recommendations found in other postings is sufficient to prevent authentication bypass.
However, no prior postings at describe a situation in which a client may pass a distinguished username and a password of non-zero length to the web-based application which results in an anonymous authorization state. Below is an example of this situation.

Читать еще:  Php configuration parameter

I use PHP 7.1.*. In this version ldap_bind will throw a RuntimeException if it fails to bind. I’ve tried with wrong host name, correct host and wrong password, correct host and invalid DN syntax. All fail conditions seems to throw RuntimeException.

So this function probably doesn’t return false.

Due to a bug in PHP 5.3 you may have to place the ldap.conf in the root of all your drives (I had to place it on D:).

If you’re using SSL (e.g. ldaps) and ldap_bind is throwing ‘Unable to bind to server:’ errors, check that the hostname used in the ldap_connect matches the ‘CN’ in the SSL certificate on the LDAP server. For example:

You can check your LDAP server’s SSL cert using Openssl utility (Linux) — look for the ‘Subject’ line:

$ openssl x509 -in /etc/pki/tls/certs/ldap01.crt -text -noout
Subject: C=XY, ST=My State, L=My City, O=My Org, CN=ldap01/

I recently applied some updates to my system (now Centos 5.7 and PHP 5.3.6) and started having this issue with PHP scripts that had been fine previously where I was simply using the IP address of the server. Replacing the IP address with the hostname fixed my issue.

After a lot of trail and error i’ve found the way to authenticate to apple’s Opendirectory (snow leopard server) and thought it maybe useful to share.

// using ldap bind
$ldaprdn = ‘u > ; // ldap rdn or dn
$ldappass = ‘PASSWORD’ ; // associated password

// connect to ldap server
$ldapconn = ldap_connect ( «» )
or die( «Could not connect to LDAP server.» );

// Set some ldap options for talking to
ldap_set_option ( $ldapconn , LDAP_OPT_PROTOCOL_VERSION , 3 );
ldap_set_option ( $ldapconn , LDAP_OPT_REFERRALS , 0 );

// binding to ldap server
$ldapbind = @ ldap_bind ( $ldapconn , $ldaprdn , $ldappass );

// verify binding
if ( $ldapbind ) <
echo «LDAP bind successful. n» ;
> else <
echo «LDAP bind failed. n» ;

Пример работы с LDAP-каталогом с помощью php API

Левинца Егор, 06 апреля 2012 года.

В порядке эксперимента, а также чтобы оказать помощь человеку в его затруднении, решил написать небольшую утилитку для отображения пользователей (а точнее, учётных записей пользователей), хранящихся в каталоге LDAP, по группам. Эксперимент состоял в том, чтобы обратиться к каталогу и получить из него данные через php API, чего я раньше не делал. Зная общие принципы взаимодействия с LDAP-каталогами и имея опыт написания подобных программ на perl API (с использованием модуля Net::LDAP), сделать это оказалось несложно. Все же я решил описать свою работу — возможно, она поможет кому-нибудь в разработке php-программ, взаимодействующих с LDAP-каталогом.

Читать еще:  Joomla installation index php

Исходные данные: имеется каталог (базовый DN dc=mycompany,dc=ru) со «стандартной» структурой для интеграции с samba: сведения об учётных записях пользователей хранятся в ветке ou=Users,dc=myconpany,dc=ru, сведения о группах пользователей — в ветке ou=Groups,dc=mycompany,dc=ru. Основная задача: отобразить нестандартную древовидную структуру: на первом уровне список групп, на втором — принадлежащие этим группам пользователи. Факультативная задача: при выборе пользователя из списка вывести некоторые сведения по нему.

Для упрощения примера подразумевается, что группы строятся на структурном объектном классе posixGroup , атрибут членства в группе — memberUid , значение которого совпадает с атрибутом uid учётной записи пользователя. Если у Вас за членство в группах и учётные записи пользователей отвечают другие атрибуты — измените код программы под Ваши настройки.

LDAP — относительно простой протокол с небольшим количеством операций. В нашем примере мы не собираемся изменять содержимое каталога (осуществляем доступ только для чтения), поэтому вся работа с каталогом будет выполнена за 4 операции: соединение с сервером каталога (connect), подключение к каталогу (bind), выполнение поиска необходимых нам данных (search) с выводом результатов, и, наконец, отключение от сервера (unbind). Все эти операции реализованы в php функциями с «говорящими» названиями: ldap_connect() , ldap_bind() , ldap_search() и ldap_unbind() . Эти и другие функции работы с LDAP в php описаны в соответствующей странице документации по php. Описаны, кстати, довольно неплохо, с хорошими примерами.

Поскольку при выполнении основной и факультативной задач осуществляются абсолютно одинаковые операции соединения, подключения и отключения от сервера, я решил вынести их в основную часть программы, а различающиеся операции поиска и отображения полученных в результате поиска данных — в отдельные функции. В первой функции get_main() производится поиск сведений о группах в ветке ou=Groups,dc=mycompany,dc=ru. Найденные группы, а также члены каждой из групп сортируются по алфавиту и выводится html-страница с древовидной структурой. Чтобы не изобретать велосипедов с отображением древовидной структуры, я воспользовался готовым модулем dhtmlxTree библиотеки компонентов dhtmlx. Вызов второй функции get_userinfo() выполняется при обращении к программе из ajax-запроса, генерируемого при нажатии на пользователя — члена группы в выведенной в браузер html-странице. В этой функции выполняется поиск в ветке ou=Users,dc=myconpany,dc=ru на совпадение имени пользователя с содержимым атрибута uid. Выбранные в результате поиска атрибуты записи пользователя оформляются в виде таблицы и загружаются в соответствующее информационное поле на html-странице.

‘; // Вывод таблицы с запрашиваемыми данными echo ‘

‘; foreach($LDAP[‘Attrs’] as $attr=>$desc) < echo '

‘; > echo ‘

‘ . $desc . ‘‘; if(isset($entries[0][$attr])) < array_shift($entries[0][$attr]); echo join('
‘, $entries[0][$attr]); > echo ‘

‘; > ?>

Выглядит это так:

Код программы с библиотеками dhtmlx и набором иконок можно скачать одним архивом здесь (

Ссылка на основную публикацию