Clave secreta del Flask
![Clave secreta del Flask](/img/Python-Flask/feature-image---flask-secret-key.webp)
Este artículo trata sobre la clave secreta en Flask.
- ¿Qué es una clave secreta?
- ¿Por qué necesitamos usarlo dentro de la sesión?
- ¿Cómo podemos generar la clave secreta de diferentes formas?
- ¿Cómo es útil cuando se trabaja con la barra de herramientas de
depuración
en Flask?
Genere la clave secreta usando diferentes formas en Flask y Python
Para acceder a una ID de sesión, debe usar una clave de cifrado asignada a la variable SECRET_KEY
, por lo que en ese momento, establecemos el valor de la variable SECRET_KEY
como una cadena que es extremadamente peligrosa. Esta clave debe generarse aleatoriamente.
¿Por qué es eso tan importante? Bueno, si el cliente intenta manipular datos dentro de la ID de sesión, queremos que el servidor lo rechace.
Si el cliente de alguna manera puede adivinar la clave secreta, entonces puede generar sus datos de sesión que el servidor no rechazará, y probablemente pueda adivinarlo; por eso no es una buena práctica.
Entonces, ¿para qué sirve el ID de sesión? Bueno, se almacena dentro de una cookie y se usa para vincular al usuario para especificar datos en el lado del servidor, como información sobre el usuario en la base de datos.
La pregunta entonces es: ¿cómo generamos una clave verdaderamente aleatoria?
Vayamos y pasemos al Flask docs; si nos desplazamos hacia abajo hasta la sección donde dice cómo generar buenas claves, de acuerdo con la documentación, su sistema operativo tiene formas de generar cosas bastante aleatorias basadas en un generador criptográfico aleatorio que se puede usar para obtener dicha clave.
Mientras seguimos los documentos, abrimos un shell de Python e importamos el módulo os
, luego usamos la función urandom()
y pasamos 24 dentro de esta función para que pueda generar una cadena aleatoria con un enlace del tamaño del atributo que pasamos.
import os
os.urandom(24)
Cuando presionamos Enter o lo imprimimos, obtenemos esta clave.
b'o\xe8\xc3VS\xf3\xf8\x0c\x80Y\xad\xb6\x86\xb3\x7f\xee\x98l\x80\xe47\xfb]}'
Esta clave secreta no funciona para su aplicación Flask, por lo que debe generarla desde su sistema. Después de generar una clave, tome esa cadena, regrese a la aplicación Flask y asígnela a la variable SECRET_KEY
.
Hay varias formas de obtener la clave secreta y veremos una forma más de generar una clave hexadecimal. Para generar esta clave necesitamos importar el módulo uuid
, y de la función uuid4()
usaremos la propiedad hex
.
import uuid
uuid.uuid4().hex
Producción :
'd5fb8c4fa8bd46638dadc4e751e0d68d'
En Flask, hay otra forma de definir una clave secreta por sí mismo; para definir la clave secreta, podemos usar el siguiente código.
app.config["SECRET_KEY"] = "Define_The_Key"
Cuando se trabaja con la barra de herramientas debug
en la aplicación Flask, es necesario definir una clave secreta porque DebugToolbarExtension
no funciona sin definir nuestra clave secreta en la aplicación Flask. Podemos usar cualquier método para definir una clave secreta.
El código fuente completo del ejemplo.
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()
Cuando ejecutamos el servidor, podemos ver que la barra de herramientas funciona correctamente y no se ha producido ningún error en la consola.
Usamos este código en nuestra plantilla.
<html>
<head>
<body>
<h2>Hi User, the secret key is necessary to run the debug toolbar</h2>
</body>
</head>
</html>
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