【问题标题】:Password Encryption in FlaskFlask 中的密码加密
【发布时间】:2020-07-21 08:13:45
【问题描述】:

在 Flask 中收到 GET 请求后,我连接到后端数据库并发送响应。目前,数据库的用户名和密码存储在一个ini文件中。加密用户名和密码的最佳方法是什么? 为 REST 调用加密用户名和密码也是一种好习惯吗?因为我每次收到请求都需要解密

【问题讨论】:

    标签: python-3.x rest flask password-encryption fernet


    【解决方案1】:

    您永远不会在数据库中存储纯密码。相反,您想要存储 哈希 - 特殊的总和,它无法被解码,但会在相同的数据上产生相同的结果。
    因此,您可以将此功能应用于纯密码并将其与数据库中的密码进行比较

    看看bcrypt模块: https://flask-bcrypt.readthedocs.io/en/latest/

    关于你的注册方法:
    pw_hash = bcrypt.generate_password_hash('some_password')

    然后你只将 pw_hash 存储在你的数据库中

    在您的登录方法中,只需从数据库中提取 pw_hash 并进行比较:
    bcrypt.check_password_hash(pw_hash, 'password_from_request') # returns True or False

    同时,如果你愿意,你可以将纯用户名存储在数据库中,没有任何问题

    【讨论】:

    • 我猜有一点误会。我的问题是关于加密用于“连接”到未存储在数据库中的数据库的密码。请提出建议。
    【解决方案2】:

    在你的服务器上,你不能加密用户名和密码来访问你的数据库,否则你不能访问它。

    通常,您不会将它们放在文件中,而是放在环境变量中。

    另见十二因素应用:

    https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology

    P.S.:例如,我使用batou 进行部署(类似于 Ansible)。

    用户名和密码都在一个 gpg 文件中加密,所以我可以将它们检查到版本控制中。当然,当我将应用部署到生产环境时,这两个值都需要不加密。

    https://batou.readthedocs.io/en/stable/

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 2010-10-23
      • 2014-04-20
      • 2019-02-10
      • 2020-11-10
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多