django - 在 GAE/python 中存储密码的最佳实践

标签 django security google-app-engine webapp2

我需要在我的 GAE/python2.7 应用程序中实现密码存储。我已经实现了用于授权的 cookie,我已经有了一个帐户/用户模型,并且我已经通过第 3 方进行了身份验证。现在我需要通过密码添加身份验证(客户请求)。

我希望安全地存储密码。我已经确定了几个选项(如下),它们看起来很合理,但我以前从未实现过密码存储,所以我不知道我不知道什么。我宁愿避免问题而不是等待问题。

我的问题是:这是 GAE 的最佳实践吗?如果不是,那是什么?

请注意,我只是在寻找一种在存储之前散列密码并进行比较的方法。我不需要全栈用户模块。

我已经评论过 previous question这很有帮助,但不能直接解决我的问题。

选项:

  1. 使用 Django .有点像

    import django.contrib.auth.hashers as foo
    to_store_in_db = foo.make_password(conforming_password)
    
    # later
    
    passes = foo.check_password(entered_password, password_from_db)
    

    (我们目前没有在我们的应用程序中使用 Django,因此我们可以使用我们喜欢的任何一个,但我建议使用 1.4,因为它是 GAE 中最新可用的版本,而不是“最新”的移动目标)

  2. 使用 webapp2_extras.security - 与上面类似,但使用

    generate_password_hash() #Seems like it only supports md5/sha1
    check_password_hash()
    

谢谢

汤姆

最佳答案

有一个专门用于此的内置函数:https://docs.python.org/2/library/hashlib.html#key-derivation-function .

>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
>>> binascii.hexlify(dk)

b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'

salt 应该是与密码一起存储在数据库中的随机字符串。这使用 sha256 似乎足以满足此目的。

获取良好(安全随机)sald 可能是个问题,但在较新版本的 GAE 上,您可以指定 pycrypto 依赖项,并使用:

from Crypto.Random import get_random_bytes 

关于django - 在 GAE/python 中存储密码的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19147789/

相关文章:

带有 s3-boto 的 django-storage 破坏浏览器缓存

python - 在 django 模板引擎中访问字典

security - key 中包含用户密码的 JWT

security - 当仍需要访问明文时安全存储密码

python - 使用 Beautiful Soup 从网站抓取数据并在 jinja2 中显示

node.js - 如何连接部署在谷歌云上的redis?

Django Rest Framework 验证器不在 extra_kwargs 内执行

python - django admin 排序外键字段列表

python - 自定义系统中基于 HTTP 的身份验证/加密协议(protocol)

python - GAE支持为Python编写多线程代码吗?