【问题标题】:An easy way to secure passwords in database [closed]一种保护数据库中密码的简单方法[关闭]
【发布时间】:2021-08-29 09:40:48
【问题描述】:

我正在flask中创建一个简单的项目,这是一个简单的网站,您可以在其中注册和登录。每次用户注册时,我都会将他们的用户名和密码保存在数据库中。当有人尝试登录时,我会将他们输入的数据与我在数据库中的数据进行比较。
现在,我想为项目添加一个安全元素,所以我想要一种简单的方法来保护我保存在数据库中的密码。我想在数据库中保存hash(password) 而不是password,并将用户在尝试登录时输入的散列密码与我在数据库中的密码进行比较。这个问题是hash 每次都返回不同的值,所以这个解决方案不起作用。谁能建议我如何解决这个问题,或者建议一个简单的算法来保护我的密码?

【问题讨论】:

  • 使用 BCrypt。它会为你做一切。
  • 安全规则 1:永远不要自己动手。使用已知安全的预构建工具。否则,任何人都可能会错过一些东西。
  • 哈希不能为同一个密码返回不同的值

标签: python database security hash passwords


【解决方案1】:

出于方便和安全,你只能选择一个(嗯,有一个权衡)。

安全级别-1:存储密码。这很简单,但是泄露的数据库会让攻击者冒充用户,并且会在其他平台上暴露用户的帐户,因为(可悲的是)太多人重复使用密码。

安全级别 0:存储哈希(md5、sha1 等)。泄露的数据库现在不会立即暴露所有密码,简单的密码仍然可以使用rainbow table 攻击或暴力搜索来恢复。

安全级别 1:加盐哈希。对于每个用户,生成一个随机字符串(盐),它将以纯文本形式存储。然后,将其与密码连接起来并存储生成的哈希值。使用足够长的盐,它将防止彩虹表攻击或天真的蛮力。它不会反对字典蛮力。这就是djangobcrypt 所做的。

要处理字典暴力破解,请强制执行密码复杂性。不幸的是,这不是一个用户友好的解决方案。

2 级及以上:

  • 使用外部身份验证提供程序,例如使用 Google 帐户登录。
  • 2FA(双重身份验证,如 RSA 令牌、短信等)
  • 非对称加密,如 SSH 中的一种(例如,基于智能卡)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2010-12-15
    • 2012-07-20
    • 2012-09-21
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多