Django ir lieliski drošības līdzekļi, taču ir ļoti svarīgi, lai jūs tos saprastu un to darbību, lai jūsu lietotnes būtu patiesi drošas.

Django nodrošina drošu pamatu tīmekļa lietojumprogrammu veidošanai. Taču ar paļaušanos uz Django noklusējuma drošības līdzekļiem nepietiek. Ir ļoti svarīgi, lai jūs ieviestu papildu pasākumus, lai stiprinātu savu lietojumprogrammu drošību.

Ieviešot papildu pasākumus, varat mazināt iespējamās ievainojamības, aizsargāt sensitīvus datus un aizsargāt savu lietojumprogrammu no kiberdraudiem. Tas nodrošina jūsu lietotāju informācijas aizsardzību un palīdz uzturēt jūsu organizācijas reputāciju un uzticamību.

Skatu nodrošināšana ar dekoratoriem

Django skati apstrādā ienākošos pieprasījumus. Viņiem ir būtiska loma klienta atbildes noteikšanā. Skatu aizsardzība kontrolē piekļuvi un aizsargā sensitīvas funkcijas. Django piedāvā dekoratorus, kurus varat piemērot skatiem, lai īstenotu īpašus drošības pasākumus.

@login_required Dekorators

The @login_required dekorators nodrošina, ka tikai autentificēti lietotāji var piekļūt konkrētam skatam. Kad neautentificēts lietotājs mēģina piekļūt skatam, lietojumprogramma novirza viņu uz pieteikšanās lapu.

no django.contrib.auth.decorators imports login_required
no django.http imports HttpResponse

@login_required
defSecure_view(pieprasījums):
# Šeit ir jūsu skata loģika
atgriezties HttpResponse("Tas ir drošs skats")

Piemērojot @login_required Decorator uz safe_view funkciju automātiski nodrošina lietotāja autentifikāciju pirms skata loģikas izpildes.

Pielāgoti dekoratori

Django ļauj jums izveidot pielāgotus dekoratorus. Tas ļauj ieviest papildu drošības pārbaudes vai ierobežojumus. Piemēram, iespējams, vēlēsities izveidot dekoratoru, kas ierobežo piekļuvi noteiktām lietotāju lomām.

no funkcionālie rīki imports aptinumi
no django.http imports HttpResponse

defadmin_only(view_func):
@wraps (view_func)
defiesaiņojums(pieprasījums, *args, **kwargs):
ja request.user.is_superuser:
atgriezties view_func (pieprasījums, *args, **kwargs)
cits:
atgriezties HttpResponse("Pieeja noliegta")

atgriezties iesaiņojums

The admin_only dekorators pārbauda, ​​vai lietotājs, kurš piekļūst skatam, ir superlietotājs. Ja tie ir, skatīšanas funkcija darbojas, pretējā gadījumā tā liedz lietotāja piekļuvi.

Lietotāja autentifikācija un autorizācija

Lietotāju autentifikācija un autorizācija ir būtiskas Django lietojumprogrammu drošības sastāvdaļas. Tie nodrošina, ka īstā persona piekļūst konkrētām lietojumprogrammas funkcijām.

Lietotāja autentifikācija

Lietotāja autentifikācija pārbauda tās personas identitāti, kura piekļūst jūsu lietojumprogrammai. Django autentifikācijas sistēma nodrošina funkcionalitāti, lai to apstrādātu.

no django.contrib.auth imports autentificēt, pieteikties
no django.http imports HttpResponse

deflogin_view(pieprasījums):
ja pieprasījums.metode == 'POST':
lietotājvārds = pieprasījums. POSTĪT['lietotājvārds']
parole = pieprasījums. POSTĪT['parole']
lietotājs = autentificēt (pieprasījums, lietotājvārds = lietotājvārds, parole = parole)

ja lietotājs irNav:
pieteikšanās (pieprasījums, lietotājs)
atgriezties HttpResponse("Pieteikšanās veiksmīga")
cits:
atgriezties HttpResponse("Nederīgi akreditācijas dati")
cits:
# Renderējiet pieteikšanās veidlapu
atgriezties HttpResponse("Pieteikšanās forma")

The login_view funkcija apstrādā pieteikšanās procesu. Kad lietotājs iesniedz savus akreditācijas datus, autentifikācijas funkcija tos pārbauda. Ja akreditācijas dati ir derīgi, pieteikšanās funkcija lietotājam izveido sesiju, ļaujot viņam piekļūt ierobežotām lietojumprogrammas zonām. Ja akreditācijas dati ir nepareizi, kods neizveido sesiju.

Lietotāja autorizācija

Lietotāja autorizācija nosaka, kādas darbības lietotājs var veikt lietojumprogrammā. Django nodrošina elastīgu atļauju sistēmu, kas ļauj kontrolēt lietotāja piekļuvi.

no django.contrib.auth.decorators imports Permission_required
no django.http imports HttpResponse

@permission_required('polls.can_vote')
defbalsot(pieprasījums):
# Balsošanas loģika šeit
atgriezties HttpResponse("Balsojums ierakstīts")

Iepriekš minētajā piemērā @permission_required dekorators nodrošina, ka tikai lietotāji ar aptaujas.var_balsot atļauja var piekļūt balsojumu skatam. Ja lietotājs bez nepieciešamās atļaujas mēģina piekļūt skatam, viņam piekļuve tiek liegta.

Pielāgotas starpprogrammatūras ieviešana

Starpprogrammatūra atrodas starp tīmekļa serveri un skatu. Pielāgotas starpprogrammatūras ieviešana pievieno papildu drošības pārbaudes vai maina pieprasījumus un atbildes. Tas var būt tādu iemeslu dēļ kā HTTPS ieviešana.

no django.http imports HttpResponsePermanentRedirect

klasēEnforceHttpsMiddleware:
def__tajā__(pats, saņemt_atbildi):
self.get_response = get_response

def__zvanīt__(pats, pieprasījums):
ja request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
safe_url = url.replace(' http://', ' https://')
atgriezties HttpResponsePermanentRedirect (secure_url)

atgriezties self.get_response (pieprasījums)

Iepriekš minētā starpprogrammatūra pārbauda, ​​vai pieprasījums izmanto ir_drošs metodi. Ja nē, tas novirza uz URL HTTPS versija.

Failu apstrādes nodrošināšana

Failu apstrāde ir izplatīta funkcija tīmekļa lietojumprogrammās. Tas rada drošības riskus, ja tas nav pareizi nodrošināts. Apstrādājot lietotāju augšupielādētus failus, ir svarīgi pārbaudīt faila saturu. Tas novērš ļaunprātīgu augšupielādi. Failu tipus var pārbaudīt, izmantojot Django FileExtensionValidator.

no django.core.validators imports FileExtensionValidator
no django.formas imports veidlapas

klasēFileUploadForm(veidlapas. veidlapa):
fails = veidlapas. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])

Iepriekš minētajā koda blokā FileUploadForm klase izmanto FileExtensionValidator lai atļautu tikai PDF un DOCX failu augšupielādi. Augšupielādes laikā lietojumprogramma noraidīs citus failu formātus. Pielāgojiet atļautos paplašinājumus atbilstoši savas lietojumprogrammas prasībām.

CSRF aizsardzība

Varat novērst Cross-Site Request Forgery (CSRF) uzbrukumus, izmantojot Django iebūvēto CSRF aizsardzību. Veidnē ir jāiekļauj a CSRF marķieris kas tiks apstiprināts servera pusē.

"post" darbība="/iesniegt formu/">
{% csrf_token %}
Veidlapas lauki


Kad jūs izmantojat % csrf_token % veidnes tagu, Django ģenerē slēptu ievades lauku ar CSRF pilnvaru. Šis marķieris ir unikāls katrai lietotāja sesijai. Tas palīdz apstiprināt iesniegtās veidlapas autentiskumu.

Apstrādājot veidlapas iesniegšanu, servera puse pārbauda CSRF pilnvaru. Ja marķiera trūkst vai tas ir nederīgs, Django rada Forbidden (HTTP 403) kļūdu. Ir svarīgi nodrošināt, lai jūsu lietojumprogramma būtu aizsargāta pret šāda veida drošības ievainojamību.

Drošu veidlapu rakstīšana

Veidojot veidlapas, ir svarīgi droši apstrādāt lietotāja ievadītos datus. Tas ir paredzēts, lai novērstu izplatītas ievainojamības, piemēram, SQL injekcijas un XSS uzbrukumus. Tālāk ir sniegts piemērs, kas parāda, kā pakalpojumā Django varat izveidot drošu veidlapu.

no django imports veidlapas
no django.utils.html imports bēgt

klasēDroša veidlapa(veidlapas. veidlapa):
nosaukums = veidlapas. CharField (max_length=100)
e-pasts = veidlapas. E-pasta lauks()

deftīrs_nosaukums(pats):
nosaukums = self.cleaned_data['vārds']

# Dezinficējiet lietotāja ievadi
sanitized_name = aizbēgt (vārds)
atgriezties sanitized_name

defclean_email(pats):
e-pasts = self.cleaned_data['e-pasts']

# Apstipriniet un dezinficējiet lietotāja ievadi
ja email.endswith('@example.com'):
paaugstināt veidlapas. Validation Error("Nederīgs e-pasta domēns")

sanitized_email = aizbēgt (e-pasts)
atgriezties sanitized_email

The tīrs_nosaukums un clean_email metodes apstiprina un sanitizē lietotāja ievadi. The tīrs_nosaukums metode izmanto bēgt funkcija, lai dezinficētu vārda ievadi un novērstu potenciālie XSS uzbrukumi.

The clean_email metode apstiprina e-pasta formātu un ierobežo e-pasta domēnu līdz example.com. Tas paaugstina a Validation Error ja e-pasts neatbilst norādītajiem kritērijiem. Šī darbība uzlabo jūsu veidlapu drošību un aizsargā tās pret bieži sastopamām ievainojamībām.

Ir svarīgi izprast tīmekļa lietojumprogrammu ievainojamības

Izpratne par tīmekļa lietojumprogrammu ievainojamībām palīdzēs aizsargāt lietojumprogrammu. Tas tiks darīts, palīdzot jums noteikt un novērst iespējamos vājos punktus lietojumprogrammā. Tas savukārt ievērojami samazinās veiksmīgu uzbrukumu iespējamību.