获取LDAP和PHP中的AD错误数(LDAP函数返回不精确错误)
我正在使用PHP制作一个应用程序,使用LDAP协议连接到Active Directory(AD) 工作正常,我的问题是如何在登录操作失败时捕获特定错误。现在,应用程序只显示登录是否有效,例如:假设用户名在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
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);