疯狂的 LDAP (AD) 密码更新问题 (php)
Crazy LDAP (AD) password update problem (php)
我在通过 PHP ldap API.
更新 AD 用户的密码时遇到了一个疯狂的问题
这是我用来更新密码的函数(class 的一部分):
function updatePassword($newPassword){ // works only with LDAPS (LDAP WITH SSL/TLS ENCRYPTION)
$newPassword = "\"". $newPassword. "\"";
$newPassw = "";
$len = strlen($newPassword);
for($i = 0; $i < $len; $i++){
$newPassw .= "{$newPassword{$i}}[=11=]0";
}
$newPassword = $newPassw;
//$newPassword = mb_convert_encoding($newPassword, "UTF-16LE");
$newEntry = array("unicodePwd" => $newPassword);
$dn = $this->getUserInformation()["distinguishedname"];
if(ldap_mod_replace($this->connection, $dn, $newEntry)){
return true;
}
return ldap_error($this->connection);
}
用户更新密码后,新密码有效,但一段时间后,旧密码仍然有效。因此,用户可以使用他的新密码和旧密码登录到我们的 Web 应用程序并进入 windows...
有人知道或知道问题出在哪里吗?
(一些背景信息:
- AD DC 服务器:Windows 服务器 2019 / Windows 服务器 2016
- 网络服务器:带有 Apache 2 (2.25) 的 Debian 9
- PHP 版本 7.4
)
如果有人遇到同样的问题:
几天前我读了一篇文章,其中提到了所描述行为的原因
这是一项 Windows 广告“功能”,可在更改密码后使用户的旧密码在一小时内有效
我在通过 PHP ldap API.
更新 AD 用户的密码时遇到了一个疯狂的问题这是我用来更新密码的函数(class 的一部分):
function updatePassword($newPassword){ // works only with LDAPS (LDAP WITH SSL/TLS ENCRYPTION)
$newPassword = "\"". $newPassword. "\"";
$newPassw = "";
$len = strlen($newPassword);
for($i = 0; $i < $len; $i++){
$newPassw .= "{$newPassword{$i}}[=11=]0";
}
$newPassword = $newPassw;
//$newPassword = mb_convert_encoding($newPassword, "UTF-16LE");
$newEntry = array("unicodePwd" => $newPassword);
$dn = $this->getUserInformation()["distinguishedname"];
if(ldap_mod_replace($this->connection, $dn, $newEntry)){
return true;
}
return ldap_error($this->connection);
}
用户更新密码后,新密码有效,但一段时间后,旧密码仍然有效。因此,用户可以使用他的新密码和旧密码登录到我们的 Web 应用程序并进入 windows...
有人知道或知道问题出在哪里吗?
(一些背景信息:
- AD DC 服务器:Windows 服务器 2019 / Windows 服务器 2016
- 网络服务器:带有 Apache 2 (2.25) 的 Debian 9
- PHP 版本 7.4 )
如果有人遇到同样的问题:
几天前我读了一篇文章,其中提到了所描述行为的原因 这是一项 Windows 广告“功能”,可在更改密码后使用户的旧密码在一小时内有效