【发布时间】:2020-07-21 08:13:45
【问题描述】:
在 Flask 中收到 GET 请求后,我连接到后端数据库并发送响应。目前,数据库的用户名和密码存储在一个ini文件中。加密用户名和密码的最佳方法是什么? 为 REST 调用加密用户名和密码也是一种好习惯吗?因为我每次收到请求都需要解密
【问题讨论】:
标签: python-3.x rest flask password-encryption fernet
在 Flask 中收到 GET 请求后,我连接到后端数据库并发送响应。目前,数据库的用户名和密码存储在一个ini文件中。加密用户名和密码的最佳方法是什么? 为 REST 调用加密用户名和密码也是一种好习惯吗?因为我每次收到请求都需要解密
【问题讨论】:
标签: python-3.x rest flask password-encryption fernet
您永远不会在数据库中存储纯密码。相反,您想要存储 哈希 - 特殊的总和,它无法被解码,但会在相同的数据上产生相同的结果。
因此,您可以将此功能应用于纯密码并将其与数据库中的密码进行比较
看看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
同时,如果你愿意,你可以将纯用户名存储在数据库中,没有任何问题
【讨论】:
在你的服务器上,你不能加密用户名和密码来访问你的数据库,否则你不能访问它。
通常,您不会将它们放在文件中,而是放在环境变量中。
另见十二因素应用:
https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology
P.S.:例如,我使用batou 进行部署(类似于 Ansible)。
用户名和密码都在一个 gpg 文件中加密,所以我可以将它们检查到版本控制中。当然,当我将应用部署到生产环境时,这两个值都需要不加密。
【讨论】: