在 Flask 中接收到 GET 请求后,我连接到后端数据库并发送响应。目前,数据库的用户名和密码存储在一个ini文件中。加密用户名和密码的最佳方法是什么?为 REST 调用加密用户名和密码也是一种好习惯吗?因为我每次收到请求时都需要解密
2 回答
您永远不会在数据库中存储纯密码。相反,您想要存储哈希值——特殊的总和,它不能被解码,但会在相同的数据上产生相同的结果。
因此,您可以将此功能应用于普通密码并将其与数据库中的密码进行比较
看看bcrypt
模块:
https ://flask-bcrypt.readthedocs.io/en/latest/
在您的注册方法上:
pw_hash = bcrypt.generate_password_hash('some_password')
然后你只在你的数据库中存储 pw_hash
在您的登录方法中,只需pw_hash
从 db 中提取并进行比较:
bcrypt.check_password_hash(pw_hash, 'password_from_request') # returns True or False
同时,您可以根据需要将纯用户名存储在数据库中,没有任何问题
在您的服务器上,您不能加密用户名和密码来访问您的数据库,否则您无法访问它。
通常,您不会将它们放在文件中,而是放在环境变量中。
另请参阅十二因素应用程序:
https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology
PS:例如,我batou
用于部署(类似于 Ansible)。
用户名和密码都在一个 gpg 文件中加密,所以我可以将它们检查到版本控制中。但是,当然,当我将应用程序部署到生产环境时,这两个值都需要不加密。