ldap_compare

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

ldap_compare比较在 DN 指定条目中找到的属性的值

描述

ldap_compare(
    LDAP\Connection $ldap,
    string $dn,
    string $attribute,
    string $value,
    ?array $controls = null
): bool|int

比较 attributevalue 与 LDAP 目录条目中相同属性的值。

参数

ldap

一个 LDAP\Connection 实例,由 ldap_connect() 返回。

dn

LDAP 实体的识别名称。

attribute

属性名称。

value

比较的值。

controls

要与请求一起发送的 LDAP 控制 数组。

返回值

如果 value 匹配,则返回 true,否则返回 false。如果出错,则返回 -1。

变更日志

版本 描述
8.1.0 现在 ldap 参数需要一个 LDAP\Connection 实例;以前,需要一个有效的 ldap link 资源
8.0.0 现在 controls 可为空;以前,它默认为 []
7.3.0 添加了对 controls 的支持

范例

以下示例演示如何检查给定密码是否与 DN 指定条目中定义的密码匹配。

范例 #1 密码检查的完整示例

<?php

$ds
=ldap_connect("localhost"); // 假设 LDAP 服务器在此主机上

if ($ds) {

// 绑定
if (ldap_bind($ds)) {

// 准备数据
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";

// 比较值
$r=ldap_compare($ds, $dn, $attr, $value);

if (
$r === -1) {
echo
"Error: " . ldap_error($ds);
} elseif (
$r === true) {
echo
"密码正确.";
} elseif (
$r === false) {
echo
"猜测错误!密码不正确.";
}

} else {
echo
"无法绑定到 LDAP 服务器.";
}

ldap_close($ds);

} else {
echo
"无法连接到 LDAP 服务器.";
}
?>

注意

警告

ldap_compare() 不能用于比较二进制值!

添加备注

用户贡献的备注 4 则备注

chuck+ldap at 2006 dot snew dot com
20 年前
只是一个附注,这并不是你通常验证某人的方法,只是一个示例代码。

常见的验证方法是获取用户的姓名,使用搜索并可能选择用户以获取她的 DN(单值),然后尝试使用该 dn 和提供的密码绑定到 ldapserver。如果成功,那么它就是正确的密码。

请注意,提供的密码必须不为空,否则许多 LDAP 会假设你想要匿名验证,并且它会成功,让你误以为是正确的密码。
oudejans at zeelandnet dot nl
19 年前
使用 PHP 4.3.* 后,Password 不再是一个有效的属性了。尝试使用 userPassword
Brian Kerhin &lt;kerhin at bigfoot dot com&gt;
23 年前
不是可能,而是将会。使用 PHP 4.0.4 和 openldap 1.2.9,即使使用密码的正确属性,这个小脚本也无法完成工作。如果它能做到就好了!
334647 at swin dot edu dot au
23 年前
有趣的示例。除了很少有人会允许出于安全原因对密码属性进行比较之外。属性名称 "password" 与通常的模式不匹配。

用户 ID + 密码验证的通常方法是尝试使用提供的凭据进行绑定。

对于 ns 目录服务器和 openldap v2+,由于服务器支持密码散列,因此对密码值的 ldap_compare 可能会失败。
To Top