我遇到了一些关于通过LDAP Active Directory服务器将用户身份验证集成到公司网站的问题。该网站主要用于内部安全访问文件/ PDF。该网站可在我们的网络外访问,因为某些客户还需要能够查看/上传文件以进行订购和验证。我们确实拥有SSL证书,可以安全访问网站,内部和外部。
目前,该网站使用PHPass进行密码处理,同时将用户信息存储在MS SQL Server数据库中。需要访问该站点的用户将添加到此数据库,并注册帐户级别并处理密码方面的phpass。这种方法非常安全,适用于当前使用(内部员工,外部客户的隔离数据)。然而,它也为整个系统引入了更多的故障点。 IE:用户记住(或忘记)的额外密码以及管理员的额外帐户管理开销。
在计划简化站点的身份验证时,我的任务是集成Active目录用户信息以用于登录。这对我们公司的员工来说很好,因为他们已经有了AD帐户。但是,不会为外部供应商或客户工作,因为他们没有AD帐户(也不应该)进行身份验证。
这让我相信最简单的解决方案是使用“主要”形式的身份验证(针对AD)以及针对已创建的SQL用户数据库的回退。在AD中返回的用户使用这些凭据,否则在SQL DB中搜索用户(其中包含我们需要的任何非AD帐户)。
问题:
注意:这是发布在StackOverflow而不是ServerFault,因为我的问题是编写PHP网站以确保安全性。我的问题首先涉及用户登录的网站访问,限制和权限问题WHILE向AD或备份数据库进行身份验证。
答案 0 :(得分:0)
如果查看Drupal,LDAP身份验证模块几乎完全相同:如果找不到用户的Drupal帐户(即对于您的承包商),它将转到LDAP并尝试对其进行身份验证。对于LDAP,它不会将密码存储在自己的数据库中。所以,是的,您的计划之前已经完成,似乎或多或少被接受了。我曾经制作了一个使用drupal登录的drupal模块,如果CAS系统不在线,则使用带有LDAP后备的CAS系统。
通过域级白名单来保护LDAP服务器免受强力攻击。我在一所大学工作,该大学使用LDAP服务器处理大多数事情,一些信息属于公共领域,而一些信息是隐藏的,因此它们符合各种联邦法律。某些信息只能通过大学网络的请求访问,同时使用具有足够权限访问信息的帐户(即电子邮件,未列出的地址等)绑定到服务器。只要您的密码良好并经常更改,就应该没问题。你总是可以限制使用LDAP只对某些服务进行身份验证,然后建立你的网站或LDAP服务器(我不知道它是否可以像这样配置......但是谁知道呢?它可能会跟踪失败的数量)登录尝试并让人在5次尝试失败后等待5分钟或其他事情。
与服务器通信时,应使用ldaps以防止以明文形式进行传输。除非您使用Zend服务器进行MAC,否则它的效果非常好(它所拥有的特定版本的PHP不喜欢ldaps并且会挂起服务器)并且会阻止人们嗅探您的流量并使您的网站成为最薄弱的环节。此外,永远不要在您的网站上存储人们的密码,并确保在登录页面上使用https。
答案 1 :(得分:0)
他们目前没有LDAP帐户,这不是制作双层应用程序的原因。这不仅仅是易受攻击的两倍 - 因为通过实现自己的身份验证后端,您还需要实现与之相关的所有用户管理员。只需为外部用户添加帐户,但不允许他们访问您的任何工作站。