Flask 비밀 키

Salman Mehmood 2024년2월15일
Flask 비밀 키

이 문서는 Flask의 비밀 키에 관한 것입니다.

  1. 비밀 키는 무엇입니까?
  2. 세션 내에서 사용해야 하는 이유는 무엇입니까?
  3. 다른 방법으로 비밀 키를 생성하려면 어떻게 해야 합니까?
  4. Flask에서 debug 도구 모음으로 작업할 때 어떻게 유용합니까?

Flask와 Python에서 다른 방법을 사용하여 비밀 키 생성

세션 ID에 접근하려면 SECRET_KEY 변수에 할당된 암호화 키를 사용해야 하므로 당시 SECRET_KEY 변수의 값을 문자열로 설정하는 것은 매우 위험합니다. 이 키는 무작위로 생성되어야 합니다.

그게 왜 그렇게 중요한가요? 클라이언트가 세션 ID 내에서 데이터를 조작하려고 하면 서버에서 거부되기를 원합니다.

클라이언트가 비밀 키를 어떻게든 추측할 수 있다면 서버가 거부하지 않을 세션 데이터를 생성할 수 있으며 아마도 추측할 수 있습니다. 이것이 좋은 습관이 아닌 이유입니다.

그렇다면 세션 ID는 무엇을 위한 것입니까? 글쎄, 그것은 쿠키 안에 저장되고 데이터베이스의 사용자에 대한 정보와 같은 서버 측 데이터를 지정하기 위해 사용자를 연결하는 데 사용됩니다.

그러면 질문은 다음과 같습니다. 진정한 무작위 키를 생성하는 방법은 무엇입니까?

Flask 문서로 이동해 보겠습니다. 문서에 따르면 좋은 키를 생성하는 방법이 나와 있는 섹션으로 스크롤하면 운영 체제가 이러한 키를 얻는 데 사용할 수 있는 임의의 암호화 생성기를 기반으로 꽤 임의적인 것을 생성할 수 있는 방법이 있습니다.

문서를 따르는 동안 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진수 키를 생성하는 방법을 한 가지 더 살펴보겠습니다. 이 키를 생성하려면 uuid 모듈을 가져와야 하며 uuid4() 함수에서 hex 속성을 사용합니다.

import uuid

uuid.uuid4().hex

출력:

'd5fb8c4fa8bd46638dadc4e751e0d68d'

Flask에는 비밀 키를 스스로 정의하는 또 다른 방법이 있습니다. 비밀 키를 정의하기 위해 다음 코드를 사용할 수 있습니다.

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

Flask 앱에서 debug 도구 모음으로 작업할 때 DebugToolbarExtension은 Flask 앱에서 비밀 키를 정의하지 않으면 작동하지 않기 때문에 비밀 키를 정의해야 합니다. 모든 방법을 사용하여 비밀 키를 정의할 수 있습니다.

예제의 전체 소스 코드입니다.

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