美好的一天,
我对数据库/应用程序/连接安全性非常陌生,希望对项目有所帮助。
让我解释一下我的环境:
我的问题: :如果有人可以访问数据库A并提取哈希密码,则他们可以使用SOAP请求来连接到Web服务。这意味着我的安全性为空且为空。
我必须寻求可能的解决方案:
解决方案1:在将密码A发送到Web服务之前,我将其解密并通过Secured HTTPS连接以纯文本形式发送。然后,Web服务将在再次验证存储在数据库B中的哈希时再次对其进行加密。
解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行了第二次加密。到达Web服务时,将其解密以显示哈希,然后对数据库B进行验证。
我的问题 :是以上两种解决方案中的一种,最佳实践。如果没有,那么对于这种情况,什么是最佳的主动解决方案。
亲切问候
答案 0 :(得分:3)
只需注意几句话
在这里,我假设您正在谈论
解决方案2:在将密码A发送到Web服务之前,我对现有哈希进行了第二次加密。到达Web服务时,将其解密以显示哈希,然后对数据库B进行验证。
散列有效地变成了密码,它没有为解决方案增加任何安全性
解决方案1:在将密码A发送到Web服务之前,我先对其进行解密,然后通过安全HTTPS连接以纯文本形式发送它。
有几种使用简单凭证(即WS-UsernameToken)对SOAP WS客户端进行身份验证的标准。有效地,客户端使用HTTPS来简单地发送其用户名和密码,以处理通道安全性。
我的问题:如果有人可以访问数据库A并提取哈希密码,那么他们可以使用SOAP请求来连接到Web服务
一个密码被散列,您将不能解密它,但是您也不能使用散列值作为密码。否则,您将获得“解决方案2”,并且您正在使用哈希作为密码。
实际上,这通常是一个问题。您可以搜索其他问题,例如如何在本地存储服务凭证。整个问题是-您需要存储凭据。以我的经验来看,您至少可以做的更好一些,例如对服务密码进行加密,以使它们不会简单地存储在数据库或配置文件中。最后,客户端应用程序需要在某处使用加密密钥来解密凭据。密钥也需要保护。
如果要处理用户凭证(用户身份),请不要在客户端完全存储用户密码,还有其他方法可以授权用户操作(访问令牌,jwt令牌等)。
答案 1 :(得分:0)
如果您使用的是基于XML的SOAP,则可以使用WS-Security加密密码并签署请求数据,从而确保密码的完整性和安全性,并通过https发送数据。
要存储密码,您应该使用不可逆的加密哈希,例如sha2,在服务器上,您将解密密码,创建sha2哈希并将其与数据库中的密码匹配