Flask の秘密鍵

Salman Mehmood 2022年8月18日
Flask の秘密鍵

この記事は Flask の秘密鍵についてです。

  1. 秘密鍵とは何ですか?
  2. なぜセッション内で使用する必要があるのですか?
  3. さまざまな方法を使用して秘密鍵を生成するにはどうすればよいですか?
  4. Flask のデバッグツールバーを操作する場合、どのように役立ちますか?

Flask と Python で異なる方法を使用して秘密鍵を生成する

セッション ID にアクセスするには、SECRET_KEY 変数に割り当てられた暗号化キーを使用する必要があるため、その時点で、SECRET_KEY 変数の値を文字列として設定することは非常に危険です。このキーはランダムに生成する必要があります。

なぜそんなに重要なのですか?クライアントがセッション ID 内のデータを操作しようとした場合、サーバーによって拒否されるようにします。

クライアントが何らかの方法で秘密鍵を推測できる場合、サーバーが拒否しないセッションデータを生成でき、おそらく推測できます。それが良い習慣ではない理由です。

では、セッション ID は何のためのものですか?それは Cookie 内に保存され、データベース内のユーザーに関する情報など、サーバー側のデータを指定するためにユーザーをリンクするために使用されます。

次に、問題は次のようになります。真にランダムなキーをどのように生成するのでしょうか。

行って、Flask docs に目を向けましょう。ドキュメントによると、適切なキーを生成する方法が記載されているセクションまでスクロールすると、オペレーティングシステムには、そのようなキーを取得するために使用できるランダム暗号化ジェネレーターに基づいてかなりランダムなものを生成する方法があります。

ドキュメントに従って、Python シェルを開き、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 変数に割り当てます。

秘密鍵を取得する方法はいくつかありますが、16 進鍵を生成するもう 1つの方法を見ていきます。このキーを生成するには、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
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