gpt4 book ai didi

python - python中的安全身份验证系统?

转载 作者:太空狗 更新时间:2023-10-30 02:34:34 24 4
gpt4 key购买 nike

我正在用 python 开发一个网络应用程序,我想要一个安全的登录系统。

我之前通过让用户登录然后将随机字符串保存在 cookie 中并保存在该用户旁边的数据库中工作正常但不是很安全。

>

我相信理解像这样的高级系统的原理,但不了解细节:

  • 对登录页面和重要页面使用 HTTPS
  • 对保存在数据库中的密码进行哈希处理(bcrypt、sha256?使用salt?)
  • 使用随机数(用页面 url 和 ip 加密?)

但除此之外,我不知道如何可靠地检查登录的人是否真的是用户,或者如何在页面请求和多个打开的页面之间安全地保持 session ,等等。

我能有一些指导吗(最好是具体的,因为我是这个高级安全编程的新手。

我只是想安全地完成一个基本的用户登录-注销到一个域,没有什么太复杂的。

最佳答案

这个答案主要解决密码散列问题,而不是您的其他子问题。对于那些,我的主要建议是不要重新发明轮子:使用与 GAE 配合良好的现有框架。它提供 Django 的内置部署,但也有 WebOb 的内置安装,因此还应考虑各种基于 WebOb 的框架(Pyramid、Turbogears 等)。所有这些都将有预制库来为你处理很多这样的事情(例如:许多 WebOb 框架使用 Beaker 来处理基于 cookie 的 session )


关于密码散列...因为您在其他一些评论中指出您正在使用 Google App Engine,所以您想使用 SHA512-Crypt密码哈希。

尽可能安全地存储密码哈希的其他主要选择是 BCrypt、PBKDF2 和 SCrypt。但是,GAE 不为这些算法提供 C 语言加速支持,因此部署它们的唯一方法是通过纯 Python 实现。不幸的是,他们的算法对于纯 python 实现来说做了太多的位摆弄,无法以足够快的速度完成既安全又响应迅速的工作。而 GAE 的 Python crypt 模块实现提供了 C 加速的 SHA512-Crypt 支持(至少,每次我测试它时),因此它可以以足够的强度运行。


就编写实际代码而言,您可以使用 crypt直接模块。在将它们传递到 crypt 时,您需要注意生成自己的盐字符串,并且在加密新密码时,调用 crypt.crypt(passwd, "$6$"+ salt)$6$ 告诉它使用 SHA512-Crypt。

或者,您可以使用 Passlib库为您处理大部分内容(免责声明:我是该库的作者)。对于快速 GAE 部署:

from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["sha512_crypt"],
default="sha512_crypt",
sha512_crypt__default_rounds=45000)
# encrypt password
hash = pwd_context.encrypt("toomanysecrets")

# verify password
ok = pwd_context.verify("wrongpass", hash)

注意:如果关心密码安全,无论您做什么,不要使用单一的 HASH(salt+密码)算法(例如 Django、PHPass 等),因为这些算法可能非常粗暴-强制。

关于python - python中的安全身份验证系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com