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.
