Flask 密钥

Salman Mehmood 2022年7月18日
Flask 密钥

这篇文章是关于 Flask 中的密钥的。

  1. 什么是秘钥?
  2. 为什么我们需要在会话中使用它?
  3. 我们如何使用不同的方式生成密钥?
  4. 使用 Flask 中的 debug 工具栏有什么用处?

在 Flask 和 Python 中使用不同的方式生成密钥

要访问会话 ID,需要使用分配给 SECRET_KEY 变量的加密密钥,所以当时我们将 SECRET_KEY 变量的值设置为字符串是非常危险的。该密钥需要随机生成。

为什么这么重要?好吧,如果客户端试图操作会话 ID 中的数据,我们希望它被服务器拒绝。

如果客户端能够以某种方式猜出密钥,那么他们就可以生成服务器不会拒绝的会话数据,你可能会猜到;这就是为什么这不是好的做法。

那么会话 ID 是干什么用的呢?好吧,它存储在 cookie 中,用于链接用户以指定服务器端的数据,例如数据库中有关用户的信息。

那么问题就变成了:我们如何生成真正的随机密钥?

让我们转到 Flask docs;如果我们向下滚动到它说明如何生成好的密钥的部分,根据文档,你的操作系统可以根据可用于获取此类密钥的随机密码生成器生成相当随机的东西。

在遵循文档的同时,我们打开一个 Python shell 并导入 os 模块,然后使用 urandom() 函数并在该函数中传递 24,以便你可以生成一个带有属性大小的链接的随机字符串我们通过了。

import os
os.urandom(24)

当我们点击 Enter 或打印它时,我们得到这个键。

b'o\xe8\xc3VS\xf3\xf8\x0c\x80Y\xad\xb6\x86\xb3\x7f\xee\x98l\x80\xe47\xfb]}'

此密钥不适用于你的 Flask 应用程序,因此你必须从系统生成它。生成密钥后,获取该字符串,返回 Flask 应用程序并将其分配给 SECRET_KEY 变量。

有几种方法可以获得密钥,我们将研究另一种生成十六进制密钥的方法。要生成此密钥,我们需要导入 uuid 模块,并从 uuid4() 函数中使用 hex 属性。

import uuid
uuid.uuid4().hex

输出:

'd5fb8c4fa8bd46638dadc4e751e0d68d'

在 Flask 中,还有另一种方式是自己定义一个秘钥;要定义密钥,我们可以使用以下代码。

app.config['SECRET_KEY']='Define_The_Key'

在使用 Flask 应用程序中的 debug 工具栏时,有必要定义一个密钥,因为如果在 Flask 应用程序中定义我们的密钥,DebugToolbarExtension 将无法工作。我们可以使用任何方法来定义密钥。

示例的完整源代码。

from flask import Flask,render_template
from flask_debugtoolbar import DebugToolbarExtension

# import os
# os.urandom(24)

# import uuid
# uuid.uuid4().hex

app = Flask(__name__)

app.debug=True
# app.config['SECRET_KEY']='Define_The_Key'

HEX_SEC_KEY= 'd5fb8c4fa8bd46638dadc4e751e0d68d'

app.config['SECRET_KEY']=HEX_SEC_KEY
TBAR=DebugToolbarExtension(app)


@app.route('/', methods=['GET'])
def DEB_EX():
    return render_template('index.html')

if __name__=='__main__':
    app.run()

当我们运行服务器时,我们可以看到工具栏工作正常,并且在控制台中没有出现错误。

使用 Flask 生成密钥

我们在模板中使用了此代码。

<html>
    <head>
        <body>
            <h2>Hi User, the secret key is necessary to run the debug toolbar</h2>
        </body>
    </head>
</html>
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn