我正在网络应用中搜索最安全(但又可行)的密码管理方式。
现在,我将密码保存为哈希。应用程序的DB帐户仅限于存储过程的执行,我通过将用户名和散列密码提供给返回1(true)或0(false)的存储过程来验证用户。
因此,即使您拥有该应用的数据库帐户,也无法从服务器获取密码。多数民众赞成我喜欢这个解决方案。但是要使用它,客户端必须通过Web提交密码,或者至少提供一个可以捕获的静态哈希。
所以我想到了使用这样的握手:
使用此握手可以检查密码而无需发送密码或静态哈希。只是一个动态盐渍哈希,每次用户登录时都不同=>非常安全。
但是对于这次握手,我需要密码或者至少需要来自数据库的哈希密码。但这使得某人至少可以获得哈希密码并在应用程序外部强制使用它。
你更喜欢什么?将密码保存在数据库中并在那里制作任何东西(安全服务器),或者将其从数据库中取出并在外部进行(安全传输)?
提前致谢, 标记
答案 0 :(得分:3)
您提出的解决方案并未真正解决问题。服务器必须知道密码,所以它必须在普通的某个时刻传输,这是你想要首先避免的。这样你只能避免每次都重新发送密码,但是如果有人在第一次传输时就抓住了它?
我认为你不应该重新发明轮子:-)对所有连接使用SSL,然后你的第一个解决方案工作正常。您甚至可以在客户端执行散列,因此只通过安全通道发送散列。您的服务器永远不会知道密码,也不必知道密码。