【问题标题】:Understanding environment variable with Flask secret key-creation process使用 Flask 密钥创建过程了解环境变量
【发布时间】:2016-03-16 19:14:51
【问题描述】:

我正在关注使用 Python 2.7 在 Mac 上的 Flask 教程,该教程将引导您构建一个具有用户登录和密码功能的简单博客。

登录系统基于Flask-Login module

第一步是在应用程序目录中的 config.py 文件中设置一个密钥,如下所示:

import os
class DevelopmentConfig(object):
    SQLALCHEMY_DATABASE_URI = "postgresql://ubuntu:thinkful@localhost:5432/blogful"
    DEBUG = True
    SECRET_KEY = os.environ.get("BLOGFUL_SECRET_KEY", "")

我了解 SECRET_KEY 用于对应用程序进行加密保护,因为将应用程序的密钥存储在应用程序配置本身中并不是一个好主意,对吗?因此,我们使用 os.environ.get 从环境变量中获取密钥。

为了做到这一点,教程说有必要在命令行中通过以下方式导出环境变量:

export BLOGFUL_SECRET_KEY="your_secret_key_here"

这会设置一个名为BLOGFUL_SECRET_KEY 的环境变量——但是使用这个环境变量创建的密钥究竟是怎样的呢?

【问题讨论】:

    标签: python python-2.7 flask cryptography flask-login


    【解决方案1】:

    直接回答您的两个问题:

    1. 密钥存储在源代码外部,因此它们不会提交到版本控制。
    2. 密钥不是通过导出环境变量创建,也不是使用环境变量中的值创建的。

    您可能真正想要的信息:

    首先,请记住,我不是密码学专家!就这样……

    您需要做的是为您的应用程序生成一些适当大小和加密安全的秘密,然后将环境变量设置为该值。

    我猜测该密钥与您链接到的 Flask-Login 模块的 flask.ext.login.make_secure_token 方法有关。如果是这种情况,请查看源代码,该密钥与 HMAC 一起用于 SHA-512。理想情况下,密钥应该与算法使用的块大小相同,在这种情况下,如Python 2.7 hmac implementation 的源所示,对于 512 位 HMAC,该块大小为 64。如果 key 小于 blocksize,则用 0 填充;如果更大,它将散列到块大小。

    Flask quickstart documentation section for sessions 提供了一个由Python's os.urandom documentation 支持的示例,用于生成密码学上合适的随机字节以用于密钥。我会更改他们的示例,因为我们希望块大小为 64 而不是 24 的密钥为:

    import os
    os.urandom(64)
    

    获取结果并将环境变量设置为该值。直接使用 Flask 示例(不要在代码中使用这些值):

    >>> import os
    >>> os.urandom(24)
    '\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
    

    您将获取输出,并将环境变量设置为该值:

    export BLOGFUL_SECRET_KEY='\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'
    

    【讨论】:

      【解决方案2】:

      没有意识到设置密钥的实际命令是:

      export BLOGFUL_SECRET_KEY="your_secret_key_here"
      

      并且可以使用 Python 解释器通过类似的方式生成密钥:

      >>> import os
      >>> os.urandom(24)
      '\x072\xe7E|ns\x18g\x80& \xa3\xbf\xed\x91\xe6\x08+\x88\xd6\xafe['
      

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 1970-01-01
        • 2018-07-12
        • 2016-11-16
        • 2020-07-14
        • 2019-03-07
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        相关资源
        最近更新 更多