Djangol on suurepärased turvafunktsioonid, kuid teie rakenduste tõeliselt turvalisuse tagamiseks on oluline, et mõistaksite neid ja mida nad teevad.
Django loob turvalise aluse veebirakenduste loomiseks. Kuid Django vaiketurvafunktsioonidele tuginemisest ei piisa. Teie jaoks on ülioluline rakendada täiendavaid meetmeid oma rakenduste turvalisuse tugevdamiseks.
Täiendavate meetmete rakendamisega saate leevendada võimalikke haavatavusi, kaitsta tundlikke andmeid ja kaitsta oma rakendust küberohtude eest. See tagab teie kasutajate teabe kaitse ning aitab säilitada teie organisatsiooni mainet ja usaldusväärsust.
Vaadete tagamine dekoraatoritega
Django vaated käsitlevad sissetulevaid päringuid. Nad mängivad olulist rolli kliendi vastuse määramisel. Vaadete turvamine kontrollib juurdepääsu ja kaitseb tundlikke funktsioone. Django pakub dekoraatoreid, mida saate konkreetsete turvameetmete jõustamiseks vaadetele rakendada.
@login_required Dekoraator
The @login_required dekoraator tagab, et konkreetsele vaatele pääsevad juurde ainult autentitud kasutajad. Kui autentimata kasutaja proovib vaatele juurde pääseda, suunab rakendus ta sisselogimislehele.
alates django.contrib.auth.decorators importida login_required
alates django.http importida HttpResponse
@login_required
defturvaline_vaade(taotlus):
# Siin on teie vaateloogika
tagasi HttpResponse("See on turvaline vaade")
Rakendades @login_required Decorator to safe_view funktsiooni tagab automaatselt kasutaja autentimise enne vaate loogika käivitamist.
Kohandatud dekoraatorid
Django võimaldab teil luua kohandatud dekoraatoreid. See võimaldab teil rakendada täiendavaid turvakontrolle või -piiranguid. Näiteks võite soovida luua dekoraatori, mis piirab juurdepääsu konkreetsetele kasutajarollidele.
alates funktsionaalsed tööriistad importida mähised
alates django.http importida HttpResponsedefadmin_only(view_func):
@wraps (view_func)
defümbris(taotlus, *args, **kwargs):
kui request.user.is_superuser:
tagasi view_func (taotlus, *args, **kwargs)
muidu:
tagasi HttpResponse("Ligipääs keelatud")
tagasi ümbris
The admin_only dekoraator kontrollib, kas vaatele juurdepääsetav kasutaja on superkasutaja. Kui need on, siis vaatamise funktsioon töötab, vastasel juhul keelab see kasutaja juurdepääsu.
Kasutaja autentimine ja autoriseerimine
Kasutaja autentimine ja autoriseerimine on Django rakenduste turvalisuse kriitilised komponendid. Need tagavad, et rakenduse konkreetsetele funktsioonidele pääseb juurde õige inimene.
Kasutaja autentimine
Kasutaja autentimine kontrollib teie rakendusele juurdepääsu kasutaja identiteeti. Django autentimissüsteem pakub selle haldamiseks funktsioone.
alates django.contrib.auth importida autentida, sisse logida
alates django.http importida HttpResponsedeflogin_view(taotlus):
kui taotlus.meetod == 'POSTI':
kasutajanimi = taotlus. POSTITA['kasutajanimi']
parool = päring. POSTITA['parool']
kasutaja = autentida (päring, kasutajanimi = kasutajanimi, parool = parool)
kui kasutaja onmitteMitte ühtegi:
sisselogimine (päring, kasutaja)
tagasi HttpResponse("Sisselogimine õnnestus")
muidu:
tagasi HttpResponse("Valed volikirjad")
muidu:
# Renderdage sisselogimisvorm
tagasi HttpResponse("Sisselogimisvorm")
The login_view funktsioon tegeleb sisselogimisprotsessiga. Kui kasutaja esitab oma mandaadid, kontrollib autentimisfunktsioon need. Kui mandaadid on kehtivad, loob sisselogimisfunktsioon kasutajale seansi, võimaldades tal juurdepääsu rakenduse piiratud aladele. Kui mandaadid on valed, ei loo kood seanssi.
Kasutaja autoriseerimine
Kasutaja autoriseerimine määrab, milliseid toiminguid kasutaja saab rakenduses teha. Django pakub paindlikku lubade süsteemi, mis annab teile kontrolli kasutaja juurdepääsu üle.
alates django.contrib.auth.decorators importida luba_nõutav
alates django.http importida HttpResponse
@permission_required('polls.can_vote')
defhääletada(taotlus):
# Hääletusloogika siin
tagasi HttpResponse("Hääletus salvestatud")
Ülaltoodud näites on @permission_required dekoraator tagab, et ainult kasutajad küsitlused.saab_hääletada luba pääseb juurde häälevaatele. Kui kasutaja ilma vajaliku loata proovib vaatele juurde pääseda, keelatakse tal juurdepääs.
Kohandatud vahevara juurutamine
Vahevara asub veebiserveri ja vaate vahel. Kohandatud vahevara rakendamine lisab täiendavaid turvakontrolle või muudab päringuid ja vastuseid. Selle põhjuseks võivad olla näiteks HTTPS-i jõustamine.
alates django.http importida HttpResponsePermanentRedirect
klassJõustaHttpsMiddleware:
def__selles__(ise, saada_vastus):
self.get_response = saada_vastusdef__helistama__(ise, palve):
kuimitte request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
safe_url = url.replace(' http://', ' https://')
tagasi HttpResponsePermanentRedirect (turvaline_url)
tagasi self.get_response (taotlus)
Ülaltoodud vahevara kontrollib, kas päring kasutab on_turvaline meetod. Kui ei, suunab see ümber aadressile URL-i HTTPS-versioon.
Failide haldamise turvamine
Failikäsitlus on veebirakenduste tavaline funktsioon. See kujutab endast turvariske, kui see pole korralikult kaitstud. Kasutajate üleslaaditud failide käsitlemisel on oluline faili sisu kinnitada. See hoiab ära pahatahtliku üleslaadimise. Failitüüpe saate kontrollida Django FileExtensionValidatori abil.
alates django.core.validators importida FileExtensionValidator
alates django.vormid importida vormid
klassFileUploadForm(vormid. Vorm):
fail = vormid. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
Ülaltoodud koodiplokis on FileUploadForm klass kasutab FileExtensionValidator lubada ainult PDF- ja DOCX-failide üleslaadimist. Rakendus lükkab üleslaadimise ajal tagasi kõik muud failivormingud. Kohandage lubatud laiendusi vastavalt oma rakenduse nõuetele.
CSRF kaitse
Saate vältida saidiüleste taotluste võltsimise (CSRF) rünnakuid, kasutades Django sisseehitatud CSRF-kaitset. Peaksite oma malli lisama a CSRF-i tunnus mis kinnitatakse serveri poolel.
Kui kasutate % csrf_token % malli silt, genereerib Django CSRF-märgiga peidetud sisestusvälja. See tunnus on iga kasutajaseansi jaoks unikaalne. See aitab kontrollida esitatud vormi autentsust.
Serveripool kontrollib vormi esitamise töötlemisel CSRF-i luba. Kui märk puudub või on kehtetu, tekitab Django Keelatud (HTTP 403) vea. Oluline on tagada, et teie rakendus oleks seda tüüpi turvaaukude eest kaitstud.
Turvaliste vormide kirjutamine
Vormide loomisel on oluline kasutaja sisestust turvaliselt käsitleda. Selle eesmärk on vältida levinud haavatavusi, nagu SQL-i süstimine ja XSS-i rünnakud. Allpool on näide, mis näitab, kuidas saate Djangos turvalise vormi luua.
alates django importida vormid
alates django.utils.html importida põgenedaklassTurvaline vorm(vormid. Vorm):
nimi = vormid. CharField (max_length=100)
email = vormid. Meiliväli()defpuhas_nimi(ise):
nimi = self.cleaned_data['nimi']# Puhastage kasutaja sisestus
sanitized_name = põgenemine (nimi)
tagasi desinfitseeritud_nimidefpuhas_e-post(ise):
email = self.cleaned_data['e-post']# Kinnitage ja desinfitseerige kasutaja sisend
kuimitte email.endswith('@example.com'):
tõsta vormid. ValidationError("Vigane e-posti domeen")
sanitized_email = põgenemine (e-post)
tagasi desinfitseeritud_e-post
The puhas_nimi ja puhas_e-post meetodid kinnitavad ja desinfitseerivad kasutaja sisendi. The puhas_nimi meetod kasutab põgeneda funktsioon nimesisestuse puhastamiseks ja vältimiseks potentsiaalsed XSS-rünnakud.
The puhas_e-post meetod kinnitab meilivormingu ja piirab meili domeeni example.com. See tõstab a Valideerimisviga kui e-kiri ei vasta määratud kriteeriumidele. See toiming suurendab teie vormide turvalisust ja kaitseb neid tavaliste haavatavuste eest.
Veebirakenduste haavatavuste mõistmine on oluline
Veebirakenduste haavatavuste mõistmine aitab teil oma rakendust kaitsta. See teeb seda, aidates teil tuvastada rakenduse võimalikud nõrgad kohad ja kõrvaldada need. See omakorda vähendab oluliselt edukate rünnakute tõenäosust.