Det er viktig for sikkerheten å holde de private nøklene dine utenfor kodelager. Finn ut hvordan du gjør det og hvordan du gjenoppretter hvis du allerede har gjort feilen.

I Django spiller en hemmelig nøkkel en viktig rolle for å forbedre sikkerheten til applikasjonen din. Den hjelper til med å administrere brukerøkter, beskytter mot Cross-Site Request Forgery (CSRF)-angrep, og beskytter dataene dine ved blant annet å generere og verifisere kryptografiske signaturer.

Du bør holde prosjektets hemmelige nøkkel sikker til enhver tid. Å avsløre den vil gjøre applikasjonen din utsatt for ondsinnede angrep fra hackere, og kompromittere sikkerheten. Hvis den hemmelige nøkkelen din blir kompromittert, bør du vite hvordan du genererer en ny for å redusere den negative innvirkningen på applikasjonen din.

Hvordan kan din hemmelige Django-nøkkel bli avslørt?

Du kan ved et uhell gjøre den hemmelige Django-nøkkelen din offentlig hvis du ubevisst forplikter den til git eller et lignende kildekodelager. Denne feilen er vanlig blant nye programmerere som fortsatt er det

lære om GitHub. Når det skjer, kan du gjøre ett av følgende:

  1. Slett forpliktelsen.
  2. Erstatt den hemmelige nøkkelen helt.

Sletting av commit er kanskje ikke det beste alternativet fordi commit-historikken fortsatt kan være tilgjengelig på forskjellige måter, for eksempel bufrede kopier på GitHub eller andre distribuerte systemer. Det tryggeste å gjøre i en slik situasjon er å anta at den hemmelige nøkkelen din allerede er kompromittert.

Du bør generere en ny hemmelig nøkkel for å erstatte den kompromitterte og beskytte den ved å bruke miljøvariabler. I alle fall bør du lære hvordan du genererer en ny hemmelig nøkkel i Django for å beskytte appen din mot ting som Cross-Site Request Forgery (CSRF) angrep.

Hvordan generere en ny hemmelig nøkkel i Django

Django har en funksjon kalt get_random_secret_key() som hjelper deg med å generere en ny hemmelig nøkkel når du ringer den. Get_random_secret_key()-funksjonen er en verktøyfunksjon som bruker hemmeligheter modul i Python for å generere en sikker hemmelig nøkkel på 50 tegn.

For å generere en ny hemmelig nøkkel med get_random_secret_key()-funksjonen, åpne din Kommandolinjegrensesnitt (CLI) og skriv inn denne kommandoen:

python manage.py shell -c "fra django.core.management.utils import get_random_secret_key; print (get_random_secret_key())"

Kommandoen ovenfor importerer funksjonen get_random_secret_key() fra django.core.management.utils og skriver deretter ut en ny hemmelig nøkkel på 50 tegn, som du kan bruke i prosjektet ditt. Før du kjører kommandoen ovenfor, sørg for at du er i rotkatalogen til prosjektet, dvs. samme plassering som manage.py fil i prosjektet ditt.

Du kan kjøre den samme kommandoen utenfor CLI ved å lage en Python-fil og lime inn denne kodebiten i den:

# importer funksjonen get_random_secret_key().
fra django.core.management.utils import get_random_secret_key

hemmelig_nøkkel = get_random_secret_key()
print (hemmelig_nøkkel)

Du kan kjøre koden ved å skrive inn dette i CLI:

python filnavn.py

Kommandoen ovenfor skal skrive ut en ny hemmelig nøkkel på 50 tegn som du kan bruke i prosjektet ditt.

Slik beskytter du din hemmelige nøkkel med miljøvariabler

Du vil sannsynligvis ikke endre den hemmelige nøkkelen din hver gang du foretar en GitHub-forpliktelse. En effektiv måte å holde den hemmelige nøkkelen din på er ved å lagre den i en miljøvariabel. Miljøvariabler er verdier du kan angi utenfor kodebasen din, som programmet fortsatt har tilgang til under kjøring. De kan lagre konfigurasjon, API-nøkler, databaselegitimasjon, etc.

Du kan lagre miljøvariablene dine i en fil som heter .env og ekskludere dem fra git-depotet ditt. Du kan gjøre dette ved å lage en fil som heter .gitignore i prosjektet ditt. .gitignore-filen inneholder en liste over filer og mapper som Git ikke vil spore.

Filtyper og katalogstrukturer varierer fra prosjekt til prosjekt, men det er fornuftige standardinnstillinger du kan bruke for hvert språk. Du finner en liste over .gitignore-maler i GitHubs gitignore-depot. Følgende trinn viser deg hvordan du bruker .gitignore-filen med miljøvariabler i Django.

1. Opprett en .gitignore-fil

I basiskatalogen din – plasseringen til din manage.py fil – lag en .gitignore fil og kopier innholdet i denne GitHub-fil i det. Denne filen er et eksempel på .gitignore for Python-prosjekter som ekskluderer vanlige filer som du ikke vil ha i depotet ditt.

Alternativt kan du legge til en .gitignore-fil til prosjektet ditt mens du oppretter et depot på GitHub. For å gjøre det, klikk på Legg til .gitignore alternativet, søk etter Python og velg det.

2. Opprett en .env-fil

Lag en fil som heter i basiskatalogen din .env. Denne filen vil lagre alle miljøvariablene dine. Kopier og lim inn den hemmelige nøkkelen din i denne filen (fjern anførselstegn og mellomrom rundt den). Her er et eksempel:

SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%

Åpne .gitignore fil og bekreft at .env filnavnet er i den. Hvis det ikke er det, kan du legge det til ved å skrive filnavnet på egen hånd på en linje:

.env

3. Installer python-dotenv-pakken

Åpne CLI, og installer python-dotenv pakken som en avhengighet.

pip installer python-dotenv

4. Endre dine settings.py-fil

I din settings.py fil, importer følgende pakker:

import os
fra dotenv import load_dotenv

Deretter laster du inn miljøvariablene fra din .env fil i din settings.py fil ved å ringe load_dotenv() funksjon:

load_dotenv()

Til slutt, bytt ut din SECRET_KEY variabel med denne kodelinjen:

SECRET_KEY = os.environ.get('SECRET_KEY')

Du kan kjøre utviklingsserveren din for å bekrefte at konfigurasjonen ovenfor fungerer. Hvis det gjør det, bør prosjektet kjøre som du forventer. Kommandoen nedenfor vil starte utviklingsserveren din.

python manage.py runserver

Hold din hemmelige nøkkel trygg med miljøvariabler

Å avsløre din hemmelige nøkkel kan forårsake mange problemer for deg som utvikler. Du kan kanskje ikke alltid gjenopprette prosjektet etter et angrep, spesielt i et produksjonsmiljø.

For å forhindre disse negative bivirkningene, lagre alltid den hemmelige nøkkelen i en miljøvariabel og bruk en .gitignore fil for å holde den utenfor git-lageret ditt.