„Django“ turi puikių saugos funkcijų, tačiau labai svarbu jas suprasti ir suprasti, ką jos daro, kad jūsų programos būtų tikrai saugios.

„Django“ suteikia saugų pagrindą žiniatinklio programoms kurti. Tačiau pasikliauti numatytosiomis „Django“ saugos funkcijomis neužtenka. Labai svarbu įdiegti papildomas priemones, kad sustiprintumėte savo programų saugumą.

Įdiegę papildomas priemones galite sumažinti galimus pažeidžiamumus, apsaugoti neskelbtinus duomenis ir apsaugoti savo programą nuo kibernetinių grėsmių. Tai užtikrina jūsų vartotojų informacijos apsaugą ir padeda išlaikyti jūsų organizacijos reputaciją bei patikimumą.

Vaizdų užtikrinimas dekoratoriais

„Django“ rodiniai apdoroja gaunamas užklausas. Jie atlieka gyvybiškai svarbų vaidmenį nustatant atsakymą, kurį gauna klientas. Apsaugos rodiniai valdo prieigą ir apsaugo jautrias funkcijas. „Django“ siūlo dekoratorius, kuriuos galite pritaikyti vaizdams, kad užtikrintumėte konkrečias saugumo priemones.

@login_required Dekoratorė

The @login_required

instagram viewer
dekoratorius užtikrina, kad tik autentifikuoti vartotojai galėtų pasiekti tam tikrą rodinį. Kai neautentifikuotas vartotojas bando pasiekti rodinį, programa nukreipia jį į prisijungimo puslapį.

 django.contrib.auth.decorators importuoti login_required
django.http importuoti HttpResponse

@login_required
defsafe_view(užklausa):
# Čia jūsų požiūrio logika
grąžinti HttpResponse(„Tai saugus vaizdas“)

Taikant @login_required „Security_view“ funkcijos dekoratorius automatiškai užtikrina, kad vartotojas būtų autentifikuotas prieš vykdant rodinio logiką.

Individualūs dekoratoriai

„Django“ leidžia kurti individualius dekoratorius. Tai leidžia atlikti papildomus saugumo patikrinimus ar apribojimus. Pavyzdžiui, galbūt norėsite sukurti dekoratorių, kuris apribotų prieigą prie konkrečių vartotojo vaidmenų.

 funkcinės priemonės importuoti įvyniojimai
django.http importuoti HttpResponse

defadmin_only(view_func):
@wraps (view_func)
defvyniojamasis popierius(užklausa, *args, **kwargs):
jeigu request.user.is_superuser:
grąžinti view_func (užklausa, *args, **kwargs)
Kitas:
grąžinti HttpResponse(„Prieiga uždrausta“)

grąžinti vyniojamasis popierius

The admin_only dekoratorius patikrina, ar vartotojas, pasiekiantis rodinį, yra supervartotojas. Jei jie yra, peržiūros funkcija veikia, priešingu atveju ji neleidžia vartotojui pasiekti.

Vartotojo autentifikavimas ir autorizacija

Vartotojo autentifikavimas ir autorizacija yra svarbūs „Django“ programų apsaugos komponentai. Jie užtikrina, kad reikiamas asmuo galėtų pasiekti konkrečias programos funkcijas.

Vartotojo autentifikavimas

Vartotojo autentifikavimas patvirtina asmens, kuris pasiekia jūsų programą, tapatybę. Django autentifikavimo sistema suteikia funkcionalumą, kaip tai tvarkyti.

 django.contrib.auth importuoti autentifikuoti, prisijungti
django.http importuoti HttpResponse

deflogin_view(užklausa):
jeigu prašymas.metodas == „PASKELBTI“:
vartotojo vardas = prašymas. PASKELBTI['Vartotojo vardas']
slaptažodis = prašymas. PASKELBTI['Slaptažodis']
vartotojas = autentifikuoti (užklausa, vartotojo vardas = vartotojo vardas, slaptažodis = slaptažodis)

jeigu Vartotojas yraneNė vienas:
prisijungimas (užklausa, vartotojas)
grąžinti HttpResponse("Prisijungimas sėkmingas")
Kitas:
grąžinti HttpResponse(„Netinkami kredencialai“)
Kitas:
# Pateikite prisijungimo formą
grąžinti HttpResponse("Prisijungimo forma")

The login_view funkcija tvarko prisijungimo procesą. Kai vartotojas pateikia savo kredencialus, autentifikavimo funkcija juos patikrina. Jei kredencialai galioja, prisijungimo funkcija sukuria vartotojui seansą, leidžiantį pasiekti apribotas programos sritis. Jei kredencialai neteisingi, kodas nesukuria sesijos.

Vartotojo autorizacija

Vartotojo įgaliojimas nustato, kokius veiksmus vartotojas gali atlikti programoje. „Django“ suteikia lanksčią leidimų sistemą, leidžiančią valdyti vartotojo prieigą.

 django.contrib.auth.decorators importuoti Permission_required
django.http importuoti HttpResponse

@permission_required('polls.can_vote')
defbalsas(užklausa):
# Balsavimo logika čia
grąžinti HttpResponse(„Balsavimas įrašytas“)

Aukščiau pateiktame pavyzdyje @permission_required dekoratorius užtikrina, kad tik vartotojai su apklausos.gali_balsuoti leidimas gali pasiekti balsavimo rodinį. Jei vartotojas, neturintis reikiamo leidimo, bando pasiekti rodinį, prieiga jam neleidžiama.

Pasirinktinės tarpinės programinės įrangos diegimas

Tarpinė programinė įranga yra tarp žiniatinklio serverio ir rodinio. Įdiegę tinkintą tarpinę programinę įrangą prideda papildomų saugos patikrų arba pakeičia užklausas ir atsakymus. Taip gali būti dėl tokių priežasčių kaip HTTPS vykdymas.

 django.http importuoti HttpResponsePermanentRedirect

klasėEnforceHttpsMiddleware:
def__init__(savarankiškai, gauti_atsakymą):
self.get_response = gauti_atsakymą

def__skambinti__(savęs, prašymas):
jeigune request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
safe_url = url.replace(' http://', ' https://')
grąžinti HttpResponsePermanentRedirect (secure_url)

grąžinti self.get_response (užklausa)

Aukščiau pateikta tarpinė programinė įranga patikrina, ar užklausa naudoja is_secure metodas. Jei ne, jis nukreipia į URL HTTPS versija.

Failų tvarkymo apsauga

Failų tvarkymas yra įprasta žiniatinklio programų funkcija. Jei jis nėra tinkamai apsaugotas, jis kelia pavojų saugumui. Tvarkant vartotojo įkeltus failus, svarbu patvirtinti failo turinį. Tai apsaugo nuo kenkėjiškų įkėlimų. Failų tipus galite patvirtinti naudodami Django FileExtensionValidator.

 django.core.validators importuoti FileExtensionValidator
django.formos importuoti formų

klasėFileUloadForm(formos. forma):
failas = formos. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', "docx"])])

Aukščiau pateiktame kodo bloke FileUloadForm klasė naudoja FileExtensionValidator leisti įkelti tik PDF ir DOCX failus. Įkėlimo metu programa atmes bet kokius kitus failų formatus. Tinkinkite leidžiamus plėtinius pagal savo programos reikalavimus.

CSRF apsauga

Galite užkirsti kelią kelių svetainių užklausų klastojimo (CSRF) atakoms naudodami „Django“ integruotą CSRF apsaugą. Į savo šabloną turėtumėte įtraukti a CSRF prieigos raktas kuris bus patvirtintas serverio pusėje.

"post" veiksmas ="/pateikti formą/">
{% csrf_token %}
Formos laukai


Kai naudojate % csrf_token % šablono žymą, Django sugeneruoja paslėptą įvesties lauką su CSRF prieigos raktu. Šis prieigos raktas yra unikalus kiekvienam vartotojo seansui. Tai padeda patvirtinti pateiktos formos autentiškumą.

Apdorojant formos pateikimą, serverio pusė patikrina CSRF prieigos raktą. Jei prieigos rakto trūksta arba jis neteisingas, Django iškelia uždrausto (HTTP 403) klaidą. Labai svarbu užtikrinti, kad jūsų programa būtų apsaugota nuo tokio tipo saugos pažeidžiamumo.

Saugių formų rašymas

Kuriant formas svarbu saugiai tvarkyti vartotojo įvestį. Taip siekiama išvengti įprastų pažeidžiamumų, pvz., SQL injekcijos ir XSS atakų. Žemiau pateikiamas pavyzdys, rodantis, kaip galite sukurti saugią formą Django.

 django importuoti formų
django.utils.html importuoti Pabegti

klasėSaugi forma(formos. forma):
vardas = formos. CharField (max_length=100)
paštas = formos. El. pašto laukas ()

defšvarus_vardas(savarankiškai):
vardas = self.cleaned_data['vardas']

# Išvalykite vartotojo įvestį
sanitized_name = pabėgimas (vardas)
grąžinti išvalytas_vardas

defšvarus_el. paštas(savarankiškai):
paštas = self.cleaned_data['el. paštas']

# Patvirtinkite ir išvalykite vartotojo įvestį
jeigune email.endswith(„@example.com“):
pakelti formų. Patvirtinimo klaida(„Neteisingas el. pašto domenas“)

sanitized_email = pabėgimas (el. paštas)
grąžinti išvalytas_el. paštas

The švarus_vardas ir švarus_el. paštas metodai patvirtina ir dezinfekuoja vartotojo įvestį. The švarus_vardas metodas naudoja Pabegti funkcija, skirta vardo įvesties valymui ir prevencijai galimos XSS atakos.

The švarus_el. paštas metodas patvirtina el. pašto formatą ir apriboja el. pašto domeną example.com. Tai kelia a Patvirtinimo klaida jei el. laiškas neatitinka nurodytų kriterijų. Šis veiksmas padidina jūsų formų saugumą ir apsaugo jas nuo įprastų pažeidžiamumų.

Svarbu suprasti žiniatinklio programų pažeidžiamumą

Žiniatinklio programų pažeidžiamumo supratimas padės apsaugoti programą. Tai padės nustatyti ir pašalinti galimas silpnąsias programos vietas. Tai savo ruožtu žymiai sumažins sėkmingų išpuolių tikimybę.