获取LDAP和PHP中的AD错误数(LDAP函数返回不精确错误)

获取LDAP和PHP中的AD错误数(LDAP函数返回不精确错误),php,active-directory,ldap,Php,Active Directory,Ldap,我正在使用PHP制作一个应用程序,使用LDAP协议连接到Active Directory(AD) 工作正常,我的问题是如何在登录操作失败时捕获特定错误。现在,应用程序只显示登录是否有效,例如:假设用户名在AD中过期,系统将显示“用户名/密码无效”,因为我们不验证LDAP的特定返回 好的,让我们来看看问题本身,下面是我的代码,我希望能够捕获特定的错误 <?php if (! ($bind = @ldap_bind ( $connect, "DOMAIN\\" . strtoupper ( $

我正在使用PHP制作一个应用程序,使用LDAP协议连接到Active Directory(AD)

工作正常,我的问题是如何在登录操作失败时捕获特定错误。现在,应用程序只显示登录是否有效,例如:假设用户名在AD中过期,系统将显示“用户名/密码无效”,因为我们不验证LDAP的特定返回

好的,让我们来看看问题本身,下面是我的代码,我希望能够捕获特定的错误

<?php
if (! ($bind = @ldap_bind ( $connect, "DOMAIN\\" . strtoupper ( $this->user), $this->password))) {
            error_log ( "Autentication fails LDAP (user: $this->user)" );

            return ldap_errno ( $connect );
?>

我不知道如何使用PHP
ldap\u search()
函数进行搜索,在花了很多时间搜索之后,我找到了解决方案

我在本页中发现:

基本上,您必须定义一个名为LDAP\u OPT\u DIAGNOSTIC\u MESSAGE的新常量变量

像这样

define('LDAP_OPT_DIAGNOSTIC_MESSAGE', 0x0032);
然后

ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);

这样,LDAP将给您提供扩展错误,您将能够知道真正发生了什么,该值将被放入$extended_error中。

您不会向用户显示用户名或密码是否错误!如果您这样做,攻击者可以使用蛮力攻击轻松检查用户名和密码。只要你只说“用户名和密码中有一个是错误的”,你就不能说是哪一个了。因此黑客系统要困难得多。好吧,我知道。但是,有没有办法做到这一点呢?我还找到了下面提到的解决方案,并将其封装在一个很好的函数中。看这里:@abimelex嘿,很好!如果标题与ldap诊断错误关联更多,那就更好了:)。
ldap_get_option($conn, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error);