LDAP Bind, похоже, возвращает true с пустым паролем

0

У меня есть этот код, удостоверяющий мои пользователи в отношении каталога LDAP. Он возвращает false, когда есть неправильный пароль, но если пароль остается пустым, он все равно аутентифицирует пользователя. Любые идеи, почему это может произойти?

if (@ldap_bind($ds, $user_dn, $password) || sha1($password) == '484h84h4hf4Ffwj49393393j93j') 
{
    $valid = true;
}
else $valid = false;
Теги:
ldap

1 ответ

3
Лучший ответ

Если вы предоставляете пустой пароль, он указывает серверу каталогов, что вы выполняете анонимное простое связывание. Такое поведение описано в разделе 4.2.2 RFC 2251:

 If no authentication is to be performed, then the simple
 authentication option MUST be chosen, and the password be of zero
 length.  (This is often done by LDAPv2 clients.)  Typically the DN is
 also of zero length.

Это может быть довольно распространенным явлением безопасности в LDAP-клиентах, потому что, если они не подтверждают, что пользователь предоставил непустой пароль, но попытаются связать с непустым DN и пустым паролем, тогда они смогут увидеть, что он преуспевает, когда сервер не связывался как пользователь, указанный предоставленным DN, а скорее связанный анонимно. Поскольку это такая общая проблема безопасности в LDAP-клиентах, некоторые серверы отклоняют запросы на связывание с непустым DN, но пустым паролем, и это поведение поощряется самыми последними спецификациями LDAPv3, как указано в RFC 4513, раздел 5.1.2:

 An LDAP client may use the unauthenticated authentication mechanism
 of the simple Bind method to establish an anonymous authorization
 state by sending a Bind request with a name value (a distinguished
 name in LDAP string form [RFC4514] of non-zero length) and specifying
 the simple authentication choice containing a password value of zero
 length.

 The distinguished name value provided by the client is intended to be
 used for trace (e.g., logging) purposes only.  The value is not to be
 authenticated or otherwise validated (including verification that the
 DN refers to an existing directory object).  The value is not to be
 used (directly or indirectly) for authorization purposes.

 Unauthenticated Bind operations can have significant security issues
 (see Section 6.3.1).  In particular, users intending to perform
 Name/Password Authentication may inadvertently provide an empty
 password and thus cause poorly implemented clients to request
 Unauthenticated access.  Clients SHOULD be implemented to require
 user selection of the Unauthenticated Authentication Mechanism by
 means other than user input of an empty password.  Clients SHOULD
 disallow an empty password input to a Name/Password Authentication
 user interface.  Additionally, Servers SHOULD by default fail
 Unauthenticated Bind requests with a resultCode of
 unwillingToPerform.

Похоже, ваш сервер этого не делает. Если у него есть возможность сделать это, я бы настоятельно рекомендовал включить его. Но, во всяком случае, хорошо спроектированный клиент LDAP, который использует простые операции привязки для проверки учетных данных пользователя, должен абсолютно убедиться, что пользователь предоставил непустую строку, прежде чем пытаться использовать ее для привязки к серверу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню