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.pya> 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.