PHP Conference Japan 2024

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
"错误: " . 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
24 年前
有趣的例子。除了很少有人会出于安全原因允许比较密码属性这一事实之外。属性名称“password”与通常的模式不匹配。

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

由于服务器对密码散列的支持,使用 ns directroy 服务器和 openldap v2+ 的密码值的 Ldap 比较可能会失败。
To Top