Después de crear un nuevo proyecto con django-admin startproject mi settings.py contiene:
SECRET_KEY = 'django-insecure <actual secret key>'Nunca antes había visto "django-insecure" en una clave secreta. ¿Qué significa?
Esta es una advertencia visible de que cualquier clave codificada es insegura desde el primer momento. La idea es utilizar diferentes claves en el desarrollo y la producción.
Puede generar fácilmente una nueva clave usando un generador en línea como este
En su servidor, agregue su SECRET_KEY a las variables de entorno y estas líneas a su configuración.py
import os SECRET_KEY = os.environ['SECRET_KEY']Personalmente, no prefiero guardar claves en archivos, pero eso también es posible.
Tenga en cuenta que
en django 3.2 es mejor crear su propia clave secreta para producción (asegúrese de que sea lo suficientemente segura) y moverla a sus variables de entorno y también es mejor usar esta clave secreta insegura solo para fines de desarrollo. Una SECRET_KEY segura es así:
Aquí hay un ejemplo:
import os SECRET_KEY = os.getenv("SECRET_KEY", "django-insecure <actual secret key>")¿Por qué la clave es insegura cuando se crea automáticamente? Parece ser mucho más seguro que una llave pensada por un humano.
Se genera utilizando un proceso bien conocido a partir de una fuente de entropía cuya calidad y seguridad no pueden garantizarse (por Django). Esta es la razón aparente de esto; consulte https://docs.djangoproject.com/en/3.2/ref/checks/#security
security.W009: SuSECRET_KEYtiene menos de 50 caracteres, menos de 5 caracteres únicos, o tiene el prefijo'django-insecure-'lo que indica que Django la generó automáticamente . Genera unaSECRET_KEYlarga y aleatoria, de lo contrario, muchas de las funciones críticas para la seguridad de Django serán vulnerables a los ataques.
Más importante aún, cualquier clave secreta incrustada en un archivo de configuración es tan segura como los mecanismos de control de acceso de su sistema de archivos. Los archivos de configuración de Django son un lugar obvio para buscar la clave secreta.
Es más seguro mantener sus claves en un almacén de claves protegido criptográficamente o en un HSM , y luego pasar a Django su clave secreta a través de una variable de entorno; ver Dónde almacenar claves secretas DJANGO .
Y, sin importar cómo las administre, debe generar sus claves secretas usted mismo utilizando hardware que controle y un mecanismo + fuente de entropía en el que pueda confiar al 100%. (Si no tiene opciones, considere tirar algunos dados como fuente de dígitos aleatorios).