tutorial python django security version-control django-settings

tutorial - django python



Python/Django-Evite guardar contraseñas en el código fuente (2)

Utilizo Python y Django para crear aplicaciones web, que almacenamos en control de fuente. La forma en que normalmente se configura Django, las contraseñas están en texto plano dentro del archivo settings.py.

Almacenar mi contraseña en texto plano me abriría una serie de problemas de seguridad, particularmente porque este es un proyecto de código abierto y mi código fuente estaría controlado por la versión (¡a través de git, en Github, para que todo el mundo lo vea!)

La pregunta es, ¿cuál sería la mejor práctica para escribir de forma segura un archivo settings.py en un entorno de desarrollo Django / Python?


Aunque no pude encontrar nada específico de Python en , sí encontré un sitio web útil , y pensé que compartiría la solución con el resto de la comunidad.

La solución: variables de entorno.

Nota: Aunque las variables de entorno son similares tanto en Linux / Unix / OS X como en los mundos de Windows, no he probado este código en una máquina con Windows. Por favor, déjeme saber si funciona.

En tu shell bash / sh, escribe:

export MYAPP_DB_USER=''myapp'' export MYAPP_DB_PASSWORD=''testing123''

Y en su archivo Django settings.py:

DATABASE_USER = os.environ.get("MYAPP_DB_USER", '''') DATABASE_PASSWORD = os.environ.get("MYAPP_DB_PASSWORD", '''')

En este caso, el nombre de usuario y la contraseña tendrían como valor predeterminado una cadena vacía si la variable de entorno no existiera.


Aunque las variables de entorno son convenientes para mucha configuración, poner contraseñas en variables de entorno no es seguro . Con la alternativa de ser un archivo de configuración fuera del control de versión regular, aquí hay algunos inconvenientes:

  • Las variables de entorno pueden filtrarse accidentalmente (a través de canales de depuración que pueden transmitirse a través de texto sin formato, a usuarios finales o a lugares inesperados en el sistema de archivos, como ~ /.* sh_history).

  • Los archivos de configuración pueden agregarse accidentalmente al control de versiones y terminar en repositorios accesibles para personas sin privilegios de despliegue.

Lea la publicación de blog Variables de entorno considera dañino para sus secretos para obtener más argumentos: el entorno es accesible para todo el proceso, se hereda para procesos secundarios (y posiblemente de terceros) y no existe una suposición clara entre desarrolladores externos para tratar variables de entorno como confidencial

El formato de archivo de configuración más simple en Python es simplemente un módulo de Python .