Mantenere le chiavi private fuori dai repository di codice è vitale per la sicurezza. Scopri come farlo e come recuperare se hai già commesso l'errore.
In Django, una chiave segreta gioca un ruolo fondamentale nel migliorare la sicurezza della tua applicazione. Aiuta a gestire le sessioni utente, protegge dagli attacchi CSRF (Cross-Site Request Forgery) e salvaguarda i tuoi dati generando e verificando firme crittografiche, tra le altre cose.
Dovresti tenere sempre al sicuro la chiave segreta del tuo progetto. L'esposizione lascerà la tua applicazione vulnerabile agli attacchi malevoli degli hacker, compromettendone la sicurezza. Se la tua chiave segreta viene compromessa, dovresti sapere come generarne una nuova per ridurre l'impatto negativo sulla tua applicazione.
Come può essere esposta la chiave segreta di Django?
Puoi accidentalmente rendere pubblica la tua chiave segreta Django se inconsapevolmente la impegni in git o in un repository di codice sorgente simile. Questo errore è comune tra i nuovi programmatori che sono fermi
conoscere GitHub. Quando accade, puoi eseguire una delle seguenti operazioni:- Elimina il commit.
- Sostituisci completamente la chiave segreta.
L'eliminazione del commit potrebbe non essere l'opzione migliore perché la cronologia del commit può ancora essere accessibile in vari modi, ad esempio copie memorizzate nella cache su GitHub o altri sistemi distribuiti. La cosa più sicura da fare in una situazione del genere è presumere che la tua chiave segreta sia già compromessa.
Dovresti generare una nuova chiave segreta per sostituire quella compromessa e proteggerla utilizzando variabili di ambiente. In ogni caso, dovresti imparare a generare una nuova chiave segreta in Django per proteggere la tua app da cose come Attacchi Cross-Site Request Forgery (CSRF)..
Come generare una nuova chiave segreta in Django
Django fornisce una funzione chiamata get_random_secret_key() che ti aiuta a generare una nuova chiave segreta ogni volta che la chiami. La funzione get_random_secret_key() è una funzione di utilità che utilizza il file segreti modulo in Python per generare una chiave segreta sicura di 50 caratteri.
Per generare una nuova chiave segreta con la funzione get_random_secret_key(), apri il tuo Interfaccia della riga di comando (CLI) e digita questo comando:
python manage.py shell -c "da django.core.management.utils import get_random_secret_key; stampa (get_random_secret_key())"
Il comando precedente importa la funzione get_random_secret_key() da django.core.management.utils e poi stampa una nuova chiave segreta di 50 caratteri, che puoi usare nel tuo progetto. Prima di eseguire il comando precedente, assicurati di essere nella directory principale del tuo progetto, ovvero nella stessa posizione del gestire.py file nel tuo progetto.
Puoi eseguire lo stesso comando al di fuori della tua CLI creando un file Python e incollandovi questo frammento di codice:
# importa la funzione get_random_secret_key()
da django.core.management.utils importare get_random_secret_key
chiave_segreta = get_random_chiave_segreta()
stampa (chiave_segreta)
Puoi eseguire il codice digitandolo nella tua CLI:
python nomefile.py
Il comando sopra dovrebbe stampare una nuova chiave segreta di 50 caratteri che puoi usare nel tuo progetto.
Come proteggere la tua chiave segreta con le variabili d'ambiente
Probabilmente non vorrai cambiare la tua chiave segreta ogni volta che effettui un commit su GitHub. Un modo efficiente per mantenere la tua chiave segreta al sicuro è archiviarla in una variabile di ambiente. Le variabili di ambiente sono valori che puoi impostare al di fuori della tua base di codice, a cui il tuo programma può ancora accedere durante il runtime. Possono memorizzare la configurazione, le chiavi API, le credenziali del database, ecc.
Puoi memorizzare le tue variabili di ambiente in un file chiamato .env ed escluderle dal tuo repository git. Puoi farlo creando un file chiamato .gitignore nel tuo progetto. Il file .gitignore contiene un elenco di file e cartelle che Git non terrà traccia.
I tipi di file e le strutture delle directory variano da progetto a progetto, ma ci sono impostazioni predefinite ragionevoli che puoi applicare per ogni lingua. Puoi trovare un elenco di modelli .gitignore in Repository gitignore di GitHub. I passaggi seguenti mostrano come utilizzare il file .gitignore con le variabili di ambiente in Django.
1. Crea un file .gitignore
Nella tua directory di base, la posizione del tuo file gestire.py file: crea un file .gitignore file e copiarne il contenuto File GitHub dentro. Quel file è un esempio .gitignore per i progetti Python che esclude i file comuni che non vorrai nel tuo repository.
In alternativa, puoi aggiungere un file .gitignore al tuo progetto durante la creazione di un repository su GitHub. Per farlo, clicca sul Aggiungi .gitignore opzione, cerca Python e selezionalo.
2. Crea un file .env
Nella tua directory di base, crea un file chiamato .env. Questo file memorizzerà tutte le variabili di ambiente. Copia e incolla la tua chiave segreta in questo file (rimuovi le virgolette e gli spazi intorno). Ecco un esempio:
SECRET_KEY=x#)_v1dtrlqvc61*025t^u4*-2h^kq&fmaw-ifgkppjxpyhh1%
Apri il .gitignore file e confermare che il file .env il nome del file è in esso. Se non lo è, puoi aggiungerlo scrivendo il nome del file da solo su una riga:
.env
3. Installa il pacchetto python-dotenv
Apri la tua CLI e installa il file python-dotenv package come dipendenza.
pip installa python-dotenv
4. Modifica il tuo file settings.py
Nel tuo impostazioni.py file, importare i seguenti pacchetti:
importare os
da dotenv importare load_dotenv
Successivamente, carica le variabili di ambiente dal tuo file .env file nel tuo impostazioni.py file chiamando il load_dotenv() funzione:
load_dotenv()
Infine, sostituisci il tuo CHIAVE SEGRETA variabile con questa riga di codice:
SECRET_KEY = os.environ.get('CHIAVE SEGRETA')
Puoi eseguire il tuo server di sviluppo per verificare che la configurazione di cui sopra funzioni. In tal caso, il tuo progetto dovrebbe funzionare come ti aspetteresti. Il comando seguente avvierà il tuo server di sviluppo.
python manage.py esegue il server
Mantieni la tua chiave segreta al sicuro con le variabili d'ambiente
Esporre la tua chiave segreta può causare molti problemi a te come sviluppatore. Potresti non essere sempre in grado di recuperare il tuo progetto da un attacco, soprattutto in un ambiente di produzione.
Per evitare questi effetti collaterali negativi, archivia sempre la tua chiave segreta in una variabile di ambiente e usa a .gitignore file per tenerlo fuori dal tuo repository git.