如何在Spring RESTful登录服务中安全地发送/存储密码

时间:2016-12-14 08:16:55

标签: java spring spring-mvc restful-architecture

在登录服务中,用户将json作为有效负载发布到Spring RESTful登录服务,如下所示:

{
 "username": "john",
 "password": "doe"
}

Spring RESTful服务收到呼叫后,会以纯文本格式将密码与数据库中的一个商店进行比较。

我在当前的实施中发现了两个问题。

  1. 密码通过HTTP作为POST有效负载以纯文本形式发送。
  2. 存储在数据库中的正确的密码是纯文本。
  3. 对于问题2,我决定使用bcrypt加密存储在数据库中的密码,如this post中所述。 这是一个好方法吗?

    对于问题1,我不知道是否有最佳实践。 有人可以分享你的身份吗?谢谢!

    修改

    很抱歉,我忘了提到客户端和服务器通过HTTPS进行通话。密码在POST有效负载中发送。

    在这种情况下,在数据库中发布2(存储加密的正确密码)的解决方案是可以的,对吧?

    在问题1中,在这种情况下,密码可以用纯文本的邮件有效负载发送吗?

3 个答案:

答案 0 :(得分:4)

  1. 使用HTTPS。
  2. 密码应在请求正文中,因此请使用POST。
  3. 发送前请勿散列密码。
  4. 将存储在数据库中的哈希与哈希接收密码进行比较。
  5. 没有理由加密密码。这是个坏主意。它们应该被散列并且最好是盐渍的。如果有人窃取您的数据库,则会更难以破坏用户的密码。

    How to securily store passwords.

答案 1 :(得分:0)

据我了解,即使保存密码也要隐藏/保护。这样没人能从请求正文中看到密码。 保存在数据库中时,密码应进行哈希处理。即使是任何人,只要您掌握了数据库,他都将无法比较密码,因为他将获得哈希密码。 通常,我们会在日志中将请求正文发送到日志中,以便在发生任何错误进行测试时从其中获取正文。仅当您保存密码时,才可以停止请求正文以发送日志文件。 这样,只有用户才能知道密码。开发人员都无法获取密码。但这可能是一个问题,当用户将收到未知错误,而您将需要分别处理时。

答案 2 :(得分:-1)

我不明白你的要求。 如果你想要良好的做法,那么xenteros是对的:

  
      
  1. 使用HTTPS。
  2.   
  3. 密码应在请求正文中,因此请使用POST。
  4.   
  5. 在发送之前不要对密码进行哈希处理。
  6.   
  7. 将存储在数据库中的哈希与哈希接收密码进行比较。
  8.         

    没有理由加密密码。这是个坏主意。他们应该   被散列并且最好是盐渍的。如果有人窃取您的数据库,那么您的用户就会更难受到损害。密码。

如果您绝对想要使用HTTP而不是HTTPS,则可以使用javascript对密码进行哈希处理。不要使用javascript加密。有人可以重复使用它来解密密码。一般而言,出于安全原因,不要使用加密来存储密码。

fastest MD5 Implementation in JavaScript

你应该更喜欢xenteros的解决方案

相关问题