Uchovávání vašich soukromých klíčů mimo úložiště kódu je pro bezpečnost životně důležité. Zjistěte, jak to udělat a jak se zotavit, pokud jste již udělali chybu.

V Django hraje tajný klíč zásadní roli při zvyšování bezpečnosti vaší aplikace. Pomáhá spravovat uživatelské relace, chrání před útoky Cross-Site Request Forgery (CSRF) a chrání vaše data mimo jiné generováním a ověřováním kryptografických podpisů.

Tajný klíč projektu byste měli mít neustále v bezpečí. Jeho odhalení způsobí, že vaše aplikace bude náchylná ke škodlivým útokům hackerů, což ohrozí její bezpečnost. Pokud dojde ke kompromitaci vašeho tajného klíče, měli byste vědět, jak vygenerovat nový, abyste snížili negativní dopad na vaši aplikaci.

Jak může být váš tajný klíč Django odhalen?

Svůj tajný klíč Django můžete omylem zveřejnit, pokud jej nevědomky zadáte do git nebo podobného úložiště zdrojového kódu. Tato chyba je běžná mezi novými programátory, kteří stále jsou učení o GitHubu. Když k tomu dojde, můžete provést jednu z následujících akcí:

instagram viewer
  1. Smazat potvrzení.
  2. Úplně vyměňte tajný klíč.

Odstranění odevzdání nemusí být nejlepší volbou, protože historie odevzdání může být stále přístupná různými prostředky, jako jsou kopie uložené v mezipaměti na GitHubu nebo jiných distribuovaných systémech. Nejbezpečnější věcí, kterou můžete v takové situaci udělat, je předpokládat, že váš tajný klíč je již kompromitován.

Měli byste vygenerovat nový tajný klíč, který nahradí prolomený klíč a chránit jej pomocí proměnných prostředí. V každém případě byste se měli naučit, jak vygenerovat nový tajný klíč v Django, abyste ochránili svou aplikaci před věcmi jako Cross-Site Request Forgery (CSRF) útoky.

Jak vygenerovat nový tajný klíč v Django

Django poskytuje funkci s názvem get_random_secret_key() který vám pomůže vygenerovat nový tajný klíč, kdykoli jej zavoláte. Funkce get_random_secret_key() je obslužná funkce, která používá tajemství modul v Pythonu pro vygenerování zabezpečeného tajného klíče o délce 50 znaků.

Chcete-li vygenerovat nový tajný klíč pomocí funkce get_random_secret_key(), otevřete svůj Rozhraní příkazového řádku (CLI) a zadejte tento příkaz:

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

Výše uvedený příkaz importuje funkci get_random_secret_key() z django.core.management.utils a poté vytiskne nový tajný klíč o délce 50 znaků, který můžete použít ve svém projektu. Před spuštěním výše uvedeného příkazu se ujistěte, že jste v kořenovém adresáři svého projektu, tj. ve stejném umístění jako spravovat.py soubor ve vašem projektu.

Stejný příkaz můžete spustit mimo CLI vytvořením souboru Python a vložením tohoto fragmentu kódu do něj:

# import funkce get_random_secret_key().
z django.core.management.utils import get_random_secret_key

tajný_klíč = get_random_secret_key()
tisknout (tajný_klíč)

Kód můžete spustit zadáním tohoto do CLI:

python fileName.py

Výše uvedený příkaz by měl vytisknout nový tajný klíč o délce 50 znaků, který můžete použít ve svém projektu.

Jak chránit svůj tajný klíč pomocí proměnných prostředí

Pravděpodobně nebudete chtít měnit svůj tajný klíč pokaždé, když uděláte GitHub commit. Efektivní způsob, jak udržet svůj tajný klíč v bezpečí, je uložit jej do proměnné prostředí. Proměnné prostředí jsou hodnoty, které můžete nastavit mimo svou kódovou základnu, ke kterým má váš program stále přístup za běhu. Mohou ukládat konfiguraci, klíče API, přihlašovací údaje k databázi atd.

Proměnné prostředí můžete uložit do souboru s názvem .env a vyloučit je ze svého úložiště git. Můžete to udělat vytvořením souboru s názvem .gitignore ve vašem projektu. Soubor .gitignore obsahuje seznam souborů a složek, které Git nebude sledovat.

Typy souborů a adresářové struktury se liší projekt od projektu, ale existují rozumné výchozí hodnoty, které můžete použít pro každý jazyk. Seznam šablon .gitignore naleznete v Úložiště gitignore GitHubu. Následující kroky ukazují, jak používat soubor .gitignore s proměnnými prostředí v Django.

1. Vytvořte soubor .gitignore

Ve vašem základním adresáři – umístění vašeho spravovat.py soubor – vytvořte a .gitignore soubor a zkopírujte jeho obsah soubor GitHub do toho. Tento soubor je ukázkový .gitignore pro projekty Pythonu, který vylučuje běžné soubory, které ve svém úložišti nechcete.

Případně můžete do projektu přidat soubor .gitignore při vytváření úložiště na GitHubu. Chcete-li to provést, klepněte na Přidejte .gitignore možnost, vyhledejte Python a vyberte jej.

2. Vytvořte soubor .env

Ve svém základním adresáři vytvořte soubor s názvem .env. Tento soubor bude ukládat všechny vaše proměnné prostředí. Zkopírujte a vložte svůj tajný klíč do tohoto souboru (odstraňte uvozovky a mezery kolem něj). Zde je příklad:

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

Otevři .gitignore soubor a potvrďte, že .env název souboru je v něm. Pokud tomu tak není, můžete jej přidat napsáním samotného názvu souboru na řádek:

.env

3. Nainstalujte balíček python-dotenv

Otevřete CLI a nainstalujte python-dotenv balíček jako závislost.

pip install python-dotenv

4. Upravte svůj soubor settings.py

Ve vašem settings.py soubor, importujte následující balíčky:

import os
z dotenv import load_dotenv

Dále načtěte proměnné prostředí z vašeho .env soubor do svého settings.py soubor voláním load_dotenv() funkce:

load_dotenv()

Nakonec vyměňte svůj TAJNÝ KLÍČ proměnná s tímto řádkem kódu:

SECRET_KEY = os.environ.get('TAJNÝ KLÍČ')

Můžete spustit vývojový server a ověřit, že výše uvedená konfigurace funguje. Pokud ano, váš projekt by měl běžet tak, jak očekáváte. Níže uvedený příkaz spustí váš vývojový server.

runserver python manage.py

Udržujte svůj tajný klíč v bezpečí s proměnnými prostředí

Odhalení vašeho tajného klíče vám jako vývojáři může způsobit mnoho problémů. Nemusí být vždy možné obnovit svůj projekt z útoku, zejména v produkčním prostředí.

Abyste předešli těmto negativním vedlejším účinkům, vždy uložte svůj tajný klíč do proměnné prostředí a použijte a .gitignore soubor, aby se nedostal do vašeho úložiště git.