Django ima odlične varnostne funkcije, vendar je bistveno, da jih razumete in kaj počnejo, da so vaše aplikacije resnično varne.
Django zagotavlja varno podlago za izdelavo spletnih aplikacij. Toda zanašanje na Djangove privzete varnostne funkcije ni dovolj. Za vas je ključnega pomena, da uvedete dodatne ukrepe za okrepitev varnosti svojih aplikacij.
Z uvedbo dodatnih ukrepov lahko ublažite morebitne ranljivosti, zaščitite občutljive podatke in zaščitite svojo aplikacijo pred kibernetskimi grožnjami. To zagotavlja zaščito podatkov vaših uporabnikov in pomaga ohranjati ugled in zanesljivost vaše organizacije.
Zavarovanje pogledov z dekoraterji
Pogledi v Djangu obravnavajo dohodne zahteve. Imajo ključno vlogo pri določanju odziva, ki ga stranka dobi. Varovanje pogledov nadzoruje dostop in ščiti občutljive funkcije. Django ponuja dekoratorje, ki jih lahko uporabite za poglede, da uveljavite posebne varnostne ukrepe.
@login_required dekorater
The @prijava_potrebna dekorater zagotavlja, da lahko samo overjeni uporabniki dostopajo do določenega pogleda. Ko nepreverjeni uporabnik poskuša dostopati do pogleda, ga aplikacija preusmeri na stran za prijavo.
od django.contrib.auth.decorators uvoz prijava_potrebna
od django.http uvoz HttpResponse
@prijava_potrebna
defvaren_pogled(prošnja):
# Vaša logika pogleda tukaj
vrnitev HttpResponse("To je varen pogled")
Uporaba @prijava_potrebna dekoratorja v funkcijo secure_view samodejno zagotovi, da je uporabnik overjen pred izvedbo logike pogleda.
Okraševalci po meri
Django vam omogoča ustvarjanje okraskov po meri. To vam omogoča izvajanje dodatnih varnostnih pregledov ali omejitev. Na primer, morda želite ustvariti dekorater, ki omejuje dostop do določenih uporabniških vlog.
od functools uvoz obloge
od django.http uvoz HttpResponsedefsamo_admin(view_func):
@wraps (view_func)
defovoj(zahteva, *args, **kwargs):
če request.user.is_superuporabnik:
vrnitev view_func (zahteva, *args, **kwargs)
drugače:
vrnitev HttpResponse("Dostop zavrnjen")
vrnitev ovoj
The samo_admin dekorater preveri, ali je uporabnik, ki dostopa do pogleda, superuporabnik. Če so, se funkcija pogleda zažene, sicer onemogoči dostop uporabnika.
Preverjanje pristnosti in avtorizacija uporabnika
Preverjanje pristnosti in avtorizacija uporabnikov sta ključni komponenti zaščite aplikacij Django. Zagotavljajo, da prava oseba dostopa do določenih funkcij aplikacije.
Preverjanje pristnosti uporabnika
Preverjanje pristnosti uporabnika preveri identiteto osebe, ki dostopa do vaše aplikacije. Djangov sistem za preverjanje pristnosti zagotavlja funkcionalnost za obravnavo tega.
od django.contrib.auth uvoz overiti, prijaviti se
od django.http uvoz HttpResponsedeflogin_view(prošnja):
če request.method == 'POST':
uporabniško ime = zahteva. OBJAVA['uporabniško ime']
geslo = zahteva. OBJAVA['geslo']
uporabnik = avtentikacija (zahteva, uporabniško ime=uporabniško ime, geslo=geslo)
če uporabnik jeneNoben:
prijava (zahteva, uporabnik)
vrnitev HttpResponse("Prijava uspešna")
drugače:
vrnitev HttpResponse("Neveljavne poverilnice")
drugače:
# Upodabljanje obrazca za prijavo
vrnitev HttpResponse("obrazec za prijavo")
The login_view funkcija obravnava postopek prijave. Ko uporabnik odda svoje poverilnice, jih funkcija za preverjanje pristnosti preveri. Če so poverilnice veljavne, funkcija za prijavo ustvari sejo za uporabnika in mu omogoči dostop do omejenih področij aplikacije. Če so poverilnice napačne, koda ne ustvari seje.
Pooblastilo uporabnika
Pooblastilo uporabnika določa, katera dejanja lahko uporabnik izvaja znotraj aplikacije. Django ponuja prilagodljiv sistem dovoljenj, ki vam omogoča nadzor nad uporabniškim dostopom.
od django.contrib.auth.decorators uvoz dovoljenje_potrebno
od django.http uvoz HttpResponse
@permission_required('polls.can_vote')
defglasovati(prošnja):
# Glasovalna logika tukaj
vrnitev HttpResponse("Glasovanje zabeleženo")
V zgornjem primeru je @permission_required dekorater zagotavlja, da samo uporabniki z polls.can_vote dovoljenje lahko dostopa do pogleda glasovanja. Če uporabnik brez potrebnega dovoljenja poskuša dostopati do pogleda, mu je dostop zavrnjen.
Implementacija vmesne programske opreme po meri
Vmesna programska oprema sedi med spletnim strežnikom in pogledom. Implementacija vmesne programske opreme po meri doda dodatne varnostne preglede ali spremeni zahteve in odgovore. To je lahko zaradi razlogov, kot je uveljavljanje HTTPS.
od django.http uvoz HttpResponsePermanentRedirect
razredEnforceHttpsMiddleware:
def__v__(sebe, get_response):
self.get_response = get_responsedef__klic__(sam, zahteva):
čene request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
vrnitev HttpResponsePermanentRedirect (secure_url)
vrnitev self.get_response (zahteva)
Zgornja vmesna programska oprema preveri, ali zahteva uporablja je_varno metoda. Če ne, se preusmeri na HTTPS različica URL-ja.
Varno ravnanje z datotekami
Ravnanje z datotekami je običajna funkcija spletnih aplikacij. Predstavlja varnostno tveganje, če ni ustrezno zavarovano. Pri obdelavi datotek, ki jih naložijo uporabniki, je pomembno preveriti vsebino datoteke. To preprečuje zlonamerno nalaganje. Vrste datotek lahko preverite z uporabo Djangovega FileExtensionValidatorja.
od django.core.validators uvoz FileExtensionValidator
od django.forms uvoz obrazci
razredFileUploadForm(obrazci. Oblika):
datoteka = obrazci. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
V zgornjem bloku kode je FileUploadForm razred uporablja FileExtensionValidator da dovolite samo nalaganje datotek PDF in DOCX. Aplikacija bo med nalaganjem zavrnila vse druge oblike datotek. Prilagodite dovoljene razširitve glede na zahteve vaše aplikacije.
Zaščita CSRF
Napade s ponarejanjem zahtev na različnih mestih (CSRF) lahko preprečite z Djangovo vgrajeno zaščito CSRF. V predlogo morate vključiti a žeton CSRF ki bo potrjeno na strani strežnika.
Ko uporabljate % csrf_token % predlogo, Django ustvari skrito vnosno polje z žetonom CSRF. Ta žeton je edinstven za vsako uporabniško sejo. Pomaga preveriti pristnost predloženega obrazca.
Strežniška stran preveri žeton CSRF pri obdelavi oddaje obrazca. Če žeton manjka ali je neveljaven, Django sproži napako Prepovedano (HTTP 403). Bistveno je zagotoviti, da je vaša aplikacija varna pred to vrsto varnostne ranljivosti.
Pisanje varnih obrazcev
Pri ustvarjanju obrazcev je pomembno, da varno ravnate z vnosom uporabnikov. To je namenjeno preprečevanju pogostih ranljivosti, kot so vbrizgavanje SQL in napadi XSS. Spodaj je primer, ki prikazuje, kako lahko ustvarite varen obrazec v Djangu.
od django uvoz obrazci
od django.utils.html uvoz pobegnitirazredSecureForm(obrazci. Oblika):
ime = obrazci. CharField (max_length=100)
e-pošta = obrazci. EmailField()defčisto_ime(sebe):
ime = self.cleaned_data['ime']# Prečisti uporabniški vnos
sanitized_name = escape (ime)
vrnitev sanirano_imedefclean_email(sebe):
email = self.cleaned_data['E-naslov']# Preveri in očisti uporabniški vnos
čene email.endswith('@example.com'):
dvigniti obrazci. ValidationError("Neveljavna e-poštna domena")
sanitized_email = pobeg (e-pošta)
vrnitev sanitized_email
The čisto_ime in clean_email metode potrdijo in očistijo uporabniški vnos. The čisto_ime metoda uporablja pobegniti funkcijo za čiščenje vnosa imena in preprečevanje morebitne napade XSS.
The clean_email metoda potrdi obliko e-pošte in omeji e-poštno domeno na example.com. Vzbuja a ValidationError če e-poštno sporočilo ne ustreza navedenim kriterijem. To dejanje poveča varnost vaših obrazcev in jih zaščiti pred pogostimi ranljivostmi.
Razumevanje ranljivosti spletnih aplikacij je pomembno
Razumevanje ranljivosti spletnih aplikacij vam bo pomagalo zaščititi vašo aplikacijo. To bo storil tako, da vam bo pomagal prepoznati in obravnavati potencialne šibke točke v aplikaciji. To bo znatno zmanjšalo verjetnost uspešnih napadov.