gpt4 book ai didi

带有 TLS 的 PHP 用于安全 LDAP

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:39 25 4
gpt4 key购买 nike

我正在尝试使用远程 LDAP 服务器。为了安全起见,我试图只使用安全连接。我能够让一些代码工作,但我不确定,考虑到 start TLS 本身的 PHP 文档,如果以下代码仅在安全通道上工作。有人可以帮忙吗?

$is_valid_user = FALSE;

try {
$ds = ldap_connect('ldap.foo.com', 389);
if (! ldap_set_option($ds, LDAP_OPT_REFERRALS, 0)) {
return "";
}

if (! ldap_start_tls($ds)) {
return "";
}
} catch(Exception $e) {
return "";
}

if (! ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
$error = "LDAP Server protocol error.";
return "";
}

try {
$bnd = @ldap_bind($ds, 'uid='.$user.', ou=people, dc=ldap, dc=foo, dc=com' , $passwd);

if ($bnd) {
$is_valid_user = TRUE;

$srch=ldap_search($ds, 'dc=ldap, dc=foo, dc=com', "uid=$user");
$info=ldap_get_entries($ds, $srch);
$userdn=$info[0]["dn"];
$usernm=$info[0]["cn"][0];

return $usernm;
} else {
return "";
}
} catch(Exception $e) {
return "";
}

最佳答案

下面只是一些一般性的改进。是的,除非通过 TLS 加密连接,否则它不会继续。 LDAP 模块目前不会抛出任何异常,因此实际上并不需要 try/catch block 。如果不查看其余代码很难判断,但是您是否有理由想要返回一个空字符串而不是 falsenull 或某种错误消息?

$is_valid_user = false;

$ds = ldap_connect('ldap.foo.com', 389);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

if (!@ldap_start_tls($ds)) {
return "";
}

$bindUser = 'uid='.ldap_escape($user, null, LDAP_ESCAPE_DN).',ou=people,dc=ldap,dc=foo,dc=com';
if (@ldap_bind($ds, $bindUser , $passwd)) {
$is_valid_user = true;

$srch = ldap_search($ds, $bindUser, '(objectClass=*)', ['cn']);
$info = ldap_get_entries($ds, $srch);
$userdn = $info[0]["dn"];
$usernm = $info[0]["cn"][0];

return $usernm;
} else {
return "";
}

还有几个可用的 LDAP 库可以使 LDAP 使用 PHP 变得更加容易。我会推荐LdapToolsadldap2 .

关于带有 TLS 的 PHP 用于安全 LDAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com