2013-03-10 13 views
29

Używam Pythona i Django do tworzenia aplikacji internetowych, które przechowujemy w kontroli kodu źródłowego. Sposób, w jaki Django jest normalnie skonfigurowany, hasła są w pliku tekstowym w pliku settings.py.Python/Django - Unikaj zapisywania haseł w kodzie źródłowym

Przechowywanie mojego hasła w postaci zwykłego tekstu spowodowałoby wiele problemów związanych z bezpieczeństwem, szczególnie dlatego, że jest to projekt open source i mój kod źródłowy byłby kontrolowany pod względem wersji (przez git, na Github, aby cały świat mógł zobaczyć !)

Pytanie brzmi: jaka byłaby najlepsza metoda bezpiecznego zapisu pliku settings.py w środowisku programistycznym Django/Python?

Odpowiedz

35

Chociaż nie byłem w stanie natknąć się na nic specyficznego dla Pythona na stackoverflow, znalazłem website that was helpful i pomyślałem, że podzielę się rozwiązaniem z resztą społeczności.

Rozwiązanie: zmienne środowiskowe.

Uwaga: Chociaż zmienne środowiskowe są podobne w obu systemach Linux/Unix/OS X i Windows, nie przetestowałem tego kodu na komputerze z systemem Windows. Daj mi znać, jeśli to działa.

W swojej powłoce bash/sh, typ:

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

A w pliku settings.py Django:

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

W tym przypadku nazwa użytkownika i hasło by domyślnie pusty ciąg jeśli zmienna środowiskowa nie istnieje.

+6

... oraz plik z hasłami ustawionymi na .gitignore –

+0

Książka "Dwie szuflady Django" zawiera kod do zgłaszania wyjątków w przypadku, gdy zmienne środowiskowe nie istnieją w rozdziale 5: https: // django .2scoops.org/ –

+1

W szczególności zobacz kod Two Scoops [na ich githubie] (https://github.com/twoscoops/django-twoscoops-project/blob/master/project_name/project_name/settings/production.py) –

0

Chociaż zmienne środowiskowe są wygodne dla wielu konfiguracji wprowadzenie hasła w zmiennych środowiskowych jest notsecure. Z alternatywą jest plik konfiguracyjny poza regularnej kontroli wersji, oto kilka różne minusy:

  • Zmienne środowiskowe mogą przypadkowo wycieku (kanałami debugowania, które mogłyby dostać przesyłanych za pośrednictwem zwykłego tekstu, użytkownikom końcowym lub nieoczekiwanych miejscach w systemie plików takich jak ~ /.* sh_history).

  • Pliki konfiguracyjne mogą zostać przypadkowo dodane do kontroli wersji i trafiają do repozytoriów dostępnych dla osób bez uprawnień do wdrażania.

Przeczytaj wpis na blogu Environment Variables Considered Harmful for Your Secrets więcej argumentów: Środowisko jest dostępna dla całego procesu, jest dziedziczona do dziecka (i ewentualnie 3rd-party) procesy, a nie istnieje wyraźne założenie wśród zewnętrznych deweloperów w leczeniu środowiska zmienne jako poufne.

Najprostszy format pliku konfiguracyjnego w języku Python to po prostu a Python module.

Powiązane problemy