在PHP Web应用程序中安全地存储用户凭据

时间:2011-02-04 15:44:25

标签: php encryption credentials

我有一个构建的Web应用程序,现在需要存储用户凭据以访问另一个系统。 (尽管我希望这样做,但遗憾的是我在此事上别无选择。)

我的Web应用程序通过LDAP与Windows域控制器连接以验证用户帐户。因此,当用户登录我的应用程序时,应用程序会检查LDAP以确保它们是有效用户且密码正确。经过身份验证后,用户的杂项数据将从MySQL数据库加载。

现在,我需要以某种方式在此数据库中存储此其他系统的用户名和密码,我正在探索最安全的方法。

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

有什么想法?谢谢你的时间。

编辑:我刚想到的其他一些事情是根据为LDAP公开的其他一些数据进行加密。一个看起来很有希望的值(也可能对域中的任何人都不安全)是objectGUID,我假设它是帐户的GUID。我可能会使用加密密钥。域用户或其他人是否容易找到它?

编辑#2:我发现任何域用户都可以通过LDAP轻松查找GUID,因此我已经确定该方法已经完成。我可能必须根据用户密码进行加密,除非有其他建议。

2 个答案:

答案 0 :(得分:1)

您可能想看看这个其他系统是否支持执行“单点登录”的任何标准方式。这样您就不必重新发明wheel

答案 1 :(得分:1)

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