Django are funcții de securitate excelente, dar este vital să le înțelegeți și ce fac ele, pentru ca aplicațiile dvs. să fie cu adevărat sigure.

Django oferă o bază sigură pentru construirea de aplicații web. Dar să te bazezi pe caracteristicile de securitate implicite ale Django nu este suficient. Este esențial pentru dvs. să implementați măsuri suplimentare pentru a consolida securitatea aplicațiilor dvs.

Prin implementarea unor măsuri suplimentare, puteți atenua potențialele vulnerabilități, puteți proteja datele sensibile și vă puteți proteja aplicația de amenințările cibernetice. Acest lucru asigură protecția informațiilor utilizatorilor dvs. și vă ajută să mențineți reputația și încrederea organizației dvs.

Asigurarea vederilor cu decoratorii

Vizualizările din Django gestionează solicitările primite. Ele joacă un rol vital în determinarea răspunsului pe care îl primește clientul. Securizarea vizualizărilor controlează accesul și protejează funcționalitățile sensibile. Django oferă decoratori pe care îi puteți aplica vizualizărilor pentru a aplica măsuri de securitate specifice.

instagram viewer

@login_required Decorator

The @login_required decorator se asigură că numai utilizatorii autentificați pot accesa o anumită vizualizare. Când un utilizator neautentificat încearcă să acceseze vizualizarea, aplicația îl redirecționează către pagina de conectare.

din django.contrib.auth.decorators import login_required
din django.http import HttpResponse

@login_required
defsecure_view(cerere):
# Vedeți logica dvs. aici
întoarcere HttpResponse(„Aceasta este o vedere sigură”)

Aplicarea @login_required decorator la funcția secure_view se asigură automat că utilizatorul este autentificat înainte de a executa logica vizualizării.

Decoratori la comandă

Django vă permite să creați decoratori personalizați. Acest lucru vă permite să implementați verificări sau restricții de securitate suplimentare. De exemplu, este posibil să doriți să creați un decorator care restricționează accesul la anumite roluri de utilizator.

din functools import împachetări
din django.http import HttpResponse

defadmin_only(view_func):
@wraps (view_func)
defînvelitoare(cerere, *args, **kwargs):
dacă request.user.is_superuser:
întoarcere view_func (cerere, *args, **kwargs)
altfel:
întoarcere HttpResponse("Acces interzis")

întoarcere învelitoare

The admin_only decoratorul verifică dacă utilizatorul care accesează vizualizarea este un superutilizator. Dacă sunt, funcția de vizualizare rulează, în caz contrar, interzice accesul utilizatorului.

Autentificarea și autorizarea utilizatorului

Autentificarea și autorizarea utilizatorilor sunt componente esențiale pentru securizarea aplicațiilor Django. Acestea asigură că persoana potrivită accesează funcționalitățile specifice ale aplicației.

Autentificarea utilizatorului

Autentificarea utilizatorului verifică identitatea persoanei care accesează aplicația dvs. Sistemul de autentificare Django oferă funcționalitate pentru gestionarea acestui lucru.

din django.contrib.auth import autentificare, autentificare
din django.http import HttpResponse

deflogin_view(cerere):
dacă cerere.metodă == 'POST':
username = cerere. POST['nume de utilizator']
parola = cerere. POST['parola']
utilizator = autentificare (cerere, nume de utilizator = nume de utilizator, parolă = parolă)

dacă utilizator estenuNici unul:
autentificare (cerere, utilizator)
întoarcere HttpResponse("Autentificare reușită")
altfel:
întoarcere HttpResponse(„Acreditări nevalide”)
altfel:
# Redați formularul de conectare
întoarcere HttpResponse(„Formular de autentificare”)

The login_view funcția se ocupă de procesul de conectare. Când un utilizator își trimite acreditările, funcția de autentificare le verifică. Dacă acreditările sunt valide, funcția de autentificare creează o sesiune pentru utilizator, permițându-i acestuia să acceseze zone restricționate ale aplicației. Dacă acreditările sunt greșite, codul nu creează o sesiune.

Autorizarea utilizatorului

Autorizarea utilizatorului determină ce acțiuni poate efectua un utilizator în cadrul aplicației. Django oferă un sistem flexibil de permisiuni care vă oferă control asupra accesului utilizatorilor.

din django.contrib.auth.decorators import permission_required
din django.http import HttpResponse

@permission_required('polls.can_vote')
defvot(cerere):
# Logica de vot aici
întoarcere HttpResponse(„Vot înregistrat”)

În exemplul de mai sus, @permission_required decoratorul se asigură că numai utilizatorii cu sondaje.poate_vota permisiunea poate accesa vizualizarea votului. Dacă un utilizator fără permisiunea necesară încearcă să acceseze vizualizarea, i se refuză accesul.

Implementarea Middleware personalizat

Middleware-ul se află între serverul web și vizualizare. Implementarea middleware personalizat adaugă verificări de securitate suplimentare sau modifică cererile și răspunsurile. Acest lucru poate fi din motive precum aplicarea HTTPS.

din django.http import HttpResponsePermanentRedirect

clasăEnforceHttpsMiddleware:
def__init__(self, get_response):
self.get_response = obține_răspuns

def__apel__(auto, cerere):
dacănu request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
întoarcere HttpResponsePermanentRedirect (url_securizat)

întoarcere self.get_response (cerere)

Middleware-ul de mai sus verifică dacă cererea utilizează este_securizat metodă. Dacă nu, redirecționează către Versiunea HTTPS a adresei URL.

Securizarea gestionării fișierelor

Gestionarea fișierelor este o caracteristică comună în aplicațiile web. Prezintă riscuri de securitate dacă nu este securizat corespunzător. Când manipulați fișierele încărcate de utilizator, este important să validați conținutul fișierului. Acest lucru previne încărcările rău intenționate. Puteți valida tipurile de fișiere folosind FileExtensionValidator de la Django.

din django.core.validators import FileExtensionValidator
din django.forme import forme

clasăFileUploadForm(forme. Formă):
dosar = formulare. FileField (validators=[FileExtensionValidator (allowed_extensions=[„pdf”, „docx”])])

În blocul de cod de mai sus, FileUploadForm clasa foloseste FileExtensionValidator pentru a permite doar încărcarea fișierelor PDF și DOCX. Aplicația va respinge orice alte formate de fișier în timpul încărcării. Personalizați extensiile permise în funcție de cerințele aplicației dvs.

Protecție CSRF

Puteți preveni atacurile Cross-Site Request Forgery (CSRF) folosind protecția CSRF încorporată a Django. Ar trebui să includeți în șablonul dvs. a Token CSRF care se va valida pe partea serverului.

"post" actiune="/submit-form/">
{% csrf_token %}
Câmpuri formular


Când utilizați % csrf_token % etichetă șablon, Django generează un câmp de intrare ascuns cu simbolul CSRF. Acest simbol este unic pentru fiecare sesiune de utilizator. Ajută la validarea autenticității formularului trimis.

Partea serverului verifică simbolul CSRF atunci când procesează trimiterea formularului. Dacă simbolul lipsește sau este invalid, Django generează o eroare Interzis (HTTP 403). Este esențial să vă asigurați că aplicația dvs. este protejată de acest tip de vulnerabilitate de securitate.

Scrierea formularelor sigure

Când creați formulare, este important să gestionați în siguranță introducerea utilizatorului. Acest lucru este pentru a preveni vulnerabilitățile comune precum injecția SQL și atacurile XSS. Mai jos este un exemplu care arată cum puteți crea un formular securizat în Django.

din django import forme
din django.utils.html import evadare

clasăSecureForm(forme. Formă):
nume = forme. CharField (lungime_max =100)
email = formulare. EmailField()

defnume_curat(de sine):
nume = self.cleaned_data['Nume']

# Dezinfectează intrarea utilizatorului
sanitized_name = evadare (nume)
întoarcere nume_dezinfectat

defclean_email(de sine):
email = self.cleaned_data['e-mail']

# Validați și igienizați intrarea utilizatorului
dacănu email.endswith(„@example.com”):
a ridica forme. Eroare de validatie(„Domeniu de e-mail nevalid”)

sanitized_email = escape (e-mail)
întoarcere e-mail_igienizat

The nume_curat și clean_email metodele validează și igienizează intrarea utilizatorului. The nume_curat metoda foloseste evadare funcția de dezinfectare a introducerii numelui și de prevenire potențiale atacuri XSS.

The clean_email metoda validează formatul de e-mail și restricționează domeniul de e-mail la exemplu.com. Se ridică a Eroare de validatie dacă e-mailul nu îndeplinește criteriile specificate. Această acțiune sporește securitatea formularelor și le protejează împotriva vulnerabilităților comune.

Înțelegerea vulnerabilităților aplicațiilor web este importantă

Înțelegerea vulnerabilităților aplicațiilor web vă va ajuta să vă securizați aplicația. Acesta va face acest lucru ajutându-vă să identificați și să abordați potențialele puncte slabe ale aplicației. Acest lucru va reduce, la rândul său, semnificativ probabilitatea unor atacuri de succes.