可能重复:
PHP 2-way encryption: I need to store passwords that can be retrieved
我知道存储用户密码的最佳做法是只存储不可逆转的密码哈希值。
但是,我正在开发一个应用程序,我需要为另一个Web服务存储用户的登录信息 - 我需要定期登录并执行一些维护任务。不幸的是,该服务不提供授权令牌,所以我(非常担心)必须以我可以访问其纯文本值的方式存储密码。我不拥有或控制我正在验证的服务,唯一的方法是“借用”用户的用户名和密码并进行身份验证。
我打算在数据库中AES_ENCRYPT密码,这意味着如果有人能以某种方式访问数据库,他们将无法获得明文。但是,我的代码需要访问密钥才能解密它们,因此如果整个服务器遭到破坏,这将无法保护,密码将被泄露。
除了上述加密之外,我是否可以尽可能安全地采取最佳做法或步骤?
修改
我知道无论我做什么,最终密码必须以明文形式访问,因此受损的服务器意味着密码将被泄露,但我想知道我可以采取哪些措施来降低风险。例如。加密数据库可以保护我在数据库受损但不是整个服务器的情况下。其他类似的缓解措施将不胜感激。
答案 0 :(得分:5)
但是,我正在开发一个应用程序,我需要为另一个Web服务存储用户的登录信息 - 我需要定期登录并执行一些维护任务。
好的......我仔细阅读了答案和评论,而我所能说的就是我希望你有一支精干的法律团队。在我看来,您所提供的服务取决于用户的信任。这是一个很好的用户控制的开关,而不是背后的帮助,但我认为你想要一个非常铁的服务协议。
那就是说,你可以调用很多安全性偏执狂。如果发生中断,您必须根据产品,公司和用户的损害来确定您想要经历多少。这是想法:
这是系统安全性高点的一个亮点。我的一般观点是 - 如果你认真保护用户密码,你就不能只考虑数据。只是加密密码可能不足以真正保护用户并保护信任。
解决这个问题的标准方法是考虑开支的成本与保护成本。如果两个成本对于该功能的价值都太高,那么您就有一个很好的迹象表明您不应该费心去做...
答案 1 :(得分:3)
正如您所说,您的代码最终将需要密钥,因此如果服务器受到损害,密码也将如此。没有办法解决它。
您可以做的是拥有一个非常小的代理,其唯一的工作就是拥有密码,收听主应用程序的请求,连接到相关服务,并将响应返回给您的应用程序。如果这个非常简单的代理是在服务器上运行的所有代理,那么它将比在具有许多服务的服务器上运行的复杂应用程序更不可能被泄露。