Djangossa on erinomaisia suojausominaisuuksia, mutta on tärkeää, että ymmärrät ne ja mitä ne tekevät, jotta sovelluksesi ovat todella turvallisia.
Django tarjoaa turvallisen perustan verkkosovellusten rakentamiselle. Mutta luottaminen Djangon oletusturvaominaisuuksiin ei riitä. On ratkaisevan tärkeää, että otat käyttöön lisätoimenpiteitä sovellusten turvallisuuden vahvistamiseksi.
Ottamalla käyttöön lisätoimenpiteitä voit vähentää mahdollisia haavoittuvuuksia, suojata arkaluonteisia tietoja ja suojata sovelluksesi kyberuhkilta. Tämä varmistaa käyttäjiesi tietojen suojan ja auttaa ylläpitämään organisaatiosi mainetta ja luotettavuutta.
Näkymien varmistaminen sisustajilla
Djangon näkymät käsittelevät saapuvia pyyntöjä. Niillä on tärkeä rooli asiakkaan saaman vastauksen määrittämisessä. Näkymien suojaaminen hallitsee pääsyä ja suojaa arkaluonteisia toimintoja. Django tarjoaa sisustajia, joita voit hakea näkymiin tiettyjen turvatoimien noudattamiseksi.
@login_required Sisustaja
The @Sisäänkirjautuminen vaaditaan
decorator varmistaa, että vain todennetut käyttäjät voivat käyttää tiettyä näkymää. Kun todentamaton käyttäjä yrittää käyttää näkymää, sovellus ohjaa hänet kirjautumissivulle.alkaen django.contrib.auth.decorators tuonti Sisäänkirjautuminen vaaditaan
alkaen django.http tuonti HttpResponse
@Sisäänkirjautuminen vaaditaan
defturvallinen_näkymä(pyyntö):
# Näkemyslogiikkasi tässä
palata HttpResponse("Tämä on turvallinen näkymä")
Sovelletaan @Sisäänkirjautuminen vaaditaan decorator to safe_view-toiminto varmistaa automaattisesti, että käyttäjä on todennettu ennen näkymän logiikan suorittamista.
Räätälöidyt sisustajat
Django antaa sinun luoda mukautettuja sisustajia. Tämän avulla voit ottaa käyttöön lisäturvatarkastuksia tai -rajoituksia. Voit esimerkiksi luoda sisustajan, joka rajoittaa pääsyn tiettyihin käyttäjärooleihin.
alkaen toiminnalliset työkalut tuonti kääreitä
alkaen django.http tuonti HttpResponsedefadmin_only(view_func):
@wraps (view_func)
defkääre(pyyntö, *args, **kwargs):
jos request.user.is_superuser:
palata view_func (pyyntö, *args, **kwargs)
muu:
palata HttpResponse("Pääsy evätty")
palata kääre
The admin_only sisustaja tarkistaa, onko näkymää käyttävä käyttäjä pääkäyttäjä. Jos ne ovat, katselutoiminto suoritetaan, muussa tapauksessa se estää käyttäjän pääsyn.
Käyttäjän todennus ja valtuutus
Käyttäjän todennus ja valtuutus ovat tärkeitä osia Django-sovellusten suojaamisessa. Ne varmistavat, että oikea henkilö käyttää sovelluksen tiettyjä toimintoja.
Käyttäjän todennus
Käyttäjän todennus vahvistaa sovellustasi käyttävän henkilön henkilöllisyyden. Djangon todennusjärjestelmä tarjoaa toimintoja tämän käsittelemiseen.
alkaen django.contrib.auth tuonti todennus, kirjaudu sisään
alkaen django.http tuonti HttpResponsedeflogin_view(pyyntö):
jos request.method == 'LÄHETTÄÄ':
käyttäjätunnus = pyyntö. LÄHETTÄÄ['käyttäjänimi']
salasana = pyyntö. LÄHETTÄÄ['Salasana']
käyttäjä = todennus (pyyntö, käyttäjätunnus = käyttäjätunnus, salasana = salasana)
jos käyttäjä OneiEi mitään:
kirjautuminen (pyyntö, käyttäjä)
palata HttpResponse("Kirjautuminen onnistui")
muu:
palata HttpResponse("Virheelliset valtuustiedot")
muu:
# Tee kirjautumislomake
palata HttpResponse("Sisäänkirjautumislomake")
The login_view toiminto hoitaa kirjautumisprosessin. Kun käyttäjä lähettää valtuustietonsa, todennustoiminto vahvistaa ne. Jos tunnistetiedot ovat kelvollisia, kirjautumistoiminto luo käyttäjälle istunnon, jonka avulla hän voi käyttää sovelluksen rajoitettuja alueita. Jos tunnistetiedot ovat väärät, koodi ei luo istuntoa.
Käyttäjän valtuutus
Käyttäjän valtuutus määrittää, mitä toimintoja käyttäjä voi suorittaa sovelluksessa. Django tarjoaa joustavan käyttöoikeusjärjestelmän, jonka avulla voit hallita käyttäjien pääsyä.
alkaen django.contrib.auth.decorators tuonti permission_required
alkaen django.http tuonti HttpResponse
@permission_required('polls.can_vote')
defäänestys(pyyntö):
# Äänestyslogiikka tässä
palata HttpResponse("äänestys tallennettu")
Yllä olevassa esimerkissä @permission_required sisustaja varmistaa, että vain käyttäjät polls.can_vote luvalla pääsee äänestysnäkymään. Jos käyttäjä ilman tarvittavaa lupaa yrittää käyttää näkymää, häneltä evätään pääsy.
Mukautetun väliohjelmiston käyttöönotto
Middleware sijaitsee verkkopalvelimen ja näkymän välissä. Mukautetun väliohjelmiston käyttöönotto lisää turvatarkastuksia tai muokkaa pyyntöjä ja vastauksia. Tämä voi johtua syistä, kuten HTTPS: n pakottaminen.
alkaen django.http tuonti HttpResponsePermanentRedirect
luokkaaEnforceHttpsMiddleware:
def__sen sisällä__(itse, saa_vastauksen):
self.get_response = get_responsedef__puhelu__(itse, pyyntö):
josei request.is_secure():
url = request.build_absolute_uri (request.get_full_path())
turvallinen_url = url.replace(' http://', ' https://')
palata HttpResponsePermanentRedirect (secure_url)
palata self.get_response (pyyntö)
Yllä oleva väliohjelmisto tarkistaa, käyttääkö pyyntö on_secure menetelmä. Jos ei, se ohjaa osoitteeseen URL-osoitteen HTTPS-versio.
Tiedostojen käsittelyn turvaaminen
Tiedostojen käsittely on yleinen ominaisuus verkkosovelluksissa. Se aiheuttaa turvallisuusriskejä, jos sitä ei ole suojattu kunnolla. Kun käsittelet käyttäjien lataamia tiedostoja, on tärkeää tarkistaa tiedoston sisältö. Tämä estää haitalliset lataukset. Voit tarkistaa tiedostotyypit Djangon FileExtensionValidatorilla.
alkaen django.core.validators tuonti FileExtensionValidator
alkaen django.forms tuonti lomakkeita
luokkaaFileUploadForm(lomakkeet. lomake):
tiedosto = lomakkeet. FileField (validators=[FileExtensionValidator (allowed_extensions=['pdf', 'docx'])])
Yllä olevassa koodilohkossa FileUploadForm luokka käyttää FileExtensionValidator sallia vain PDF- ja DOCX-tiedostojen lataukset. Sovellus hylkää kaikki muut tiedostomuodot latauksen aikana. Mukauta sallittuja laajennuksia sovelluksesi vaatimusten mukaan.
CSRF-suojaus
Voit estää Cross-Site Request Forgery (CSRF) -hyökkäykset käyttämällä Djangon sisäänrakennettua CSRF-suojausta. Sinun tulee sisällyttää malliisi a CSRF-tunnus joka vahvistuu palvelinpuolella.
Kun käytät % csrf_token % mallitunniste, Django luo piilotetun syöttökentän CSRF-tunnuksella. Tämä tunnus on yksilöllinen jokaiselle käyttäjäistunnolle. Se auttaa vahvistamaan lähetetyn lomakkeen aitouden.
Palvelinpuoli tarkistaa CSRF-tunnuksen lomakkeen lähetystä käsitellessään. Jos tunnus puuttuu tai on virheellinen, Django herättää Kielletty (HTTP 403) -virheen. On tärkeää varmistaa, että sovelluksesi on suojattu tämän tyyppisiltä tietoturva-aukoilta.
Turvallisten lomakkeiden kirjoittaminen
Lomakkeita luotaessa on tärkeää käsitellä käyttäjän syötteitä turvallisesti. Tämä estää yleisiä haavoittuvuuksia, kuten SQL-injektio- ja XSS-hyökkäykset. Alla on esimerkki, joka näyttää kuinka voit luoda suojatun lomakkeen Djangossa.
alkaen django tuonti lomakkeita
alkaen django.utils.html tuonti paetaluokkaaSecureForm(lomakkeet. lomake):
nimi = lomakkeet. CharField (max_length=100)
sähköposti = lomakkeet. Sähköpostikenttä()defpuhdas_nimi(itse):
nimi = self.cleaned_data['nimi']# Puhdista käyttäjän syöte
desinfioitu_nimi = pako (nimi)
palata desinfioitu_nimidefpuhdas_sähköposti(itse):
sähköposti = self.cleaned_data['sähköposti']# Vahvista ja puhdista käyttäjän syöte
josei email.endswith('@esimerkki.fi'):
nostaa lomakkeita. Validation Error("Virheellinen sähköpostin verkkotunnus")
sanitized_email = pako (sähköposti)
palata desinfioitu_sähköposti
The puhdas_nimi ja puhdas_sähköposti menetelmät vahvistavat ja puhdistavat käyttäjän syötteen. The puhdas_nimi menetelmä käyttää paeta toiminto puhdistaa nimen syöttö ja estää mahdolliset XSS-hyökkäykset.
The puhdas_sähköposti menetelmä vahvistaa sähköpostin muodon ja rajoittaa sähköpostin toimialueen esimerkki.fi. Se nostaa a Validation Error jos sähköposti ei täytä määritettyjä ehtoja. Tämä toiminto parantaa lomakkeiden turvallisuutta ja suojaa niitä yleisiltä haavoittuvuuksilta.
Verkkosovellusten haavoittuvuuksien ymmärtäminen on tärkeää
Verkkosovellusten haavoittuvuuksien ymmärtäminen auttaa sinua suojaamaan sovelluksesi. Se tekee niin auttamalla sinua tunnistamaan ja korjaamaan sovelluksen mahdolliset heikkoudet. Tämä puolestaan vähentää merkittävästi onnistuneiden hyökkäysten todennäköisyyttä.