Cómo generar una nueva clave secreta en Django
Mantener sus claves privadas fuera de los repositorios de códigos es vital para la seguridad. Descubra cómo hacerlo y cómo recuperarse si ya cometió el error.
En Django, una clave secreta juega un papel vital para mejorar la seguridad de su aplicación. Ayuda a administrar las sesiones de los usuarios, protege contra ataques de falsificación de solicitudes entre sitios (CSRF) y protege sus datos generando y verificando firmas criptográficas, entre otras cosas.
Debes mantener segura la clave secreta de tu proyecto en todo momento. Exponerlo dejará su aplicación susceptible a ataques maliciosos por parte de piratas informáticos, comprometiendo su seguridad. Si su clave secreta se ve comprometida, debe saber cómo generar una nueva para reducir el impacto negativo en su aplicación.
¿Cómo se puede exponer su clave secreta de Django?
Accidentalmente puedes hacer pública tu clave secreta de Django si, sin saberlo, la envías a git o a un repositorio de código fuente similar. Este error es común entre los programadores nuevos que aún están aprendiendo sobre GitHub. Cuando esto suceda, puede hacer una de las siguientes cosas:
- Eliminar la confirmación.
- Reemplace la clave secreta por completo.
Es posible que eliminar la confirmación no sea la mejor opción porque aún se puede acceder al historial de confirmaciones a través de varios medios, como copias en caché en GitHub u otros sistemas distribuidos. Lo más seguro que puede hacer en tal situación es asumir que su clave secreta ya está comprometida.
Debe generar una nueva clave secreta para reemplazar la comprometida y protegerla mediante variables de entorno. En cualquier caso, deberías aprender a generar una nueva clave secreta en Django para proteger tu aplicación de cosas como ataques de falsificación de solicitudes entre sitios (CSRF).
Cómo generar una nueva clave secreta en Django
Django proporciona una función llamada get_random_secret_key() que te ayuda a generar una nueva clave secreta cada vez que la llamas. La función get_random_secret_key() es una función de utilidad que utiliza el módulo secrets en Python para generar una clave secreta segura de 50 caracteres.
Para generar una nueva clave secreta con la función get_random_secret_key(), abra su interfaz de línea de comandos (CLI) y escriba este comando:
python manage.py shell -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
El comando anterior importa la función get_random_secret_key() de django.core.management.utils y luego imprime una nueva clave secreta de 50 caracteres, que puede usar en su proyecto. Antes de ejecutar el comando anterior, asegúrese de estar en el directorio raíz de su proyecto, es decir, en la misma ubicación que el archivo manage.py de su proyecto.
Puede ejecutar el mismo comando fuera de su CLI creando un archivo Python y pegando este fragmento de código en él:
# import the get_random_secret_key() function
from django.core.management.utils import get_random_secret_key
secret_key = get_random_secret_key()
print(secret_key)
Puede ejecutar el código escribiendo esto en su CLI:
python fileName.py
El comando anterior debería imprimir una nueva clave secreta de 50 caracteres que puede usar en su proyecto.
Cómo proteger su clave secreta con variables de entorno
Probablemente no quieras cambiar tu clave secreta cada vez que realices una confirmación de GitHub. Una forma eficaz de mantener segura su clave secreta es almacenándola en una variable de entorno. Las variables de entorno son valores que puede establecer fuera de su código base y a los que su programa aún puede acceder durante el tiempo de ejecución. Pueden almacenar configuración, claves API, credenciales de bases de datos, etc.
Puede almacenar sus variables de entorno en un archivo llamado .env y excluirlas de su repositorio git. Puedes hacer esto creando un archivo llamado .gitignore en tu proyecto. El archivo .gitignore contiene una lista de archivos y carpetas que Git no rastreará.
Los tipos de archivos y las estructuras de directorios varían de un proyecto a otro, pero existen valores predeterminados sensatos que puede aplicar para cada idioma. Puede encontrar una lista de plantillas .gitignore en el repositorio gitignore de GitHub. Los siguientes pasos le muestran cómo usar el archivo .gitignore con variables de entorno en Django.
1. Crea un archivo .gitignore
En su directorio base (la ubicación de su archivo manage.py), cree un archivo .gitignore y copie el contenido de este archivo GitHub en él. Ese archivo es un .gitignore de muestra para proyectos de Python que excluye archivos comunes que no querrás en tu repositorio.
Alternativamente, puedes agregar un archivo .gitignore a tu proyecto mientras creas un repositorio en GitHub. Para hacerlo, haga clic en la opción Agregar .gitignore, busque Python y selecciónelo.
2. Cree un archivo .env
En su directorio base, cree un archivo llamado .env. Este archivo almacenará todas sus variables de entorno. Copie y pegue su clave secreta en este archivo (elimine las comillas y los espacios a su alrededor). He aquí un ejemplo:
SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
Abra el archivo .gitignore y confirme que el nombre del archivo .env esté en él. Si no es así, puede agregarlo escribiendo el nombre del archivo solo en una línea:
.env
3. Instale el paquete python-dotenv
Abra su CLI e instale el paquete python-dotenv como una dependencia.
pip install python-dotenv
4. Modifique su archivo settings.py
En su archivo settings.py, importe los siguientes paquetes:
import os
from dotenv import load_dotenv
A continuación, cargue las variables de entorno de su archivo .env en su archivo settings.py llamando a la función load_dotenv():
load_dotenv()
Finalmente, reemplace su variable SECRET_KEY con esta línea de código:
SECRET_KEY = os.environ.get('SECRET_KEY')
Puede ejecutar su servidor de desarrollo para confirmar que la configuración anterior funciona. Si es así, su proyecto debería ejecutarse como esperaba. El siguiente comando iniciará su servidor de desarrollo.
python manage.py runserver
Mantenga segura su clave secreta con variables de entorno
Exponer su clave secreta puede causarle muchos problemas como desarrollador. Es posible que no siempre puedas recuperar tu proyecto de un ataque, especialmente en un entorno de producción.
Para evitar estos efectos secundarios negativos, almacene siempre su clave secreta en una variable de entorno y use un archivo .gitignore para mantenerla fuera de su repositorio git.