use*_*859 0 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/>";
}
Run Code Online (Sandbox Code Playgroud)
现在,我使用注释行“ 3”,得到:
Connected
Invalid credentials
Run Code Online (Sandbox Code Playgroud)
如果使用注释行“ 1”或“ 2”,请获取:
Connected
Invalid DN syntax
Run Code Online (Sandbox Code Playgroud)
如果使用注释行“ 4”(这是匿名用户),请获取:
Connected
Binded
Run Code Online (Sandbox Code Playgroud)
这是在Ubuntu 12下开发的。
为什么我从注释行“ 3”收到无效的凭证错误?如何正确绑定身份验证?提前致谢!
无论文档说什么,该ldap_bind功能似乎都需要DN而不是RDN。如果是这样,则:
{$user}@{$domain}不是正确格式的DN,因此:Invalid DN syntaxtest格式不正确的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
Run Code Online (Sandbox Code Playgroud)
这ldapsearch绑定到目录为'UID =测试,DC = CI,DC = myCompany中,DC = com的'使用密码testpass并获取DN中的uid=test条目。如果此操作因“无效的凭据”错误而失败,则存在以下可能性:
testpass 不是正确的密码uid=test条目不存在。上面的要点说明,这将导致“无效的凭据”。告诉攻击者没有条目是没有意义的,这将为攻击者提供其他信息(他要尝试的DN少一些)。为了使用正确的行话:
$ldaprdn不是RDN,而是DN。RDN是DN的组成部分| 归档时间: |
|
| 查看次数: |
16826 次 |
| 最近记录: |