1

我遇到了一些关于通过 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 或备份数据库进行身份验证。

4

2 回答 2

0

他们目前没有 LDAP 帐户并不是制作两层应用程序的理由。这不仅是易受攻击的两倍——因为通过实施您自己的身份验证后端,您还需要实施所有与之相关的用户管理员。只需为外部用户添加帐户,但不允许他们访问您的任何工作站。

于 2012-04-26T15:49:42.840 回答
0

如果您查看 Drupal,LDAP 身份验证模块的作用几乎相同:如果它找不到用户(即您的承包商)的 Drupal 帐户,它会转到 LDAP 并尝试在那里进行身份验证。对于 LDAP,它永远不会将密码存储在自己的数据库中。所以是的,你的计划之前已经完成,似乎或多或少被接受了。我曾经制作了一个使用 drupal 登录的 drupal 模块,然后如果 CAS 系统不在线,则使用带有 LDAP 回退的 CAS 系统。

保护 LDAP 服务器免受暴力破解通常是通过域级白名单来完成的。我在一所大学工作,该大学几乎所有事情都使用 LDAP 服务器,有些信息在公共领域,而有些信息是隐藏的,因此它们符合各种联邦法律。某些信息只能通过来自大学网络的请求访问,同时绑定到具有足够权限访问信息的帐户(即电子邮件、未列出的地址等)的服务器。只要您的密码正确并定期更改就可以了。您始终可以将 LDAP 用于仅对某些服务进行身份验证,并使您的网站或 LDAP 服务器(我不知道是否可以这样配置... 但谁知道呢?它可能)跟踪失败的登录尝试次数,并让该人在 5 次失败尝试后等待 5 分钟或其他时间。

在与服务器通信时,您应该使用 ldaps 来避免明文传输。除非您为 MAC 使用 Zend 服务器,否则它工作得很好(它所拥有的特定版本的 PHP 不喜欢 ldaps 并且会挂起服务器)并且会阻止人们嗅探您的流量并使您的网站成为最薄弱的链接。此外,切勿将人们的密码存储在您的网站上,并确保他们在登录页面上时使用的是 https。

于 2012-04-26T14:16:51.557 回答