PHP - ldap_search()过滤器。如何搜索用户
问题描述:
$ _SERVER ['REMOTE_USER']返回登录到Active Directory的用户的用户名。我想通过使用ldap_search()来检索这个用户信息。PHP - ldap_search()过滤器。如何搜索用户
这是我现在有:
$ad = // ldap_connection id
$filter = "(|(sn=$username*)(givenname=$username*))";
$attr = array("displayname", "mail", "mobile", "homephone", "telephonenumber", "streetaddress", "postalcode", "physicaldeliveryofficename", "l");
$dn = // OU, DC etc..
ldap_search($ad,$dn,$filter,$attr);
它的工作原理,但我不知道,如果两个用户几乎具有相同的名称,将工作。 我如何只搜索他们的唯一用户名,以便我只能得到一个用户?
答
sAMAccountName
在Active Directory中使用的用户名,属性,所以(&(objectClass=user)(sAMAccountName=%s))
会(通过实际的用户名被自然替换%s
)正确的过滤器来检查给定用户名的LDAP。
请注意,你需要处理特殊字符在$username
避免畸形的过滤器或在最坏的恶意LDAP注射(见RFC 2254):
与ACII 代码的任何控制字符< 32以及字符 与LDAP过滤器 特殊含义“*”,“(”,“)”,和“\”(反斜线) 被转换成反斜线的表示 随后是代表两个十六进制 数字十六进制mal 字符的值。
答
ldap_search()
会找到所有匹配的条目,您将不得不验证结果。 假设$link
是你的链接到与ldap_connect()
ldap_get_entries($连接,$结果)创建的LDAP数据库 您可以验证这样的:
$result = ldap_search();
if(ldap_count_entries($link, $result) === 1) {
...
}
或
$result = ldap_search();
$entries = ldap_get_entries($link, $result);
if(sizeof($entries) === 1) {
...
}
$过滤器=“(SAM帐户= $用户名)“; horgen 2010-05-28 07:33:32