2011-09-29 88 views
0

假设一个应用程序可以配置为使用LDAP服务器 - 无论是ActiveDirectory还是OpenLDAP等 - 用于对其用户进行身份验证并检索有关用于授权目的的一些附加信息。应用程序绑定到LDAP服务器的方式也是可配置的 - 它可以使用简单或SASL绑定,具体取决于LDAP服务器支持的内容和整体安全要求。检查LDAP服务器的凭证

假设如果绑定成功与用户提供的任何凭据,那么它必须表示这些凭据是有效的。然而,情况并非总是如此;可能会发生简单的绑定成功,即使在提供空密码的情况下,实际上也会出现非空密码。根据RFC about LDAP authentication methods,具有非空用户名和空密码的简单绑定被解释为意图通过匿名授权建立未经身份验证的连接。可以将服务器配置为通过unwillingToPerform尝试失败,但也可以允许它们。

问题是:在这种情况下,应用程序可以配置为使用各种LDAP服务器,并以可配置的方式绑定 - 简单或通过SASL - 是否有明确检查用户凭据的方式针对特定的LDAP服务器输入内容,而不是试图绑定这些凭据,因为简单的绑定会导致误报?

谢谢,我期待着您的回复。

回答

0

当然,你所要做的就是禁止或者甚至只记得密码为空的情况?

+0

事实上,一种可能性是不允许预先提供空密码。但是,我试图找出是否有另一种方法来解决这个问题。 –

+0

@Catalina Caloian'甚至只记得'。有3例。 1.服务器不允许没有密码的简单身份验证:问题消失了。 2.用户没有输入密码,用户输入密码:没问题;这是你正在试图识别的情况。 3.用户没有密码=>这不是你的问题,这是一个不安全的服务器;没有办法检查凭据,因为没有凭据要检查。 – EJP

+0

我试图使用'ldap_compare'比较'用户密码'的值与用户提供的一个,如[这里]指出的(http://stackoverflow.com/questions/4066265/ldap-how-to-check-一个-用户名 - 密码的组合)。但是,它似乎不适用于ActiveDirectory,并且这是一个显示屏。最后,我添加了一个不允许空密码的设置。 –

0

在PHP中,至少,你就必须做到这一点:

<?php 
$ds = ldap_connect($ip_address); 
if(@ldap_bind($ds, $username, $password) { 
    // Login successful! 
} else { 
    // Login unsuccessful :(
} 
?> 

你的情况可能与其他语言不同,但是这很适合我。