Django má vynikající bezpečnostní funkce, ale je důležité, abyste jim rozuměli a co dělají, aby vaše aplikace byly skutečně bezpečné.
Django poskytuje bezpečný základ pro vytváření webových aplikací. Spoléhat se na výchozí bezpečnostní funkce Django ale nestačí. Je pro vás klíčové zavést další opatření k posílení bezpečnosti vašich aplikací.
Zavedením dodatečných opatření můžete zmírnit potenciální zranitelnosti, chránit citlivá data a chránit vaši aplikaci před kybernetickými hrozbami. To zajišťuje ochranu informací vašich uživatelů a pomáhá udržovat pověst a důvěryhodnost vaší organizace.
Zabezpečení výhledů pomocí dekoratérů
Pohledy v Django zpracovávají příchozí požadavky. Hrají zásadní roli při určování reakce, kterou klient dostane. Zabezpečení pohledů řídí přístup a chrání citlivé funkce. Django nabízí dekorátory, které můžete použít na pohledy a prosadit konkrétní bezpečnostní opatření.
@login_required Dekorátor
The @vyžadováno přihlášení dekorátor zajišťuje, že ke konkrétnímu pohledu mají přístup pouze ověření uživatelé. Když se neověřený uživatel pokusí o přístup k zobrazení, aplikace jej přesměruje na přihlašovací stránku.
z django.contrib.auth.dekorátoři import login_required
z django.http import HttpResponse
@vyžadováno přihlášení
defsecure_view(žádost):
# Zde je logika vašeho pohledu
vrátit se HttpResponse("Toto je bezpečný pohled")
Uplatnění @vyžadováno přihlášení decorator na funkci secure_view automaticky zajistí, že uživatel je ověřen před spuštěním logiky pohledu.
Vlastní dekoratéři
Django vám umožňuje vytvářet vlastní dekorátory. To vám umožní implementovat další bezpečnostní kontroly nebo omezení. Můžete například chtít vytvořit dekorátor, který omezuje přístup ke konkrétním uživatelským rolím.
z functools import zábaly
z django.http import HttpResponsedefadmin_only(view_func):
@wraps (view_func)
defobal(žádost, *args, **kwargs):
-li request.user.is_superuser:
vrátit se view_func (požadavek, *args, **kwargs)
jiný:
vrátit se HttpResponse("Přístup odepřen")
vrátit se obal
The admin_only dekoratér kontroluje, zda uživatel přistupující k pohledu je superuživatel. Pokud jsou, spustí se funkce zobrazení, jinak odepře uživateli přístup.
Autentizace a autorizace uživatele
Autentizace a autorizace uživatele jsou kritickými součástmi zabezpečení aplikací Django. Zajišťují, že ke konkrétním funkcím aplikace má přístup správná osoba.
Ověření uživatele
Autentizace uživatele ověřuje identitu osoby přistupující k vaší aplikaci. Autentizační systém Django poskytuje funkce pro řešení tohoto problému.
z django.contrib.auth import ověřit, přihlásit se
z django.http import HttpResponsedeflogin_view(žádost):
-li request.metoda == 'POŠTA':
uživatelské jméno = požadavek. POŠTA['uživatelské jméno']
heslo = žádost. POŠTA['Heslo']
uživatel = ověřit (požadavek, uživatelské jméno=uživatelské jméno, heslo=heslo)
-li uživatel jeneŽádný:
přihlášení (žádost, uživatel)
vrátit se HttpResponse("Přihlášení úspěšné")
jiný:
vrátit se HttpResponse("Neplatné přihlašovací údaje")
jiný:
# Vykreslit přihlašovací formulář
vrátit se HttpResponse("Přihlašovací formulář")
The login_view funkce zpracovává proces přihlášení. Když uživatel odešle své přihlašovací údaje, funkce ověřování je ověří. Pokud jsou přihlašovací údaje platné, funkce přihlášení vytvoří pro uživatele relaci, která mu umožní přístup k omezeným oblastem aplikace. Pokud jsou přihlašovací údaje nesprávné, kód nevytvoří relaci.
Autorizace uživatele
Autorizace uživatele určuje, jaké akce může uživatel v aplikaci provádět. Django poskytuje flexibilní systém oprávnění, který vám dává kontrolu nad uživatelským přístupem.
z django.contrib.auth.dekorátoři import povolení_vyžadováno
z django.http import HttpResponse
@permission_required('polls.can_vote')
defhlasování(žádost):
# Logika hlasování zde
vrátit se HttpResponse("Hlasování bylo zaznamenáno")
Ve výše uvedeném příkladu je @permission_required dekoratér zajišťuje, že pouze uživatelé s polls.can_vote oprávnění má přístup k zobrazení hlasování. Pokud se uživatel bez potřebných oprávnění pokusí o přístup k pohledu, bude mu přístup odepřen.
Implementace vlastního middlewaru
Middleware je umístěn mezi webovým serverem a pohledem. Implementace vlastního middlewaru přidává další bezpečnostní kontroly nebo upravuje požadavky a odpovědi. To může být z důvodů, jako je vynucení HTTPS.
z django.http import HttpResponsePermanentRedirect
třídaEnforceHttpsMiddleware:
def__init__(self, get_response):
self.get_response = get_responsedef__volání__(sebe, žádost):
-line request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
vrátit se HttpResponsePermanentRedirect (secure_url)
vrátit se self.get_response (požadavek)
Výše uvedený middleware kontroluje, zda požadavek používá is_secure metoda. Pokud ne, přesměruje se na HTTPS verze adresy URL.
Zabezpečení manipulace se soubory
Práce se soubory je běžnou funkcí webových aplikací. Pokud není řádně zabezpečena, představuje bezpečnostní rizika. Při manipulaci se soubory nahranými uživateli je důležité ověřit obsah souboru. To zabraňuje škodlivému nahrávání. Typy souborů můžete ověřit pomocí Django's FileExtensionValidator.
z validátory django.core import FileExtensionValidator
z django.forms import formuláře
třídaFileUploadForm(formuláře. Formulář):
soubor = formuláře. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
Ve výše uvedeném bloku kódu je FileUploadForm třída používá FileExtensionValidator povolit pouze nahrávání souborů PDF a DOCX. Aplikace během nahrávání odmítne jakékoli jiné formáty souborů. Upravte povolená rozšíření podle požadavků vaší aplikace.
Ochrana CSRF
Útokům Cross-Site Request Forgery (CSRF) můžete zabránit pomocí vestavěné ochrany CSRF společnosti Django. Do šablony byste měli zahrnout a CSRF token který se ověří na straně serveru.
Když použijete % csrf_token % šablony, Django vygeneruje skryté vstupní pole s tokenem CSRF. Tento token je jedinečný pro každou uživatelskou relaci. Pomáhá ověřit pravost odeslaného formuláře.
Strana serveru kontroluje token CSRF při zpracování odeslání formuláře. Pokud token chybí nebo je neplatný, Django vyvolá chybu Zakázáno (HTTP 403). Je nezbytné zajistit, aby vaše aplikace byla chráněna před tímto typem bezpečnostní chyby.
Psaní bezpečných formulářů
Při vytváření formulářů je důležité zacházet s uživatelskými vstupy bezpečně. Tím se zabrání běžným zranitelnostem, jako je SQL injection a XSS útoky. Níže je uveden příklad, který ukazuje, jak můžete vytvořit zabezpečený formulář v Django.
z django import formuláře
z django.utils.html import uniknouttřídaSecureForm(formuláře. Formulář):
jméno = formy. CharField (max_length=100)
email = formuláře. EmailField()defčisté_jméno(já):
name = self.cleaned_data['název']# Dezinfikujte uživatelský vstup
sanitized_name = escape (name)
vrátit se sanitized_namedefčistý_e-mail(já):
email = self.cleaned_data['e-mailem']# Ověřte a dezinfikujte uživatelský vstup
-line email.endswith('@example.com'):
vyzdvihnout formuláře. Chyba ověření("Neplatná e-mailová doména")
sanitized_email = escape (e-mail)
vrátit se dezinfikovaný_e-mail
The čisté_jméno a čistý_e-mail metody ověřují a dezinfikují uživatelský vstup. The čisté_jméno metoda využívá uniknout funkce pro dezinfekci zadání názvu a prevence potenciální útoky XSS.
The čistý_e-mail metoda ověří formát e-mailu a omezí e-mailovou doménu na example.com. Zvyšuje a Chyba ověření pokud e-mail nesplňuje zadaná kritéria. Tato akce zvyšuje zabezpečení vašich formulářů a chrání je před běžnými chybami zabezpečení.
Je důležité porozumět zranitelnostem webových aplikací
Pochopení zranitelností webových aplikací vám pomůže zabezpečit vaši aplikaci. Učiní tak tím, že vám pomůže identifikovat a řešit potenciální slabá místa v aplikaci. To zase výrazně sníží pravděpodobnost úspěšných útoků.