通过HTTPS发送密码加密

问题描述 投票:2回答:2

美好的一天,

我对数据库/应用程序/连接安全性非常陌生,希望对项目有所帮助。

让我解释一下我的环境:

  • 我有一个用户名A和密码A保存在本地计算机上的数据库(A)中。
  • 使用一种带有盐A的散列算法存储密码A.
  • 我通过HTTPS SOAP调用将凭据(用户名A和密码A)发送到远程访问的Web服务。
  • 接收用户名A和密码A的Web服务将这些凭证验证到位于Web服务位置本地的数据库(B)中的表。

我的问题:如果有人访问数据库A并提取散列密码,他们可以使用SOAP请求连接到Web服务。这意味着我的安全性为null和VOID。

我有可能的解决方案:

解决方案1:在将密码A发送到Web服务之前,我将其解密并通过安全HTTPS连接以纯文本形式发送。然后,当再次验证存储在数据库B中的哈希时,web服务将再次对其进行加密。

解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行第二次加密。当到达web服务时,它被解密以暴露哈希,然后对数据库B进行验证。

我的问题:以上两种解决方案中的任何一种,最佳实践。如果没有,那么这个场景的最佳实用解决方案是什么。

亲切的问候

web-services encryption https passwords plaintext
2个回答
3
投票

只是几个笔记

  • 散列(单向,不可逆)和加密(可逆)之间存在差异。您无法解密散列值。
  • 我将假设您正在使用服务凭据,而不是用户的身份凭证

在这里,我假设你正在谈论回合

解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行第二次加密。当到达web服务时,它被解密以暴露哈希,然后对数据库B进行验证。

哈希有效地成为密码,它不会为解决方案添加任何安全性

解决方案1:在将密码A发送到Web服务之前,我将其解密并通过安全HTTPS连接以纯文本形式发送。

有几个标准来验证SOAP WS客户端,使用简单的凭据WS-UsernameToken。有效地,客户端发送其用户名和密码,依靠HTTPS来处理通道安全性。

我的问题:如果有人访问数据库A并提取散列密码,他们可以使用SOAP请求连接到Web服务

一个密码被哈希,你将无法解密它,但你也不能使用哈希值作为密码。否则,您将获得“解决方案2”,并且您正在使用哈希作为密码。

实际上,这通常是一个问题。您可以搜索其他问题,如何在本地存储服务凭据。整个问题是 - 您需要存储凭据。根据我的经验,你可以做的最好,至少使检索更难,例如加密服务密码,使它们不会存储在数据库或配置文件中。最后,客户端应用程序需要某处的加密密钥来解密凭据。密钥也需要得到保护。

如果您正在处理用户凭据(用户身份),请不要在客户端存储用户密码,还有其他方法来授权用户操作(访问令牌,jwt令牌......)


0
投票

如果您使用的是基于xml的SOAP,则可以使用WS-Security加密密码并对请求数据进行签名,以确保密码的完整性和安全性,并通过https发送数据。

对于存储密码,您应该使用不可逆的加密哈希,如sha2,在服务器上,您将解密密码,创建sha2哈希并将其与数据库中的哈希进行匹配

© www.soinside.com 2019 - 2024. All rights reserved.