【问题标题】:LDAP bind using POST variable for UID?使用 POST 变量作为 UID 的 LDAP 绑定?
【发布时间】:2013-05-13 11:31:29
【问题描述】:

我正在开发一个使用 LDAP 对用户进行身份验证的登录表单。但是我不知道如何将用户名作为 POST 变量与 DN 凭据一起传递。这允许我从登录表单发送密码:

<?php
// using ldap bind
$ldaprdn  = 'uid=my.name,cn=XXX,dc=XXX,dc=XXX,dc=XXX';     // ldap rdn or dn
$ldappass = $_POST['userPassword'];  // user password

// connect to ldap server
$ldapconn = ldap_connect("server.domain.com")
        or die("Could not connect to LDAP server.");

// Set some ldap options for talking to 
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);

if ($ldapconn) {

        // binding to ldap server
        $ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass);

        // verify binding
        if ($ldapbind) {
            echo "LDAP bind successful...\n";
        } else {
            echo "LDAP bind failed...\n";
        }
}
?>

但是,当尝试将 POST 变量中包含的值附加到 CN 和 DN 值时,情况并非如此。

<?php
// using ldap bind
$ldaprdn  = "uid = . $_POST['userLogin'] . 'cn=XXX,dc=XXX,dc=XXX,dc=XXX'";    // ldap  rdn or dn
$ldappass = $_POST['userPassword'];  // user password

// connect to ldap server
$ldapconn = ldap_connect("server.domain.com")
        or die("Could not connect to LDAP server.");

// Set some ldap options for talking to 
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);

if ($ldapconn) {

        // binding to ldap server
        $ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass);

        // verify binding
        if ($ldapbind) {
            echo "LDAP bind successful...\n";
        } else {
            echo "LDAP bind failed...\n";
        }
}
?>

可以这样实现吗?我相信我只能使用 LDAP_bind 函数传递三个变量,

非常感谢

【问题讨论】:

  • 客户端使用userLogin的情况下服务器日志记录什么?
  • 嗨,我收到一个错误:slapd[41]: conn=22795 op=0 do_bind: invalid dn (cn=XXX, dc=XXX, dc=XXX,dc=XXX, uid=$ _POST["userLogin"]') 谢谢

标签: php ldap


【解决方案1】:

您在此处错误地使用了引号并漏掉了一个逗号:

$ldaprdn  = "uid = . $_POST['userLogin'] . 'cn=XXX,dc=XXX,dc=XXX,dc=XXX'";

应该是

$ldaprdn  = 'uid =' . $_POST['userLogin'] . ',cn=XXX,dc=XXX,dc=XXX,dc=XXX';

$ldaprdn  = "uid =$_POST['userLogin'],cn=XXX,dc=XXX,dc=XXX,dc=XXX";

请记住,在变量周围使用单引号不会将变量解析为其值(因此需要连接),但使用双引号会。 最重要的是:永远不要直接在脚本中使用用户输入的数据——验证输入或至少使用 htmlentities() 或 strip_tags()...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2018-08-13
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多