FixVibe
Covered by FixVibehigh

CSRF-suojaus: suojautuminen luvattomilta tilamuutoksilta

Cross-Site Request Forgery (CSRF) on edelleen merkittävä uhka verkkosovelluksille. Tämä tutkimus tutkii, kuinka nykyaikaiset puitteet, kuten Django, toteuttavat suojauksen ja kuinka selaintason attribuutit, kuten SameSite, tarjoavat perusteellisen suojan luvattomia pyyntöjä vastaan.

CWE-352

Vaikutus

Cross-Site Request Forgery (CSRF) sallii hyökkääjän huijata uhrin selaimen suorittamaan ei-toivottuja toimia toisella verkkosivustolla, jossa uhri on tällä hetkellä todennettu. Koska selaimet sisällyttävät pyyntöihin automaattisesti ympäristön tunnistetiedot, kuten evästeet, hyökkääjä voi väärentää tilanmuutostoimintoja – kuten salasanojen vaihtamista, tietojen poistamista tai tapahtumien aloittamista – käyttäjän tietämättä.

Perussyy

CSRF:n perussyy on verkkoselaimen oletuskäyttäytyminen, joka lähettää verkkotunnukseen liittyviä evästeitä aina, kun kyseiselle toimialueelle tehdään pyyntö, riippumatta pyynnön alkuperästä. [S1]. Ilman erityistä vahvistusta siitä, että pyyntö käynnistettiin tarkoituksella sovelluksen omasta käyttöliittymästä, palvelin ei voi erottaa laillista käyttäjän toimintaa väärennetystä.

Django CSRF -suojausmekanismit

Django tarjoaa sisäänrakennetun puolustusjärjestelmän, joka vähentää näitä riskejä väliohjelmiston ja mallien integroinnin avulla [S2].

Väliohjelmiston aktivointi

django.middleware.csrf.CsrfViewMiddleware vastaa CSRF-suojauksesta, ja se on yleensä oletuksena käytössä [S2]. Se on sijoitettava ennen kuin kaikki CSRF-hyökkäykset olettavat näkymän väliohjelmistot on jo käsitelty. [S2].

Mallin käyttöönotto

Kaikissa sisäisissä POST-lomakkeissa kehittäjien on sisällytettävä {% csrf_token %}-tunniste <form>-elementin [S2] sisään. Tämä varmistaa, että pyyntöön sisältyy ainutlaatuinen, salainen tunnus, jonka palvelin sitten tarkistaa käyttäjän istunnon suhteen.

Tokenin vuotoriskit

Tärkeä toteutusyksityiskohta on, että {% csrf_token %}-koodia ei saa koskaan sisällyttää lomakkeisiin, jotka kohdistetaan ulkoisiin URL-osoitteisiin [S2]. Jos teet niin, salainen CSRF-tunnus vuotaisi kolmannelle osapuolelle, mikä saattaa vaarantaa käyttäjän istunnon suojauksen [S2].

Selaintason puolustus: SameSite-evästeet

Nykyaikaiset selaimet ovat ottaneet käyttöön SameSite-attribuutin Set-Cookie-otsikossa, jotta [S1]-syvyys on suojattu.

  • Tiukka: Eväste lähetetään vain ensimmäisen osapuolen kontekstissa, mikä tarkoittaa, että URL-palkissa oleva sivusto vastaa evästeen verkkotunnusta [S1].
  • Lax: Evästettä ei lähetetä sivustojen välisissä alipyynnöissä (kuten kuvissa tai kehyksissä), vaan se lähetetään, kun käyttäjä siirtyy lähtösivustolle, esimerkiksi seuraamalla vakiolinkkiä [S1].

Kuinka FixVibe testaa sitä

FixVibe sisältää nyt CSRF-suojauksen portitettuna aktiivisena tarkistuksena. Verkkotunnuksen vahvistamisen jälkeen active.csrf-protection tarkistaa löydetyt tilaa muuttavat lomakkeet, tarkistaa CSRF-tunnuksen muotoiset tulot ja SameSite-evästesignaalit, yrittää sitten vähävaikutteista väärennetyn alkuperän lähetystä ja raportoi vain, kun palvelin hyväksyy sen. Evästetarkistukset ilmoittavat myös heikot SameSite-attribuutit, jotka vähentävät CSRF-suojausta.