Django har utmerkede sikkerhetsfunksjoner, men det er viktig at du forstår dem, og hva de gjør, for at appene dine skal være virkelig sikre.

Django gir et sikkert grunnlag for å bygge webapplikasjoner. Men å stole på Djangos standard sikkerhetsfunksjoner er ikke nok. Det er avgjørende for deg å implementere ytterligere tiltak for å styrke sikkerheten til applikasjonene dine.

Ved å implementere ytterligere tiltak kan du redusere potensielle sårbarheter, beskytte sensitive data og beskytte applikasjonen din mot cybertrusler. Dette sikrer beskyttelse av brukernes informasjon og bidrar til å opprettholde organisasjonens omdømme og pålitelighet.

Sikre utsikten med dekoratører

Visninger i Django håndterer innkommende forespørsler. De spiller en viktig rolle i å bestemme responsen kunden får. Sikring av visninger kontrollerer tilgang og beskytter sensitive funksjoner. Django tilbyr dekoratører som du kan bruke på visninger for å håndheve spesifikke sikkerhetstiltak.

@login_required Dekorator

De @innlogging kreves

instagram viewer
decorator sikrer at bare autentiserte brukere kan få tilgang til en bestemt visning. Når en uautentisert bruker prøver å få tilgang til visningen, omdirigerer applikasjonen dem til påloggingssiden.

fra django.contrib.auth.decorators import innlogging kreves
fra django.http import HttpResponse

@innlogging kreves
defsikker_visning(be om):
# Visningslogikken din her
komme tilbake HttpResponse("Dette er en sikker utsikt")

Bruk av @innlogging kreves decorator til secure_view-funksjonen sikrer automatisk at brukeren er autentisert før visningens logikk utføres.

Skreddersydde dekoratører

Django lar deg lage skreddersydde dekoratører. Dette lar deg implementere ytterligere sikkerhetskontroller eller restriksjoner. Det kan for eksempel være lurt å lage en dekoratør som begrenser tilgangen til bestemte brukerroller.

fra funksjonsverktøy import wraps
fra django.http import HttpResponse

defadmin_only(view_func):
@omslag (view_func)
definnpakning(forespørsel, *args, **kwargs):
hvis request.user.is_superuser:
komme tilbake view_func (forespørsel, *args, **kwargs)
ellers:
komme tilbake HttpResponse("Ingen tilgang")

komme tilbake innpakning

De admin_only dekorator sjekker om brukeren som får tilgang til visningen er en superbruker. Hvis de er det, kjører visningsfunksjonen, ellers nekter den brukeren tilgang.

Brukerautentisering og autorisasjon

Brukerautentisering og autorisasjon er kritiske komponenter for å sikre Django-applikasjoner. De sikrer at rett person får tilgang til spesifikke funksjoner i applikasjonen.

Bruker autentisering

Brukerautentisering bekrefter identiteten til personen som får tilgang til applikasjonen din. Djangos autentiseringssystem gir funksjonalitet for å håndtere dette.

fra django.contrib.auth import autentisere, logge på
fra django.http import HttpResponse

deflogin_view(be om):
hvis request.method == 'POST':
brukernavn = forespørsel. POST['brukernavn']
passord = forespørsel. POST['passord']
bruker = autentisere (forespørsel, brukernavn=brukernavn, passord=passord)

hvis bruker erikkeIngen:
pålogging (forespørsel, bruker)
komme tilbake HttpResponse("Vellykket innlogging")
ellers:
komme tilbake HttpResponse("Ugyldige legitimasjon")
ellers:
# Gjengi påloggingsskjema
komme tilbake HttpResponse("Innloggingsskjema")

De login_view funksjonen håndterer påloggingsprosessen. Når en bruker sender inn sin legitimasjon, bekrefter autentiseringsfunksjonen dem. Hvis legitimasjonen er gyldig, oppretter påloggingsfunksjonen en økt for brukeren, slik at de får tilgang til begrensede områder av applikasjonen. Hvis legitimasjonen er feil, oppretter ikke koden en økt.

Brukerautorisasjon

Brukerautorisasjon bestemmer hvilke handlinger en bruker kan utføre i applikasjonen. Django tilbyr et fleksibelt tillatelsessystem som gir deg kontroll over brukertilgang.

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

@permission_required('polls.can_vote')
defstemme(be om):
# Stemmelogikk her
komme tilbake HttpResponse("Stemme registrert")

I eksemplet ovenfor er @permission_required dekoratør sørger for at kun brukere med polls.can_vote tillatelse kan få tilgang til stemmevisningen. Hvis en bruker uten nødvendig tillatelse forsøker å få tilgang til visningen, nektes de tilgang.

Implementering av tilpasset mellomvare

Mellomvare sitter mellom webserveren og visningen. Implementering av tilpasset mellomvare legger til ytterligere sikkerhetskontroller eller endrer forespørsler og svar. Dette kan være av grunner som å håndheve HTTPS.

fra django.http import HttpResponsePermanentRedirect

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

def__anrop__(selv, forespørsel):
hvisikke request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
secure_url = url.replace(' http://', ' https://')
komme tilbake HttpResponsePermanent Redirect (secure_url)

komme tilbake self.get_response (forespørsel)

Ovennevnte mellomvare sjekker om forespørselen bruker er_sikker metode. Hvis ikke, omdirigeres den til HTTPS-versjon av URL-en.

Sikring av filhåndtering

Filhåndtering er en vanlig funksjon i webapplikasjoner. Det utgjør sikkerhetsrisiko hvis det ikke er ordentlig sikret. Når du håndterer brukeropplastede filer, er det viktig å validere filinnholdet. Dette forhindrer ondsinnede opplastinger. Du kan validere filtypene ved å bruke Djangos FileExtensionValidator.

fra django.core.validators import FileExtensionValidator
fra django.forms import skjemaer

klasseFileUploadForm(skjemaer. skjema):
fil = skjemaer. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])

I kodeblokken ovenfor er FileUploadForm klasse bruker FileExtensionValidator for kun å tillate PDF- og DOCX-filopplastinger. Applikasjonen vil avvise alle andre filformater under opplasting. Tilpass de tillatte utvidelsene i henhold til applikasjonens krav.

CSRF-beskyttelse

Du kan forhindre Cross-Site Request Forgery (CSRF)-angrep ved å bruke Djangos innebygde CSRF-beskyttelse. Du bør inkludere en i malen din CSRF-token som vil validere på serversiden.

"post" handling="/send-skjema/">
{% csrf_token %}
Skjemafelt


Når du bruker % csrf_token % maltag, genererer Django et skjult inndatafelt med CSRF-tokenet. Dette tokenet er unikt for hver brukerøkt. Det hjelper med å validere ektheten til det innsendte skjemaet.

Serversiden sjekker CSRF-tokenet når skjemainnsendingen behandles. Hvis tokenet mangler eller er ugyldig, viser Django en Forbidden (HTTP 403) feil. Det er viktig å sikre at applikasjonen din er trygg mot denne typen sikkerhetssårbarhet.

Skrive sikre skjemaer

Når du oppretter skjemaer, er det viktig å håndtere brukerinndata på en sikker måte. Dette er for å forhindre vanlige sårbarheter som SQL-injeksjon og XSS-angrep. Nedenfor er et eksempel som viser hvordan du kan lage et sikkert skjema i Django.

fra django import skjemaer
fra django.utils.html import flukt

klasseSecureForm(skjemaer. skjema):
navn = former. CharField (max_length=100)
e-post = skjemaer. EmailField()

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

# Rengjør brukerinnspill
sanitized_name = escape (navn)
komme tilbake sanitized_name

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

# Validere og rense brukerinnspill
hvisikke email.endswith('@example.com'):
heve skjemaer. Valideringsfeil("Ugyldig e-postdomene")

sanitized_email = escape (e-post)
komme tilbake sanitized_email

De rent_navn og ren_e-post metoder validerer og renser brukerinndata. De rent_navn metoden bruker flukt funksjon for å rense navneinntastingen og forhindre potensielle XSS-angrep.

De ren_e-post metoden validerer e-postformatet og begrenser e-postdomenet til eksempel.com. Det reiser en Valideringsfeil hvis e-posten ikke oppfyller de angitte kriteriene. Denne handlingen forbedrer sikkerheten til skjemaene dine og beskytter dem mot vanlige sårbarheter.

Det er viktig å forstå sårbarheter i nettapplikasjoner

Å forstå sårbarheter i nettapplikasjoner vil hjelpe deg med å sikre applikasjonen din. Det vil gjøre det ved å hjelpe deg med å identifisere og adressere potensielle svake punkter i applikasjonen. Dette vil i sin tur redusere sannsynligheten for vellykkede angrep betydelig.