2011-02-04 124 views
3

我有一个内置的,现在具有存储用户凭据访问另一个系统的需求的Web应用程序。 (尽可能多的我想不是做到这一点,很不幸我在这件事上没有选择。)在数据库中安全地存储用户凭据,PHP的Web应用程序

我的web应用程序通过LDAP与Windows域控制器接口来验证用户帐户。所以,当用户登录到我的应用程序时,应用程序将检查LDAP以确保它们是有效的用户,并且他们的密码是正确的。一旦通过身份验证,用户的杂项数据就会从MySQL数据库中加载。

现在,我需要存储用户名和密码在此数据库这个其他系统不知何故,我正在探索的最安全的方式做到这一点。

一种方法我已经考虑了加密证书使用用户的域密码,这个其他系统(如LDAP验证)作为加密密钥。这样,如果某人以某种方式获得了数据库,那么它就没有多大用处,因为每个记录都将用不同的(有希望的)密钥加密,并且该密钥不会出现在任何地方的Web应用程序中。此方法的问题在于,当用户更改其密码时,其他系统保存的凭证不再有效。然后,我将不得不再次提示输入其他系统凭据。如果没有其他方法,我并不反对这样做。

有什么想法?感谢您的时间。

编辑:我刚刚想到的其他一些内容是基于LDAP的其他一些数据进行加密。一个看起来有希望的值(也可能对域中的任何人不安全)是objectGUID,我认为这是该帐户的GUID。我可能会使用这个加密密钥。这是很容易找到域用户或其他人?

编辑#2:我发现任何域用户都可以通过LDAP轻松查找GUID,所以我决定使用这种方法。除非有其他建议,否则我可能需要根据用户密码进行加密。

回答

1

在没有其他的建议,我会简单地使用加密用户密码的辅助凭据。这并不理想(因为我将在更新数据时丢失数据),但此时应该足够用于我的特定项目。

1

你可能想看看是否其他系统支持这样做的任何标准方法“单点登录。”这样你不必重新发明wheel

+0

是的,那是我走下的第一条路。它确实支持SSO,如果我们从公司购买一个模块,就可以获得巨额资金。食物链上的人们说不。可悲的是,我也无法在不损害我们的支持合同的情况下进行破解。 – Brad 2011-02-04 15:56:20

+0

我也应该注意到SSO并不完全是我想要实现的。我需要用户的凭据从这个其他系统提取一个Feed。我不关心他们必须登录两次,但是,我同意你的看法。 – Brad 2011-02-04 15:59:58