Django har fremragende sikkerhedsfunktioner, men det er vigtigt, at du forstår dem, og hvad de gør, for at dine apps virkelig er sikre.

Django giver et sikkert grundlag for opbygning af webapplikationer. Men det er ikke nok at stole på Djangos standardsikkerhedsfunktioner. Det er afgørende for dig at implementere yderligere foranstaltninger for at styrke sikkerheden af ​​dine applikationer.

Ved at implementere yderligere foranstaltninger kan du afbøde potentielle sårbarheder, beskytte følsomme data og beskytte din applikation mod cybertrusler. Dette sikrer beskyttelsen af ​​dine brugeres oplysninger og hjælper med at bevare din organisations omdømme og troværdighed.

Sikring af udsigt med dekoratører

Visninger i Django håndterer indgående anmodninger. De spiller en afgørende rolle i at bestemme, hvilken respons klienten får. Sikring af visninger styrer adgangen og beskytter følsomme funktioner. Django tilbyder dekoratører, som du kan anvende til visninger for at håndhæve specifikke sikkerhedsforanstaltninger.

instagram viewer

@login_required Dekoratør

Det @login_required decorator sikrer, at kun godkendte brugere kan få adgang til en bestemt visning. Når en uautoriseret bruger forsøger at få adgang til visningen, omdirigerer applikationen dem til login-siden.

fra django.contrib.auth.decorators importere login_required
fra django.http importere HttpResponse

@login_required
defsikker_visning(anmodning):
# Din visningslogik her
Vend tilbage HttpResponse("Dette er en sikker udsigt")

Anvendelse af @login_required decorator til secure_view-funktionen sikrer automatisk, at brugeren er autentificeret, før visningens logik udføres.

Brugerdefinerede dekoratører

Django giver dig mulighed for at skabe brugerdefinerede dekoratører. Dette giver dig mulighed for at implementere yderligere sikkerhedstjek eller begrænsninger. For eksempel vil du måske oprette en dekoratør, der begrænser adgangen til specifikke brugerroller.

fra funktionsværktøjer importere wraps
fra django.http importere HttpResponse

defkun admin(view_func):
@ombrydning (view_func)
defindpakning(anmodning, *args, **kwargs):
hvis request.user.is_superuser:
Vend tilbage view_func (anmodning, *args, **kwargs)
andet:
Vend tilbage HttpResponse("Adgang nægtet")

Vend tilbage indpakning

Det kun admin dekorator kontrollerer, om brugeren, der får adgang til visningen, er en superbruger. Hvis de er, kører visningsfunktionen, ellers nægter den brugeren adgang.

Brugergodkendelse og autorisation

Brugergodkendelse og -autorisation er kritiske komponenter til sikring af Django-applikationer. De sikrer, at den rigtige person har adgang til specifikke funktioner i applikationen.

Brugergodkendelse

Brugergodkendelse bekræfter identiteten på den person, der får adgang til din applikation. Djangos autentificeringssystem giver funktionalitet til at håndtere dette.

fra django.contrib.auth importere autentificere, logge ind
fra django.http importere HttpResponse

deflogin_view(anmodning):
hvis request.method == 'STOLPE':
brugernavn = anmodning. STOLPE['brugernavn']
password = anmodning. STOLPE['adgangskode']
bruger = godkend (anmodning, brugernavn=brugernavn, adgangskode=adgangskode)

hvis bruger erikkeIngen:
login (anmodning, bruger)
Vend tilbage HttpResponse("Login lykkedes")
andet:
Vend tilbage HttpResponse("Ugyldige legitimationsoplysninger")
andet:
# Gengiv loginformular
Vend tilbage HttpResponse("Login formular")

Det login_view funktion håndterer login processen. Når en bruger indsender deres legitimationsoplysninger, bekræfter godkendelsesfunktionen dem. Hvis legitimationsoplysningerne er gyldige, opretter login-funktionen en session for brugeren, der giver dem adgang til begrænsede områder af applikationen. Hvis legitimationsoplysningerne er forkerte, opretter koden ikke en session.

Brugerautorisation

Brugerautorisation bestemmer, hvilke handlinger en bruger kan udføre i applikationen. Django leverer et fleksibelt tilladelsessystem, der giver dig kontrol over brugeradgang.

fra django.contrib.auth.decorators importere permission_required
fra django.http importere HttpResponse

@permission_required('polls.can_vote')
defstemme(anmodning):
# Afstemningslogik her
Vend tilbage HttpResponse("Stemme optaget")

I ovenstående eksempel er @permission_required dekoratør sikrer, at kun brugere med polls.can_vote tilladelse kan få adgang til stemmevisningen. Hvis en bruger uden den nødvendige tilladelse forsøger at få adgang til visningen, nægtes vedkommende adgang.

Implementering af Custom Middleware

Middleware sidder mellem webserveren og visningen. Implementering af tilpasset middleware tilføjer yderligere sikkerhedstjek eller ændrer anmodninger og svar. Dette kan være af årsager som at håndhæve HTTPS.

fra django.http importere HttpResponsePermanentRedirect

klasseEnforceHttpsMiddleware:
def__i det__(selv, få_svar):
self.get_response = get_response

def__opkald__(selv, anmodning):
hvisikke request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
sikker_url = url.erstat(' http://', ' https://')
Vend tilbage HttpResponsePermanentRedirect (secure_url)

Vend tilbage self.get_response (anmodning)

Ovenstående middleware kontrollerer, om anmodningen bruger er_sikker metode. Hvis ikke, omdirigeres den til HTTPS-version af URL'en.

Sikring af filhåndtering

Filhåndtering er en almindelig funktion i webapplikationer. Det udgør sikkerhedsrisici, hvis det ikke er ordentligt sikret. Når du håndterer brugeruploadede filer, er det vigtigt at validere filindholdet. Dette forhindrer ondsindede uploads. Du kan validere filtyperne ved hjælp af Django's FileExtensionValidator.

fra django.core.validators importere FileExtensionValidator
fra django.forms importere formularer

klasseFileUploadForm(former. Form):
fil = formularer. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])

I ovenstående kodeblok er FileUploadForm klasse bruger FileExtensionValidator kun at tillade upload af PDF- og DOCX-filer. Applikationen vil afvise alle andre filformater under upload. Tilpas de tilladte udvidelser i henhold til din applikations krav.

CSRF beskyttelse

Du kan forhindre Cross-Site Request Forgery (CSRF)-angreb ved at bruge Djangos indbyggede CSRF-beskyttelse. Du bør inkludere en i din skabelon CSRF token som vil validere på serversiden.

"stolpe" handling="/indsend-formular/">
{% csrf_token %}
Formularfelter


Når du bruger % csrf_token % skabelontag, genererer Django et skjult inputfelt med CSRF-tokenet. Dette token er unikt for hver brugersession. Det hjælper med at validere ægtheden af ​​den indsendte formular.

Serversiden kontrollerer CSRF-tokenet, når formularindsendelsen behandles. Hvis tokenet mangler eller er ugyldigt, rejser Django en Forbidden (HTTP 403) fejl. Det er vigtigt at sikre, at din applikation er sikker mod denne type sikkerhedssårbarhed.

Skrivning af sikre formularer

Når du opretter formularer, er det vigtigt at håndtere brugerinput sikkert. Dette er for at forhindre almindelige sårbarheder som SQL-injektion og XSS-angreb. Nedenfor er et eksempel, der viser, hvordan du kan oprette en sikker formular i Django.

fra django importere formularer
fra django.utils.html importere flugt

klasseSecureForm(former. Form):
navn = former. CharField (max_length=100)
email = formularer. EmailField()

defrent_navn(selv):
navn = self.cleaned_data['navn']

# Rengør brugerinput
sanitized_name = escape (navn)
Vend tilbage sanitized_name

defren_e-mail(selv):
email = self.cleaned_data['e-mail']

# Validere og rense brugerinput
hvisikke email.endswith('@eksempel.com'):
hæve formularer. Valideringsfejl("Ugyldigt e-mail-domæne")

sanitized_email = escape (e-mail)
Vend tilbage sanitized_e-mail

Det rent_navn og ren_e-mail metoder validerer og renser brugerinput. Det rent_navn metoden bruger flugt funktion til at rense navneindtastningen og forhindre potentielle XSS-angreb.

Det ren_e-mail metode validerer e-mail-formatet og begrænser e-mail-domænet til eksempel.com. Det rejser en Valideringsfejl hvis e-mailen ikke opfylder de angivne kriterier. Denne handling forbedrer sikkerheden af ​​dine formularer og beskytter dem mod almindelige sårbarheder.

Det er vigtigt at forstå webapplikationssårbarheder

At forstå webapplikationssårbarheder vil hjælpe dig med at sikre din applikation. Det vil gøre det ved at hjælpe dig med at identificere og adressere potentielle svage punkter i applikationen. Dette vil igen reducere sandsynligheden for vellykkede angreb markant.