2012-04-25 135 views
1

我遇到过几个关于通过LDAP Active Directory服务器将用户认证集成到公司网站的问题。该网站主要用于内部安全访问文件/ PDF。该网站可在我们的网络外部访问,因为某些客户还需要能够查看/上传文件以进行订单和验证。我们确实有一个SSL证书,用于安全访问该网站,适用于内部和外部。PHP用户认证和安全方法:LDAP-AD和SQL Server

目前,该站点使用PHPass进行密码处理,同时将用户信息存储在MS SQL Server数据库中。需要访问该网站的用户将被添加到此数据库中,并注册帐户级别并处理密码方面的问题。此方法非常安全,对于当前使用情况(内部员工,为外部客户分离的数据)工作良好。但是它也引入了整个系统的更多故障点。 IE:用户需要记住(或忘记)的其他密码以及管理员额外的帐户管理开销。

在计划简化网站身份验证时,我负责整合Active Directory用户信息以便用于登录。这对我们公司的员工会很好,因为他们已经有一个AD帐户。但是,不会为供外部供应商或客户使用,因为他们没有AD帐户(也不应该)进行身份验证。

这使我相信最简单的解决方案是有一个“主要”形式的身份验证(针对AD)和对已经创建的SQL用户数据库的回退。像AD一样回来的用户使用这些凭证,或者搜索用户的SQL DB(其中包含我们需要的任何非AD帐户)。

问题:

  • 是核查上述方法的逻辑和安全的计划? 如果不是,我该怎么做呢?
  • 如何防范LDAP攻击/蛮力?
    • 在PHP/SQL,利用参数/类型转换查询,帐户锁定/超时,一般错误信息,正确的密码哈希方法,等等 - 增加了用于固定的数据库和强制登录尝试
    • 有关的ldap_bind,用户名和密码是通过网络发送到LDAP服务器的清晰?
  • 由于此登录对于整个网络,我怎么能保证我的登录/网站是不是安全的最薄弱的环节,或造成不应有的四通八达的交通网络密码信息?

注意:这是张贴在StackOverflow上,而不是ServerFault,因为我的问题是编程PHP网站的安全性。我的问题首先涉及用户登录网站的访问权限,限制和权限问题,同时向AD或备份数据库进行身份验证。

回答

0

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

+0

我接受你的答案,即使它不*技术*回答这个问题。具有两个用户数据库的额外管理开销和故障点/攻击媒介并不理想。我已经将外部帐户添加到了AD,并且使用了非常锁定的GP,该GP也拒绝了本地登录和其他不需要的网络访问。 – PenguinCoder 2012-05-08 15:10:37

0

如果您看看Drupal,LDAP身份验证模块的功能几乎相同:如果无法为用户(即您的承包商)找到Drupal帐户,它将转至LDAP并尝试向其进行身份验证。在LDAP的情况下,它不会将密码存储在自己的数据库中。所以,是的,你的计划已经完成,似乎或多或少被接受。我曾经创建过一个使用drupal登录的drupal模块,如果CAS系统不在线,那么它就是一个带有LDAP后备的CAS系统。

通过域级白名单来防止强制使用LDAP服务器。我在一所使用LDAP服务器的大学工作,其中一些信息处于公有领域,而另一些信息则隐藏起来以便遵守各种联邦法律。某些信息只能通过来自大学网络的请求访问,同时绑定到服务器的帐户具有足够的权限访问信息(即电子邮件,未列出的地址等)。只要你的密码很好,并定期更换,应该没问题。你总是可以限制使用LDAP来验证某些服务,并使你的网站或LDAP服务器(我不知道它是否可以像这样配置......但是谁知道呢?也许可能)跟踪失败的次数尝试登录并使该人在5次失败尝试后等待5分钟。

当与服务器进行通信时,应该使用ldaps来避免传输。除非你使用Zend服务器进行MAC,否则这种方式效果很好(它的特定版本的PHP不喜欢ldaps并会挂起服务器),并且会阻止人们嗅探你的流量并使你的网站成为最薄弱的环节。此外,绝对不要在用户的网站上存储用户的密码,并确保在登录页面上使用https。