Пустое поле пароля включает успешное связывание LDAP - PullRequest
0 голосов
/ 02 июня 2018

В настоящее время я работаю над своим первым сценарием LDAP на PHP с двумя связями.
Кажется, что первое связывание работает нормально, поскольку я получаю возврат результатов после успешного связывания с сервером для запросов,Однако второе связывание, которое использует результат Отличительное имя от начального связывания, вызывает у меня некоторые проблемы.При попытке повторного связывания пустое поле пароля будет привязано кразличенному имени.
Однако при вводе неверного пароля оно не будет правильно связываться.
Почему в этом случае связываются пустые записи?дело?Спасибо за любые ссылки.

Вот код, который я использую:

<code>//begin set parameters
$host = "*****";
$port = "3268";
$rdnUsername = "*****";//for accessing server
$rdnPassword = "*****";//for accessing server


$_connect = ldap_connect($host);
if (! $_connect) {
    die ('no connection');
}

if (isset($rdnUsername) && isset($rdnPassword)) {
    $args [] = $_connect;
    $args [] = $rdnUsername;
    $args [] = $rdnPassword;
}
if ( ! call_user_func_array ( 'ldap_bind', $args ) ) {
    die (
        sprintf('Could not bind to server %s. Returned Error was: [%s] %s',$host,ldap_errno($_connect),ldap_error($_connect))
    );
}

if (! isset($filter)) {
    $filter = "(userPrincipalName=".$_POST['username']."@school.edu)";
}

$trimmerdUsername = trim(preg_replace('/[^a-zA-Z0-9\-\_@\.]/', '', $_POST['username']));

$filter = str_replace($_POST['username'], $trimmerdUsername, $filter);

$attributes = array("name", "telephonenumber", "mail", "userprincipalname");
$ldap_dn = "dc=tcw,dc=net,dc=tceo,dc=edu";

$_ldapresults = ldap_search($_connect, $ldap_dn, $filter, $attributes, 0, 0, 10 ) or exit("Unable to search");

if (! $_ldapresults) {
    die ('No user with that information found');
}
if (1 > ldap_count_entries($_connect, $_ldapresults)) {
    die ('No user with that information found');
}

if (1 < ldap_count_entries($_connect, $_ldapresults )) {
    die ('More than one user found with that information');
}

$_results = ldap_get_entries($_connect, $_ldapresults);
if (false === $_results) {
    die ('no result set found');
}

ldap_free_result ( $_ldapresults );
$distinguishedName = $_results[0]['dn'];

$userPrincipalName = $_results[0]["userprincipalname"][0];
print "<pre>";
print_r ($_results);
print "
"; echo"
userPrincipalName is: ". $ UserPrincipalName."
"; echo"
Однозначное имя: ". $ Однозначное имя."
"; $ пароль = $ _POST ['пароль']; $ link_id = @ldap_bind ($ _ connect, $ Однозначное имя, $ пароль); // if (false === $ link_id) {if ($ link_id === false) {die ('BIND fail');} else {echo "
success!
";}

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Следует избегать анонимного подключения к серверу LDAP из приложения, поскольку вы не можете полагаться на конфигурацию сервера.Однако, если у вас есть доступ к серверу, вы можете контролировать доступ к записям, ограничивая доступ.Добавьте эти строки в slapd.conf

доступ к * с помощью анонимной аутентификации

Чтобы узнать больше об управлении доступом: https://www.openldap.org/doc/admin24/access-control.html

0 голосов
/ 02 июня 2018

Без пароля ldap связывается анонимно.

Это определено в протоколе и требуется приложением, чтобы не разрешать привязку с пустым паролем.

Это также задокументировано в документации ldap_bind PHP (http://php.net/ldap_bind)

...