Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP用户身份验证和安全方法:LDAP-AD和SQL Server_Php_Sql_Security_Authentication_Ldap - Fatal编程技术网

PHP用户身份验证和安全方法:LDAP-AD和SQL Server

PHP用户身份验证和安全方法:LDAP-AD和SQL Server,php,sql,security,authentication,ldap,Php,Sql,Security,Authentication,Ldap,我遇到了一些关于通过LDAP Active Directory服务器将用户身份验证集成到公司网站的问题。该网站主要用于内部安全访问文件/PDF。该网站可在我们的网络之外访问,因为某些客户还需要能够查看/上传其订单和验证文件。我们有一个SSL证书,用于安全访问网站,无论是内部还是外部 此时,站点将用于密码处理,同时将用户信息存储在MS SQL Server数据库中。需要访问该站点的用户将添加到此数据库,并注册帐户级别,phpass处理密码方面。此方法非常安全,并且适用于当前使用(内部员工、外部客户

我遇到了一些关于通过LDAP Active Directory服务器将用户身份验证集成到公司网站的问题。该网站主要用于内部安全访问文件/PDF。该网站可在我们的网络之外访问,因为某些客户还需要能够查看/上传其订单和验证文件。我们有一个SSL证书,用于安全访问网站,无论是内部还是外部

此时,站点将用于密码处理,同时将用户信息存储在MS SQL Server数据库中。需要访问该站点的用户将添加到此数据库,并注册帐户级别,phpass处理密码方面。此方法非常安全,并且适用于当前使用(内部员工、外部客户的隔离数据)。然而,它也为整个系统引入了更多的故障点。IE:用户需要记住(或忘记)的额外密码和管理员的额外帐户管理开销

在计划简化站点的身份验证时,我的任务是集成用于登录的Active directory用户信息。这对我们公司的员工来说很好,因为他们已经有了一个广告账户。但是,此对外部供应商或客户不起作用,因为他们没有(也不应该)可进行身份验证的AD帐户

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

问题:

  • 上述验证方法是否符合逻辑且安全的计划??如果没有,我应该怎么做
  • 如何防止LDAP攻击/暴力?
    • 在PHP/SQL中,利用参数化/类型转换查询、帐户锁定/超时、一般错误消息、正确的密码散列方法等,可以保护数据库和强制登录尝试
    • 对于ldap_bind,用户名和密码通过网络发送到ldap服务器的clear
  • 由于此登录是针对整个网络的,我如何确保我的登录/站点不是安全性的最薄弱环节,或导致访问密码信息的过度便利

注意:这篇文章发表在StackOverflow上,而不是ServerFault上,因为我的问题是如何为PHP网站的安全性编程。我的问题主要涉及用户登录AD或备份数据库进行身份验证时的网站访问、限制和权限问题。

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

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


与服务器通信时,应使用ldaps以防止在无障碍情况下传输。除非你使用Zend server for MAC,否则它运行得很好(它的特定版本的PHP不喜欢ldaps,会挂起服务器),并且会阻止人们嗅探你的流量,使你的网站成为最薄弱的环节。此外,永远不要在您的站点上存储用户的密码,并确保在登录页面上使用https。

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

我接受您的答案,即使它在技术上无法回答问题。拥有两个用户数据库的额外管理开销和故障点/攻击向量并不理想。我已经将外部帐户添加到广告中,其中有一个非常锁定的GP,它还拒绝本地登录和其他不必要的网络访问。