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