Php 在会话中存储LDAP连接和绑定

Php 在会话中存储LDAP连接和绑定,php,ldap,session-variables,Php,Ldap,Session Variables,我已经编写了一个应用程序,其中用户通过LDAP进行身份验证和登录。这非常有效,我只需使用他们的凭据执行一个ldap\u bind(),如果是真的,则对他们进行身份验证——否则,告诉他们放弃它。我可以将他们的用户名保存在会话变量中,以便知道他们是谁 现在,应用程序的一部分要求用户搜索LDAP以查找其他用户。我已经使用并实现了这一点,它运行得非常好-用户只需输入用户名、名字或姓氏,所有可能的匹配项都会被建议。可爱的:) 但是,corporate IT甚至不允许匿名浏览网络中的目录,因此,现在,我将用

我已经编写了一个应用程序,其中用户通过LDAP进行身份验证和登录。这非常有效,我只需使用他们的凭据执行一个
ldap\u bind()
,如果是真的,则对他们进行身份验证——否则,告诉他们放弃它。我可以将他们的用户名保存在会话变量中,以便知道他们是谁

现在,应用程序的一部分要求用户搜索LDAP以查找其他用户。我已经使用并实现了这一点,它运行得非常好-用户只需输入用户名、名字或姓氏,所有可能的匹配项都会被建议。可爱的:)

但是,corporate IT甚至不允许匿名浏览网络中的目录,因此,现在,我将用户名和密码存储在
$\u SESSION
中,以便每次调用autocomplete脚本时都可以执行新绑定。我知道它是相当安全的,而且这个工具只是内部的,但这感觉像是我不应该做的事情,如果它被“释放到野外”,我肯定不会做

我想做的是在他们登录时创建到LDAP的绑定,然后在整个会话中以某种方式记住此身份验证,这样我们就可以执行所需的任意多个搜索,而无需每次重新进行身份验证。我无法访问服务器,因此无法更改服务器上的任何内容。我能否以某种方式将成功的绑定存储在
$\u SESSION
中并重用它

如果这不是一个相对简单的问题,那么对于如何实现这一点,有人有其他建议吗?

  • 与LDAP兼容服务器的初始连接是匿名的
  • 成功的绑定请求会更改连接的身份验证状态
  • 不成功的绑定请求(或具有零长度DN和密码的绑定请求)将身份验证状态重置为匿名
因此,一旦连接经过身份验证,并且在成功处理绑定请求之前,连接将保持其身份验证状态。这意味着在服务器或客户端关闭连接之前,可以保持连接打开,并在连接上传输操作

请注意,符合LDAP的服务器可以选择发送未经请求的通知,该通知不是对客户端请求的响应。现代、专业质量的服务器将使用此机制通知客户端,服务器出于任何原因正在关闭连接

简言之,保持连接并继续使用。更好的方法是建立一个到服务器的连接的身份验证池

更新:


与LDAP兼容服务器的连接可以保持打开状态,并且可以根据客户机的需要(并且服务器允许)用于任意数量的事务(请求-响应对)。LDAP允许每个连接有多个事务,还允许异步连接。

您不能序列化资源类型(这是LDAP\u connect()返回的)

在类似的情况下,我们所做的是使用一个特定的LDAP帐户,该帐户只对LDAP树(以及特定类型的数据,如姓名、姓氏、电子邮件)具有搜索权限,而没有其他权限。此用户的帐户凭据存储在数据库中


也许为了应用第二级安全性,您可以允许该用户仅从特定的IP连接(我认为LDAP服务器支持这一点,但我不是100%确定)。因此,即使凭据被破坏,它们实际上也是无用的

您甚至可以限制这个专用用户以防止DOS攻击吗?@Will,这肯定是可取的,特别是在无法链接到特定IP的情况下,这一点很好。安全说明:
ldap_bind()
如果密码为空且LDAP服务器配置为接受匿名身份验证,则返回
true
。因此,请确保转义特殊字符,然后检查
length>0
@Morris Fauntleroy您是否能够找到解决方案。