我遇到了一些关于通过 LDAP Active Directory 服务器将用户身份验证集成到公司网站的问题。该网站主要在内部用于提供对文件/PDF 的安全访问。该网站可在我们的网络之外访问,因为某些客户还需要能够查看/上传文件以进行订单和验证。我们确实有一个 SSL 证书,用于安全访问该站点,用于内部和外部。
此时,该站点使用PHPPass进行密码处理,同时将用户信息存储在 MS SQL Server 数据库中。需要访问该站点的用户被添加到该数据库中,并注册了帐户级别并使用 phpass 处理密码方面。这种方法非常安全,适用于当前使用情况(内部员工、外部客户的隔离数据)。然而,它也为整个系统引入了更多的故障点。IE:用户需要记住(或忘记)的额外密码以及管理员的额外帐户管理开销。
在计划简化站点的身份验证时,我的任务是集成用于登录的 Active Directory 用户信息。这对我们公司的员工来说可以正常工作,因为他们已经有一个 AD 帐户。但是,这不适用于外部供应商或客户,因为他们没有 AD 帐户(也不应该)进行身份验证。
这让我相信最简单的解决方案是拥有一种“主要”形式的身份验证(针对 AD)和对已经创建的 SQL 用户数据库的后备。在 AD 中返回的用户使用这些凭据,否则在 SQL 数据库中搜索用户(其中将包含我们需要的任何非 AD 帐户)。
问题:
- 上述验证方法是合乎逻辑且安全的计划吗?如果没有,我应该怎么做?
- 如何抵御 LDAP 攻击/暴力破解?
- 在 PHP/SQL 中,利用参数化/类型转换查询、帐户锁定/超时、通用错误消息、正确的密码散列方法等 - 加起来以保护数据库和强制登录尝试
- 对于 ldap_bind,用户名和密码通过网络以明文形式发送到 LDAP 服务器?
- 由于此登录是针对整个网络的,我如何确保我的登录/站点不是安全性最薄弱的环节,或者导致访问密码信息过于容易?
注意:这是在 StackOverflow 上发布的,而不是在 ServerFault 上,因为我的问题是为了安全而对 PHP 网站进行编程。我的问题主要与用户登录时的网站访问、限制和权限问题有关,同时对 AD 或备份数据库进行身份验证。