【问题标题】:How and where encryption happens in a web application?在 Web 应用程序中如何以及在何处进行加密?
【发布时间】:2019-04-24 09:37:31
【问题描述】:

在 Web 应用程序中,密码加密是如何以及在何处发生的?例如,当用户注册一个网站时,用户设置的密码是否以明文形式传输并在服务器端进行加密并持久化在数据库中?

另一方面,当使用 HTTPS 时,数据将被加密并通过网络发送。在这种情况下,我们是否再次对传入的数据应用任何加密算法,然后将其保存在数据库中?我也很想知道通过 HTTPS 传输数据时将使用哪些加密算法。

【问题讨论】:

  • 密码是加盐和散列,未加密,无论您是否使用 HTTPS(您应该)。

标签: https password-encryption websecurity


【解决方案1】:

除了martinstoeckli回答:

规则 n°2:加密永远是第二选择。如果您可以使用散列,请这样做。

HTTPS 是异步加密(私钥 + 公钥)。原理是使用公钥加密的所有内容只能使用关联的私钥解密。

在我们的例子中,客户端将使用公钥来加密数据。并且服务器将是唯一能够使用私钥解密数据的服务器。

因此,在私钥完成其工作后,您将获得数据的明文

此时,最好的办法(在我看来)是散列(+ salt + 最终是pepper)数据并将散列存储在数据库中。

例如,当用户尝试使用他的密码登录时,服务器将再次对收到的明文密码进行哈希处理(显然使用相同的盐/胡椒)并与数据库中的密码进行比较。

如果哈希值与数据库中的哈希值完全相同,则说明用户输入的密码是正确的。

【讨论】:

    【解决方案2】:

    HTTPS 加密客户端和服务器之间的流量,这可以防止 ManInTheMiddle 攻击。使用 HTTPS,您可以将密码安全地传输到服务器,作为开发人员,您无需参与任何工作。

    服务器会自动解密密码,你的应用会得到明文密码。在将密码散列存储到数据库之前使用密码散列是您的工作。推荐的密码哈希是 BCrypt、SCrypt、Argon2 和 PBKDF2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 2013-11-28
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多