Django má vynikajúce bezpečnostné funkcie, ale je dôležité, aby ste im rozumeli a čo robia, aby boli vaše aplikácie skutočne bezpečné.
Django poskytuje bezpečný základ pre vytváranie webových aplikácií. Spoliehať sa na predvolené bezpečnostné funkcie Djanga však nestačí. Je dôležité, aby ste zaviedli dodatočné opatrenia na posilnenie bezpečnosti vašich aplikácií.
Zavedením dodatočných opatrení môžete zmierniť potenciálne zraniteľné miesta, chrániť citlivé údaje a chrániť svoju aplikáciu pred kybernetickými hrozbami. To zaisťuje ochranu informácií vašich používateľov a pomáha udržiavať povesť a dôveryhodnosť vašej organizácie.
Zabezpečenie výhľadov pomocou dekoratérov
Zobrazenia v Django spracovávajú prichádzajúce požiadavky. Zohrávajú dôležitú úlohu pri určovaní odozvy, ktorú klient dostane. Zabezpečenie pohľadov riadi prístup a chráni citlivé funkcie. Django ponúka dekoratérov, ktoré môžete použiť pri pohľadoch na presadenie konkrétnych bezpečnostných opatrení.
@login_required Dekorátor
The
@vyžaduje sa_prihlásenie dekoratér zaisťuje, že ku konkrétnemu pohľadu majú prístup iba overení používatelia. Keď sa neoverený používateľ pokúsi o prístup k zobrazeniu, aplikácia ho presmeruje na prihlasovaciu stránku.od django.contrib.auth.dekoratéri importovať login_required
od django.http importovať HttpResponse
@vyžaduje sa_prihlásenie
defsecure_view(žiadosť):
# Tu je logika vášho pohľadu
vrátiť HttpResponse("Toto je bezpečný pohľad")
Aplikácia @vyžaduje sa_prihlásenie dekorátor na funkciu secure_view automaticky zaistí autentifikáciu používateľa pred spustením logiky zobrazenia.
Vlastné dekoratéry
Django vám umožňuje vytvárať vlastné dekorátory. To vám umožňuje implementovať dodatočné bezpečnostné kontroly alebo obmedzenia. Môžete napríklad chcieť vytvoriť dekoratér, ktorý obmedzí prístup ku konkrétnym rolám používateľov.
od functools importovať zábaly
od django.http importovať HttpResponsedefadmin_only(view_func):
@wraps (view_func)
defobal(žiadosť, *args, **kwargs):
ak request.user.is_superuser:
vrátiť view_func (požiadavka, *args, **kwargs)
inak:
vrátiť HttpResponse("Prístup zamietnutý")
vrátiť obal
The admin_only dekoratér skontroluje, či používateľ pristupujúci k zobrazeniu je superužívateľ. Ak sú, spustí sa funkcia zobrazenia, v opačnom prípade zakáže používateľovi prístup.
Overenie a autorizácia používateľa
Autentifikácia a autorizácia používateľov sú kritickými súčasťami zabezpečenia aplikácií Django. Zabezpečujú, že správna osoba má prístup k špecifickým funkciám aplikácie.
Overenie používateľa
Autentifikácia používateľa overuje identitu osoby, ktorá pristupuje k vašej aplikácii. Autentifikačný systém Django poskytuje funkcie na zvládnutie tohto problému.
od django.contrib.auth importovať overiť, prihlásiť sa
od django.http importovať HttpResponsedeflogin_view(žiadosť):
ak request.method == 'POST':
užívateľské meno = požiadavka. Zverejniť['používateľské meno']
heslo = žiadosť. Zverejniť['heslo']
používateľ = overiť (žiadosť, používateľské meno = používateľské meno, heslo = heslo)
ak užívateľ jeniežiadne:
prihlásenie (požiadavka, používateľ)
vrátiť HttpResponse("Prihlásenie úspešné")
inak:
vrátiť HttpResponse("Neplatné poverenia")
inak:
# Vykreslite prihlasovací formulár
vrátiť HttpResponse("Prihlasovací formulár")
The login_view funkcia spracováva proces prihlásenia. Keď používateľ odošle svoje poverenia, funkcia autentifikácie ich overí. Ak sú poverenia platné, funkcia prihlásenia vytvorí pre používateľa reláciu, ktorá mu umožní prístup k obmedzeným oblastiam aplikácie. Ak sú poverenia nesprávne, kód nevytvorí reláciu.
Autorizácia používateľa
Autorizácia užívateľa určuje, aké akcie môže užívateľ vykonávať v rámci aplikácie. Django poskytuje flexibilný systém povolení, ktorý vám dáva kontrolu nad prístupom používateľov.
od django.contrib.auth.dekoratéri importovať povolenie_vyžaduje sa
od django.http importovať HttpResponse
@permission_required('polls.can_vote')
defhlasovať(žiadosť):
# Logika hlasovania tu
vrátiť HttpResponse("Hlasovanie bolo zaznamenané")
Vo vyššie uvedenom príklade je @permission_required dekoratér zaisťuje, že iba používatelia s polls.can_vote povolenie má prístup k zobrazeniu hlasovania. Ak sa používateľ bez potrebného povolenia pokúsi o prístup k zobrazeniu, prístup mu bude zamietnutý.
Implementácia vlastného middlewaru
Middleware sedí medzi webovým serverom a zobrazením. Implementácia vlastného middlewaru pridáva ďalšie bezpečnostné kontroly alebo upravuje požiadavky a odpovede. Môže to byť z dôvodov, ako je vynútenie HTTPS.
od django.http importovať HttpResponsePermanentRedirect
triedaEnforceHttpsMiddleware:
def__init__(self, get_response):
self.get_response = get_responsedef__zavolať__(ja, žiadosť):
aknie request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
vrátiť HttpResponsePermanentRedirect (secure_url)
vrátiť self.get_response (požiadavka)
Vyššie uvedený middleware kontroluje, či požiadavka používa is_secure metóda. Ak nie, presmeruje sa na HTTPS verzia adresy URL.
Zabezpečenie manipulácie so súbormi
Manipulácia so súbormi je bežnou funkciou webových aplikácií. Ak nie je správne zabezpečený, predstavuje bezpečnostné riziko. Pri manipulácii so súbormi nahranými používateľmi je dôležité overiť obsah súboru. Tým sa zabráni škodlivému nahrávaniu. Typy súborov môžete overiť pomocou Django's FileExtensionValidator.
od validátory django.core importovať FileExtensionValidator
od django.forms importovať formulárov
triedaFileUploadForm(formuláre. formulár):
súbor = formuláre. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
Vo vyššie uvedenom bloku kódu je FileUploadForm trieda používa FileExtensionValidator povoliť iba nahrávanie súborov PDF a DOCX. Aplikácia počas nahrávania odmietne akékoľvek iné formáty súborov. Prispôsobte povolené rozšírenia podľa požiadaviek vašej aplikácie.
Ochrana CSRF
Útokom CSRF (Cross-Site Request Forgery) môžete zabrániť pomocou vstavanej ochrany CSRF od Django. Do šablóny by ste mali zahrnúť a CSRF token ktorý sa overí na strane servera.
Keď použijete % csrf_token % šablóny, Django vygeneruje skryté vstupné pole s tokenom CSRF. Tento token je jedinečný pre každú reláciu používateľa. Pomáha overiť pravosť odoslaného formulára.
Strana servera skontroluje token CSRF pri spracovaní odoslania formulára. Ak token chýba alebo je neplatný, Django zobrazí chybu Zakázané (HTTP 403). Je nevyhnutné zabezpečiť, aby bola vaša aplikácia v bezpečí pred týmto typom bezpečnostnej zraniteľnosti.
Písanie bezpečných formulárov
Pri vytváraní formulárov je dôležité bezpečne spracovávať vstupy používateľov. Toto má zabrániť bežným zraniteľnostiam, ako sú SQL injection a XSS útoky. Nižšie je uvedený príklad, ktorý ukazuje, ako môžete vytvoriť bezpečný formulár v Django.
od django importovať formulárov
od django.utils.html importovať uniknúťtriedaSecureForm(formuláre. formulár):
meno = formy. CharField (max_length=100)
email = formuláre. EmailField()defčistý_názov(ja):
name = self.cleaned_data['názov']# Dezinfikujte vstup používateľa
sanitized_name = escape (name)
vrátiť sanitizovaný_názovdefčistý_e-mail(ja):
email = self.cleaned_data['e-mail']# Overte a dezinfikujte vstup používateľa
aknie email.endswith('@example.com'):
zvýšiť formulárov. ValidationError("Neplatná e-mailová doména")
sanitized_email = escape (e-mail)
vrátiť dezinfikovaný_e-mail
The čistý_názov a čistý_e-mail metódy overujú a dezinfikujú vstup používateľa. The čistý_názov metóda využíva uniknúť funkcia na dezinfekciu vstupu názvu a zabránenie potenciálne útoky XSS.
The čistý_e-mail overí formát e-mailu a obmedzí e-mailovú doménu na example.com. Zvyšuje a ValidationError ak e-mail nespĺňa zadané kritériá. Táto akcia zvyšuje bezpečnosť vašich formulárov a chráni ich pred bežnými zraniteľnosťami.
Dôležité je pochopiť slabé miesta webových aplikácií
Pochopenie zraniteľností webových aplikácií vám pomôže zabezpečiť vašu aplikáciu. Urobí to tak, že vám pomôže identifikovať a riešiť potenciálne slabé miesta v aplikácii. To následne výrazne zníži pravdepodobnosť úspešných útokov.