2013-03-10 5 views
29

Ich benutze Python und Django, um Webanwendungen zu erstellen, die wir in der Quellcodeverwaltung speichern. Die Art wie Django normalerweise eingerichtet ist, die Passwörter sind im Klartext in der Datei settings.py.Python/Django - Vermeiden Sie das Speichern von Passwörtern im Quellcode

Das Speichern meines Kennworts im Klartext würde mich einer Reihe von Sicherheitsproblemen öffnen, vor allem weil es sich um ein Open-Source-Projekt handelt und mein Quellcode versionskontrolliert (über git, auf Github, für die ganze Welt) !)

Die Frage ist, was wäre die beste Vorgehensweise für das sichere Schreiben einer settings.py-Datei in eine Django/Python-Entwicklungsumgebung?

Antwort

35

Obwohl ich auf Stackoverflow nichts Python-spezifisch finden konnte, fand ich eine website that was helpful und dachte, ich würde die Lösung mit dem Rest der Community teilen.

Die Lösung: Umgebungsvariablen.

Hinweis: Obwohl Umgebungsvariablen in Linux/Unix/OS X und in den Windows-Welten ähnlich sind, habe ich diesen Code auf einem Windows-Computer nicht getestet. Bitte lassen Sie mich wissen, wenn es funktioniert.

In Ihrem bash/sh-Shell ein:

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

Und in Ihrem Django settings.py Datei:

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

In diesem Fall würde der Benutzername und das Passwort auf einen leeren String Standard wenn die Umgebungsvariable nicht existiert.

+6

... und die Datei mit den Passwörtern, die Sie auf .gitignore setzen –

+0

Das Buch Zwei Schaufeln von Django enthält Code zum Auslösen einer Ausnahme, falls die Umgebungsvariablen in Kapitel 5 nicht existieren: https: // django .2scoops.org/ –

+1

Spezifisch sehen Sie den Zwei Scoops Code [auf ihrem github] (https://github.com/twoscoops/django-twoscoops-project/blob/master/project_name/project_name/settings/production.py) –

0

Obwohl Umgebungsvariablen bequem für viele Konfiguration sind, setzen Passwörter in Umgebungsvariablen ist notsecure. Mit der Alternative eine Konfigurationsdatei außerhalb der regulären Versionskontrolle ist, sind hier einige verschiedene Nachteile:

  • Umgebungsvariablen versehentlich (durch Debug-Kanäle auslaufen könnte, die über Klartext erhalten übertragen könnten, an Endabnehmer oder an unerwarteten Orten im Dateisystem wie ~ /.* sh_history).

  • Konfigurationsdateien können versehentlich zur Versionskontrolle hinzugefügt werden und in Repositorys landen, auf die Personen ohne Bereitstellungsprivilegien zugreifen können.

den Posten Blog lesen Environment Variables Considered Harmful for Your Secrets für mehr Argumente: Die Umgebung für den gesamten Prozess zugänglich ist, wird auf das Kind vererbt (und möglicherweise 3rd-Party) Prozesse, und es gibt keine klare Annahme unter externen Entwicklern Umgebung zu behandeln Variablen als vertraulich. Das einfachste Konfigurationsdateiformat in Python ist einfach a Python module.

Verwandte Themen