Django heeft uitstekende beveiligingsfuncties, maar het is van vitaal belang dat u ze begrijpt en begrijpt wat ze doen, zodat uw apps echt veilig zijn.

Django biedt een veilige basis voor het bouwen van webapplicaties. Maar vertrouwen op de standaard beveiligingsfuncties van Django is niet genoeg. Het is van cruciaal belang dat u aanvullende maatregelen neemt om de beveiliging van uw applicaties te versterken.

Door aanvullende maatregelen te nemen, kunt u potentiële kwetsbaarheden beperken, gevoelige gegevens beschermen en uw toepassing beschermen tegen cyberdreigingen. Dit zorgt voor de bescherming van de informatie van uw gebruikers en helpt de reputatie en betrouwbaarheid van uw organisatie te behouden.

Uitzicht beveiligen met decorateurs

Views in Django behandelen inkomende verzoeken. Ze spelen een cruciale rol bij het bepalen van de respons die de klant krijgt. Het beveiligen van weergaven regelt de toegang en beschermt gevoelige functionaliteiten. Django biedt decorateurs die u kunt toepassen op weergaven om specifieke beveiligingsmaatregelen af ​​te dwingen.

instagram viewer

@login_required Decorateur

De @Aanmelden vereist decorateur zorgt ervoor dat alleen geverifieerde gebruikers toegang hebben tot een bepaalde weergave. Wanneer een niet-geverifieerde gebruiker toegang probeert te krijgen tot de weergave, leidt de toepassing hem om naar de inlogpagina.

van django.contrib.auth.decorateurs importeren Aanmelden vereist
van django.http importeren Http-antwoord

@Aanmelden vereist
defveilige_weergave(verzoek):
# Uw weergavelogica hier
opbrengst Http-antwoord("Dit is een veilig zicht")

Het toepassen van de @Aanmelden vereist decorateur naar de functie secure_view zorgt er automatisch voor dat de gebruiker wordt geverifieerd voordat de logica van de weergave wordt uitgevoerd.

Decorateurs op maat

Met Django kun je aangepaste decorateurs maken. Hiermee kunt u extra beveiligingscontroles of beperkingen doorvoeren. U wilt bijvoorbeeld een binnenhuisarchitect maken die de toegang beperkt tot specifieke gebruikersrollen.

van funtools importeren omslagen
van django.http importeren Http-antwoord

defalleen beheerder(view_func):
@wraps (view_func)
defwikkel(verzoek, *args, **kwargs):
als request.user.is_superuser:
opbrengst view_func (verzoek, *args, **kwargs)
anders:
opbrengst Http-antwoord("Toegang geweigerd")

opbrengst wikkel

De alleen beheerder decorateur controleert of de gebruiker die de weergave opent een supergebruiker is. Als dit het geval is, wordt de weergavefunctie uitgevoerd, anders wordt de gebruiker de toegang geweigerd.

Gebruikersauthenticatie en autorisatie

Gebruikersauthenticatie en -autorisatie zijn cruciale componenten voor het beveiligen van Django-applicaties. Ze zorgen ervoor dat de juiste persoon toegang heeft tot specifieke functionaliteiten van de applicatie.

Gebruikersverificatie

Gebruikersauthenticatie verifieert de identiteit van de persoon die toegang heeft tot uw toepassing. Het authenticatiesysteem van Django biedt functionaliteit om dit af te handelen.

van django.contrib.auth importeren authenticeren, inloggen
van django.http importeren Http-antwoord

deflogin_weergave(verzoek):
als aanvraag.methode == 'NA':
gebruikersnaam = verzoek. NA['gebruikersnaam']
wachtwoord = verzoek. NA['wachtwoord']
gebruiker = authenticeren (verzoek, gebruikersnaam=gebruikersnaam, wachtwoord=wachtwoord)

als gebruiker isnietGeen:
login (verzoek, gebruiker)
opbrengst Http-antwoord("Succesvol ingelogd")
anders:
opbrengst Http-antwoord("Ongeldige inloggegevens")
anders:
# Render inlogformulier
opbrengst Http-antwoord("Login formulier")

De login_weergave functie handelt het aanmeldingsproces af. Wanneer een gebruiker zijn referenties indient, verifieert de authenticatiefunctie deze. Als de inloggegevens geldig zijn, creëert de login-functie een sessie voor de gebruiker, waardoor deze toegang krijgt tot beperkte delen van de applicatie. Als de inloggegevens onjuist zijn, maakt de code geen sessie aan.

Gebruikers autorisatie

Gebruikersautorisatie bepaalt welke acties een gebruiker binnen de applicatie kan uitvoeren. Django biedt een flexibel machtigingssysteem dat u controle geeft over gebruikerstoegang.

van django.contrib.auth.decorateurs importeren toestemming_vereist
van django.http importeren Http-antwoord

@permission_required('polls.can_vote')
defstemmen(verzoek):
# Stemlogica hier
opbrengst Http-antwoord("Stem opgenomen")

In bovenstaand voorbeeld is de @permission_required decorateur zorgt ervoor dat alleen gebruikers met de polls.can_vote toestemming heeft toegang tot de stemweergave. Als een gebruiker zonder de benodigde toestemming toegang probeert te krijgen tot de weergave, wordt de toegang geweigerd.

Implementeren van aangepaste middleware

Middleware bevindt zich tussen de webserver en de weergave. Het implementeren van aangepaste middleware voegt extra beveiligingscontroles toe of wijzigt verzoeken en antwoorden. Dit kan redenen zijn zoals het afdwingen van HTTPS.

van django.http importeren HttpResponsePermanentRedirect

klasHttpsMiddleware afdwingen:
def__in het__(zelf, krijg_antwoord):
self.get_response = get_response

def__telefoongesprek__(zelf, verzoek):
alsniet aanvraag.is_secure():
url = request.build_absolute_uri (request.get_full_path())
veilige_url = url.vervangen(' http://', ' https://')
opbrengst HttpResponsePermanentRedirect (secure_url)

opbrengst self.get_response (verzoek)

De bovenstaande middleware controleert of het verzoek de is_veilig methode. Zo niet, dan wordt hij doorverwezen naar de HTTPS-versie van de URL.

Veilige bestandsafhandeling

Bestandsafhandeling is een veelvoorkomend kenmerk in webapplicaties. Het vormt beveiligingsrisico's als het niet goed is beveiligd. Bij het verwerken van door gebruikers geüploade bestanden is het belangrijk om de inhoud van het bestand te valideren. Dit voorkomt kwaadaardige uploads. U kunt de bestandstypen valideren met Django's FileExtensionValidator.

van django.core.validators importeren FileExtensionValidator
van django.formulieren importeren formulieren

klasFileUploadForm(formulieren. Formulier):
bestand = formulieren. Bestandsveld (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])

In het bovenstaande codeblok is de FileUploadForm klas gebruikt de FileExtensionValidator om alleen PDF- en DOCX-bestandsuploads toe te staan. De applicatie weigert alle andere bestandsindelingen tijdens het uploaden. Pas de toegestane extensies aan volgens de vereisten van uw toepassing.

CSRF-bescherming

U kunt CSRF-aanvallen (Cross-Site Request Forgery) voorkomen met de ingebouwde CSRF-beveiliging van Django. U dient in uw sjabloon a CSRF-token dat zal valideren aan de serverzijde.

"na" actie="/submit-formulier/">
{% csrf_token %}
Formulier velden


Wanneer u de % csrf_token % template-tag genereert Django een verborgen invoerveld met het CSRF-token. Dit token is uniek voor elke gebruikerssessie. Het helpt de authenticiteit van het ingediende formulier te valideren.

De serverzijde controleert het CSRF-token bij het verwerken van het indienen van het formulier. Als het token ontbreekt of ongeldig is, roept Django een Forbidden (HTTP 403) -fout op. Het is essentieel om ervoor te zorgen dat uw toepassing veilig is voor dit soort beveiligingsproblemen.

Veilige formulieren schrijven

Bij het maken van formulieren is het belangrijk om gebruikersinvoer veilig te behandelen. Dit is om veelvoorkomende kwetsbaarheden zoals SQL-injectie en XSS-aanvallen te voorkomen. Hieronder ziet u een voorbeeld dat laat zien hoe u een beveiligd formulier kunt maken in Django.

van django importeren formulieren
van django.utils.html importeren ontsnappen

klasVeiligForm(formulieren. Formulier):
naam = vormen. CharField (max_length=100)
e-mail = formulieren. E-mailVeld()

defschone_naam(zelf):
naam = self.cleaned_data['naam']

# Sanitize gebruikersinvoer
sanitized_name = ontsnapping (naam)
opbrengst opgeschoonde_naam

defschone_e-mail(zelf):
e-mail = self.cleaned_data['e-mail']

# Valideer en zuiver gebruikersinvoer
alsniet e-mail.eindigt met('@voorbeeld.com'):
salarisverhoging formulieren. Validatiefout("Ongeldig e-maildomein")

sanitized_email = ontsnapping (e-mail)
opbrengst opgeschoonde_e-mail

De schone_naam En schone_e-mail methoden valideren en zuiveren de gebruikersinvoer. De schone_naam methode maakt gebruik van de ontsnappen functie om de naaminvoer te ontsmetten en te voorkomen mogelijke XSS-aanvallen.

De schone_e-mail methode valideert het e-mailformaat en beperkt het e-maildomein tot voorbeeld.com. Het verhoogt een Validatiefout als de e-mail niet aan de opgegeven criteria voldoet. Deze actie verbetert de beveiliging van uw formulieren en beschermt ze tegen veelvoorkomende kwetsbaarheden.

Inzicht in de kwetsbaarheden van webapplicaties is belangrijk

Als u de kwetsbaarheden van webapplicaties begrijpt, kunt u uw applicatie beter beveiligen. Het zal dit doen door u te helpen potentiële zwakke punten in de toepassing te identificeren en aan te pakken. Dit zal op zijn beurt de kans op succesvolle aanvallen aanzienlijk verkleinen.