Estoy llegando a un punto en el que implementaré mi aplicación Django en el entorno hostil conocido como "internet" y estoy tratando de entender mejor las ramificaciones de Django SECRET_KEY
. Uno de los procedimientos estándar que parece es asegurar la clave secreta en el settings.py
. Lo suficientemente justo. Hasta ahora, los documentos dicen que no debe cometer su clave secreta a SVN, CVS, etc. Para esto, proporciona un acceso fácil a su clave. Sin embargo, si alguien estuviera tentado a enviar la clave secreta a su repositorio, esto indicaría que la clave secreta es estática (consulte la pregunta 4).
De todos modos, aquí están mis preguntas:
- ¿Por qué es más seguro almacenar la clave secreta como una variable de entorno que almacenarla directamente en
settings.py
? Por ejemplo, si un atacante puede leersettings.py
, lo más probable es que solo pueda escribir$ echo $DJANGO_SECRET_KEY
! - ¿Por qué es más seguro almacenar la clave secreta en un archivo que almacenarla directamente en
settings.py
? Si puede leersettings.py
, probablemente puede leerdjango_secret_key.txt
. - Si el atacante ha comprometido su máquina, ¿no pueden simplemente cargar el intérprete de python con
settings.py
a> print settings.SECRET_KEY
? - Finalmente, ¿sería una mala práctica generar aleatoriamente la clave secreta cada vez que se reinicia el proceso del servidor web? Esto podría ser completamente aleatorio, o podría solicitar la entrada del usuario para la clave. Obviamente, este último presenta una seria debilidad si el propio atacante puede reiniciar el servicio web e ingresar la clave de su elección.