php LDAP无效凭据

时间:2013-12-11 19:39:29

标签: php authentication ldap

我的代码是:

$user = 'test';
$password = 'testpass';
$host = '10.1.1.1';
$port = 389;
$basedn = 'dc=ci,dc=mycompany,dc=com';
$group = 'Users';
$ldaprdn = 'uid=test,dc=ci,dc=mycompany,dc=com';

$ad = ldap_connect("ldap://$host", $port);
if ($ad) {
    echo "Connected" . "<br/>";
} else {
    echo ldap_error($ad) . "<br/>";
}
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);

//  $ldapBind = ldap_bind($ad, "{$user}@{$domain}", $password); // 1.
//  $ldapBind = ldap_bind($ad, $user, $password); // 2.
    $ldapBind = ldap_bind($ad, $ldaprdn, $password); // 3.
//  $ldapBind = ldap_bind($ad, null, null); // 4.

if ($ldapBind) {
    echo "Binded" . "<br/>";
} else {
    echo ldap_error($ad) . "<br/>";
}

现在我使用注释行“3”,获取:

Connected
Invalid credentials

如果使用注释行“1”或“2”,请获取:

Connected
Invalid DN syntax

如果使用注释行“4”(这是匿名),请获取:

Connected
Binded

这是在Ubuntu 12下开发的。

为什么我从评论专栏“3”获得无效的凭据错误?如何正确绑定身份验证? 提前致谢!

3 个答案:

答案 0 :(得分:4)

ldap_bind功能似乎需要 DN ,而不是 RDN ,无论文档说什么。如果是这种情况,那么:

  • 编号1. {$user}@{$domain}格式不正确的DN,因此:Invalid DN syntax
  • 数字2:test格式不正确的DN,因此:Invalid DN syntax

有关 DN 格式的字符串表示形式的信息,请参阅RFC4514

使用已知的好工具验证

据我所知,3号是提供的四个中唯一正确的一个。 Directory Server在BIND响应中指出,它无法验证提供的密码testpass是否与存储在其数据库中的密码相匹配。在这种情况下,我建议使用ldapsearch等已知的好工具检查密码。

ldapsearch -h hostname -p port              \
    -D 'uid=test,dc=ci,dc=mycompany,dc=com' \
    -w 'testpass' -s base '(&)' 1.1

使用密码ldapsearchtestpass目录绑定到目录'uid = test,dc = ci,dc = mycompany,dc = com'并检索 DN uid=test条目。如果失败并显示“无效凭据”错误,则存在以下可能性:

  • testpass不是正确的密码
  • 无论真正的错误是什么,都可以配置一些目录服务器将结果代码设置为“无效凭据”。这样做的原因是隐瞒攻击者的信息
  • uid=test条目不存在。上面的要点解释了这将导致“无效凭据”。没有必要告诉攻击者一个条目不存在 - 这将为攻击者提供额外的信息(他只有一个DN可以尝试)。

行话和LDAP发言

为了使用正确的术语:

  • $ldaprdn不是RDN,它是DN。 RDN是DN的组成部分

另见

答案 1 :(得分:0)

我发现问题,$ ldaprdn ='uid = test,dc = ci,dc = mycompany,dc = com'与LDAP服务器上的不一样,更改后运行良好。

答案 2 :(得分:0)

@ Annamalai.Somasundaram,

DN应该传递类似 cn = test,ou = Users,dc = ci,dc = mycompany,dc = com

可以在特定的LDAP服务器上找到正确的拼写