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 ha cometido el error.
En Django, una clave secreta juega un papel vital en la mejora de la seguridad de su aplicación. Ayuda a administrar las sesiones de los usuarios, protege contra los ataques de falsificación de solicitudes entre sitios (CSRF) y protege sus datos generando y verificando firmas criptográficas, entre otras cosas.
Debe mantener segura la clave secreta de su 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?
Puede hacer pública accidentalmente su clave secreta de Django si, sin saberlo, la envía a git o a un repositorio de código fuente similar. Este error es común entre los nuevos programadores que todavía están
aprendiendo sobre GitHub. Cuando suceda, puede hacer una de las siguientes cosas:- Eliminar el compromiso.
- Reemplace la clave secreta por completo.
Eliminar la confirmación podría no ser la mejor opción porque aún se puede acceder al historial de confirmación 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 el uso de variables de entorno. En cualquier caso, debe aprender a generar una nueva clave secreta en Django para proteger su 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 misterios módulo 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 administrar.py shell -c "desde django.core.management.utils import get_random_secret_key; imprimir (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 gestionar.py archivo en su proyecto.
Puede ejecutar el mismo comando fuera de su CLI creando un archivo de Python y pegando este fragmento de código en él:
# importa la función get_random_secret_key()
de django.core.management.utils importar get_random_secret_key
clave_secreta = obtener_clave_secreta_aleatoria()
imprimir (clave_secreta)
Puede ejecutar el código escribiendo esto en su CLI:
python nombreArchivo.py
El comando anterior debe 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 quiera cambiar su clave secreta cada vez que realiza una confirmación de GitHub. Una forma eficiente 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 base de código, a los que su programa aún puede acceder durante el tiempo de ejecución. Pueden almacenar configuraciones, claves API, credenciales de bases de datos, etc.
Puede almacenar sus variables de entorno en un archivo llamado .env y excluirlas de su repositorio de git. Puede 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 razonables que puede aplicar para cada idioma. Puede encontrar una lista de plantillas .gitignore en Repositorio gitignore de GitHub. Los siguientes pasos le muestran cómo usar el archivo .gitignore con variables de entorno en Django.
1. Crear un archivo .gitignore
En su directorio base, la ubicación de su gestionar.py archivo—crear un .gitignore archivo y copie el contenido de este archivo GitHub en ello. Ese archivo es un .gitignore de muestra para proyectos de Python que excluye archivos comunes que no querrá en su repositorio.
Alternativamente, puede agregar un archivo .gitignore a su proyecto mientras crea un repositorio en GitHub. Para ello, haga clic en el Agregar .gitignore opción, busque Python y selecciónelo.
2. Crear 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). Aquí hay un ejemplo:
CLAVE_SECRETA=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
Abre el .gitignore archivo y confirme que el .env el nombre del archivo 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 python-dotenv paquete como una dependencia.
pip instalar python-dotenv
4. Modifique su archivo settings.py
En tus configuración.py archivo, importe los siguientes paquetes:
importar sistema operativo
de dotenv importar carga_dotenv
A continuación, cargue las variables de entorno desde su .env archivo en su configuración.py archivo llamando al cargar_dotenv() función:
cargar_dotenv()
Finalmente, reemplace su LLAVE SECRETA variable con esta línea de código:
SECRET_KEY = os.environ.get('LLAVE SECRETA')
Puede ejecutar su servidor de desarrollo para confirmar que la configuración anterior funciona. Si es así, su proyecto debería ejecutarse como cabría esperar. El siguiente comando iniciará su servidor de desarrollo.
python manage.py servidor de ejecución
Mantenga su clave secreta segura con variables de entorno
Exponer su clave secreta puede causarle muchos problemas como desarrollador. Es posible que no siempre pueda recuperar su 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 .gitignore archivo para mantenerlo fuera de su repositorio de git.