Att hålla dina privata nycklar borta från kodförråd är avgörande för säkerheten. Ta reda på hur du gör det och hur du återställer dig om du redan har gjort misstaget.
I Django spelar en hemlig nyckel en viktig roll för att förbättra säkerheten för din applikation. Det hjälper till att hantera användarsessioner, skyddar mot Cross-Site Request Forgery (CSRF)-attacker och skyddar dina data genom att generera och verifiera kryptografiska signaturer bland annat.
Du bör alltid hålla ditt projekts hemliga nyckel säker. Om du avslöjar det kommer din applikation att bli känslig för skadliga attacker från hackare, vilket äventyrar dess säkerhet. Om din hemliga nyckel äventyras bör du veta hur du skapar en ny för att minska den negativa effekten på din applikation.
Hur kan din hemliga Django-nyckel avslöjas?
Du kan av misstag göra din hemliga Django-nyckel offentlig om du omedvetet överlåter den till git eller ett liknande källkodsförråd. Detta misstag är vanligt bland nya programmerare som fortfarande är det lära sig om GitHub. När det händer kan du göra något av följande:
- Ta bort commit.
- Byt ut den hemliga nyckeln helt.
Att ta bort commit kanske inte är det bästa alternativet eftersom commit-historiken fortfarande kan vara tillgänglig på olika sätt, såsom cachade kopior på GitHub eller andra distribuerade system. Det säkraste du kan göra i en sådan situation är att anta att din hemliga nyckel redan är komprometterad.
Du bör generera en ny hemlig nyckel för att ersätta den komprometterade och skydda den genom att använda miljövariabler. I vilket fall som helst bör du lära dig hur du genererar en ny hemlig nyckel i Django för att skydda din app från saker som Cross-Site Request Forgery (CSRF) attacker.
Hur man skapar en ny hemlig nyckel i Django
Django tillhandahåller en funktion som kallas get_random_secret_key() som hjälper dig att skapa en ny hemlig nyckel när du ringer den. Funktionen get_random_secret_key() är en hjälpfunktion som använder hemligheter modul i Python för att generera en säker hemlig nyckel på 50 tecken.
För att generera en ny hemlig nyckel med funktionen get_random_secret_key() öppnar du din Kommandoradsgränssnitt (CLI) och skriv detta kommando:
python manage.py skal -c "från django.core.management.utils import get_random_secret_key; print (get_random_secret_key())"
Ovanstående kommando importerar funktionen get_random_secret_key() från django.core.management.utils och skriver sedan ut en ny hemlig nyckel på 50 tecken, som du kan använda i ditt projekt. Innan du kör kommandot ovan, se till att du är i rotkatalogen för ditt projekt, dvs. på samma plats som hantera.py fil i ditt projekt.
Du kan köra samma kommando utanför din CLI genom att skapa en Python-fil och klistra in det här kodavsnittet i den:
# importera get_random_secret_key()-funktionen
från django.core.management.utils importera get_random_secret_key
hemlig_nyckel = get_random_secret_key()
print (hemlig nyckel)
Du kan köra koden genom att skriva detta i din CLI:
python filnamn.py
Kommandot ovan ska skriva ut en ny hemlig nyckel på 50 tecken som du kan använda i ditt projekt.
Hur du skyddar din hemliga nyckel med miljövariabler
Du vill förmodligen inte ändra din hemliga nyckel varje gång du gör en GitHub commit. Ett effektivt sätt att hålla din hemliga nyckel säker är att lagra den i en miljövariabel. Miljövariabler är värden du kan ställa in utanför din kodbas, som ditt program fortfarande kan komma åt under körning. De kan lagra konfiguration, API-nycklar, databasuppgifter, etc.
Du kan lagra dina miljövariabler i en fil som heter .env och exkludera dem från ditt git-förråd. Du kan göra detta genom att skapa en fil som heter .gitignore i ditt projekt. .gitignore-filen innehåller en lista över filer och mappar som Git inte kommer att spåra.
Filtyper och katalogstrukturer varierar från projekt till projekt, men det finns vettiga standardinställningar du kan använda för varje språk. Du kan hitta en lista över .gitignore-mallar i GitHubs gitignore-förråd. Följande steg visar hur du använder .gitignore-filen med miljövariabler i Django.
1. Skapa en .gitignore-fil
I din baskatalog — platsen för din hantera.py fil – skapa en .gitignore fil och kopiera innehållet i denna GitHub-fil Gillar det. Den filen är ett exempel på .gitignore för Python-projekt som utesluter vanliga filer som du inte vill ha i ditt arkiv.
Alternativt kan du lägga till en .gitignore-fil till ditt projekt samtidigt som du skapar ett arkiv på GitHub. För att göra det, klicka på Lägg till .gitignore alternativet, sök efter Python och välj det.
2. Skapa en .env-fil
Skapa en fil som heter i din baskatalog .env. Den här filen kommer att lagra alla dina miljövariabler. Kopiera och klistra in din hemliga nyckel i den här filen (ta bort citattecken och blanksteg runt den). Här är ett exempel:
SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
Öppna .gitignore fil och bekräfta att .env filnamnet finns i den. Om det inte är det kan du lägga till det genom att skriva filnamnet på egen hand på en rad:
.env
3. Installera python-dotenv-paketet
Öppna din CLI och installera python-dotenv paket som ett beroende.
pip installera python-dotenv
4. Ändra din settings.py-fil
I din settings.py fil, importera följande paket:
importera os
från dotenv importera load_dotenv
Ladda sedan miljövariablerna från din .env fil i din settings.py fil genom att anropa load_dotenv() fungera:
load_dotenv()
Slutligen, byt ut din HEMLIG NYCKEL variabel med denna kodrad:
SECRET_KEY = os.environ.get('HEMLIG NYCKEL')
Du kan köra din utvecklingsserver för att bekräfta att ovanstående konfiguration fungerar. Om det gör det bör ditt projekt fungera som du förväntar dig. Kommandot nedan kommer att starta din utvecklingsserver.
python manage.py runserver
Håll din hemliga nyckel säker med miljövariabler
Att avslöja din hemliga nyckel kan orsaka många problem för dig som utvecklare. Du kanske inte alltid kan återställa ditt projekt från en attack, särskilt i en produktionsmiljö.
För att förhindra dessa negativa biverkningar, lagra alltid din hemliga nyckel i en miljövariabel och använd en .gitignore fil för att hålla den borta från ditt git-förråd.