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,
    字串 $dn,
    字串 $attribute,
    字串 $value,
    ?陣列 $controls = null
): 布林值|整數

比較 attributevalue 值與 LDAP 目錄項目中相同屬性的值。

參數

ldap

一個 LDAP\Connection 實例,由 ldap_connect() 返回。

dn

LDAP 實體的識別名稱 (Distinguished Name)。

attribute

屬性名稱。

value

要比較的數值。

controls

要與請求一起發送的 LDAP 控制項 陣列。

傳回值

如果 value 匹配,則傳回 true,否則傳回 false。發生錯誤時傳回 -1。

更新日誌

版本 說明
8.1.0 ldap 參數現在需要一個 LDAP\Connection 實例;以前需要一個有效的 ldap link 資源
8.0.0 controls 現在可以為 null;以前,它的預設值為 []
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 和提供的密碼嘗試綁定到 LDAP 伺服器。如果成功,則表示密碼正確。

請注意,提供的密碼「不得為空」,否則許多 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」這個屬性名稱與常見的 schema 不符。

驗證使用者 ID 和密碼的常用方法是嘗試使用提供的憑證進行綁定。

由於伺服器支援密碼雜湊,使用 ns directory server 和 openldap v2+ 對密碼值進行 Ldap 比較可能會失敗。
To Top