Django ima izvrsne sigurnosne značajke, ali ključno je da ih razumijete i što rade kako bi vaše aplikacije bile uistinu sigurne.

Django pruža siguran temelj za izgradnju web aplikacija. Ali oslanjanje na zadane sigurnosne značajke Djanga nije dovoljno. Za vas je ključno implementirati dodatne mjere za jačanje sigurnosti vaših aplikacija.

Provođenjem dodatnih mjera možete ublažiti potencijalne ranjivosti, zaštititi osjetljive podatke i zaštititi svoju aplikaciju od kibernetičkih prijetnji. To osigurava zaštitu podataka vaših korisnika i pomaže u održavanju ugleda i pouzdanosti vaše organizacije.

Osiguravanje pogleda s dekoraterima

Pogledi u Djangu obrađuju dolazne zahtjeve. Oni igraju ključnu ulogu u određivanju odgovora koji klijent dobiva. Osiguravanje pogleda kontrolira pristup i štiti osjetljive funkcije. Django nudi dekoratore koje možete primijeniti na poglede kako biste proveli određene sigurnosne mjere.

@login_required dekorater

The @potrebna_prijava dekorater osigurava da samo autentificirani korisnici mogu pristupiti određenom prikazu. Kada neautorizirani korisnik pokuša pristupiti prikazu, aplikacija ga preusmjerava na stranicu za prijavu.

iz django.contrib.auth.decorators uvoz prijava_potrebna
iz django.http uvoz HttpResponse

@potrebna_prijava
defsiguran_prikaz(zahtjev):
# Vaša logika pogleda ovdje
povratak HttpResponse("Ovo je siguran pogled")

Primjenom @potrebna_prijava dekorater u funkciju secure_view automatski osigurava autentifikaciju korisnika prije izvršavanja logike pogleda.

Dekorateri po narudžbi

Django vam omogućuje stvaranje prilagođenih dekoratora. To vam omogućuje implementaciju dodatnih sigurnosnih provjera ili ograničenja. Na primjer, možda želite stvoriti dekorater koji ograničava pristup određenim korisničkim ulogama.

iz functools uvoz oblozi
iz django.http uvoz HttpResponse

defsamo_admin(view_func):
@wraps (view_func)
defomot(zahtjev, *args, **kwargs):
ako request.user.is_superuser:
povratak view_func (zahtjev, *args, **kwargs)
drugo:
povratak HttpResponse("Pristup odbijen")

povratak omot

The samo_admin dekorater provjerava je li korisnik koji pristupa pogledu superkorisnik. Ako jesu, funkcija pregleda se pokreće, u suprotnom uskraćuje pristup korisniku.

Autentifikacija i autorizacija korisnika

Autentikacija i autorizacija korisnika kritične su komponente osiguranja Django aplikacija. Oni osiguravaju da prava osoba pristupa određenim funkcijama aplikacije.

Autentifikacija korisnika

Autentifikacija korisnika provjerava identitet osobe koja pristupa vašoj aplikaciji. Djangov sustav provjere autentičnosti pruža funkcionalnost za rukovanje ovime.

iz django.contrib.auth uvoz ovjeriti se, prijaviti se
iz django.http uvoz HttpResponse

deflogin_view(zahtjev):
ako zahtjev.metoda == 'POST':
korisničko ime = zahtjev. POST['Korisničko ime']
lozinka = zahtjev. POST['lozinka']
korisnik = autentifikacija (zahtjev, korisničko ime=korisničko ime, lozinka=lozinka)

ako korisnik jeneNijedan:
prijava (zahtjev, korisnik)
povratak HttpResponse("Uspješna prijava")
drugo:
povratak HttpResponse("Nevažeće vjerodajnice")
drugo:
# Prikaz obrasca za prijavu
povratak HttpResponse("Obrazac za prijavu")

The login_view funkcija upravlja postupkom prijave. Kada korisnik pošalje svoje vjerodajnice, funkcija autentifikacije ih provjerava. Ako su vjerodajnice važeće, funkcija prijave stvara sesiju za korisnika, dopuštajući mu pristup ograničenim područjima aplikacije. Ako su vjerodajnice pogrešne, kod ne stvara sesiju.

Autorizacija korisnika

Autorizacija korisnika određuje koje radnje korisnik može izvesti unutar aplikacije. Django nudi fleksibilan sustav dopuštenja koji vam daje kontrolu nad pristupom korisnika.

iz django.contrib.auth.decorators uvoz dozvola_potrebna
iz django.http uvoz HttpResponse

@permission_required('polls.can_vote')
defglasanje(zahtjev):
# Logika glasanja ovdje
povratak HttpResponse("Glasanje zabilježeno")

U gornjem primjeru, @potrebna_dozvola dekorater osigurava da samo korisnici s ankete.može_glasati dopuštenje može pristupiti prikazu glasovanja. Ako korisnik bez potrebne dozvole pokuša pristupiti prikazu, pristup mu se uskraćuje.

Implementacija Custom Middlewarea

Middleware se nalazi između web poslužitelja i pogleda. Implementacija prilagođenog međuprograma dodaje dodatne sigurnosne provjere ili modificira zahtjeve i odgovore. To može biti iz razloga poput nametanja HTTPS-a.

iz django.http uvoz HttpResponsePermanentRedirect

razredaEnforceHttpsMiddleware:
def__u tome__(sebe, get_response):
self.get_response = dobiti_odgovor

def__poziv__(sebe, zahtjev):
akone request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
sigurni_url = url.zamijeni(' http://', ' https://')
povratak HttpResponsePermanentRedirect (secure_url)

povratak self.get_response (zahtjev)

Gornji međuprogram provjerava koristi li zahtjev je_siguran metoda. Ako nije, preusmjerava na HTTPS verzija URL-a.

Osiguranje rukovanja datotekama

Rukovanje datotekama uobičajena je značajka u web aplikacijama. Predstavlja sigurnosne rizike ako nije ispravno osiguran. Prilikom rukovanja datotekama koje su učitali korisnici, važno je potvrditi sadržaj datoteke. Ovo sprječava zlonamjerno učitavanje. Vrste datoteka možete provjeriti koristeći Djangov FileExtensionValidator.

iz django.core.validators uvoz FileExtensionValidator
iz django.forme uvoz oblicima

razredaFileUploadForm(obrasci. Oblik):
datoteka = obrasci. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])

U gornjem bloku koda, FileUploadForm klasa koristi FileExtensionValidator kako biste dopustili samo učitavanje PDF i DOCX datoteka. Aplikacija će odbiti sve druge formate datoteka tijekom učitavanja. Prilagodite dopuštena proširenja prema zahtjevima vaše aplikacije.

CSRF zaštita

Možete spriječiti Cross-Site Request Forgery (CSRF) napade koristeći Djangovu ugrađenu CSRF zaštitu. U svoj predložak trebali biste uključiti a CSRF token koji će se potvrditi na strani poslužitelja.

"post" akcija="/submit-form/">
{% csrf_token %}
Polja obrazaca


Kada koristite % csrf_token % oznaku predloška, ​​Django generira skriveno polje za unos s CSRF tokenom. Ovaj je token jedinstven za svaku korisničku sesiju. Pomaže potvrditi autentičnost poslanog obrasca.

Poslužiteljska strana provjerava CSRF token prilikom obrade slanja obrasca. Ako token nedostaje ili je nevažeći, Django javlja pogrešku Zabranjeno (HTTP 403). Bitno je osigurati da je vaša aplikacija sigurna od ove vrste sigurnosne ranjivosti.

Pisanje sigurnih obrazaca

Prilikom izrade obrazaca važno je sigurno rukovati korisničkim unosom. Time se sprječavaju uobičajene ranjivosti poput SQL injection i XSS napada. Ispod je primjer koji pokazuje kako možete stvoriti siguran obrazac u Djangu.

iz django uvoz oblicima
iz django.utils.html uvoz pobjeći

razredaSecureForm(obrasci. Oblik):
naziv = oblici. CharField (max_length=100)
email = obrasci. EmailField()

defčisto_ime(sebe):
naziv = samoočišćeni_podaci['Ime']

# Dezinficirajte korisnički unos
sanitized_name = bijeg (ime)
povratak sanirano_ime

defčista_e-pošta(sebe):
email = self.cleaned_data['e-mail']

# Provjera i dezinfekcija korisničkog unosa
akone email.endswith('@example.com'):
podići oblicima. ValidationError("Nevažeća domena e-pošte")

sanitized_email = bijeg (e-pošta)
povratak sanirana_e-pošta

The čisto_ime i čista_e-pošta metode potvrđuju i dezinficiraju korisnički unos. The čisto_ime metoda koristi pobjeći funkcija za dezinfekciju unosa imena i sprječavanje potencijalni XSS napadi.

The čista_e-pošta metoda potvrđuje format e-pošte i ograničava domenu e-pošte na primjer.com. Podiže a ValidationError ako email ne zadovoljava navedene kriterije. Ova radnja povećava sigurnost vaših obrazaca i štiti ih od uobičajenih ranjivosti.

Razumijevanje ranjivosti web aplikacija je važno

Razumijevanje ranjivosti web aplikacije pomoći će vam da zaštitite svoju aplikaciju. To će učiniti tako što će vam pomoći identificirati i riješiti potencijalne slabe točke u aplikaciji. To će zauzvrat značajno smanjiti vjerojatnost uspješnih napada.