FixVibe
Covered by FixVibehigh

Zaščita CSRF: obramba pred nepooblaščenimi spremembami stanja

Ponarejanje zahtev med spletnimi mesti (CSRF) ostaja pomembna grožnja spletnim aplikacijam. Ta raziskava raziskuje, kako sodobni okviri, kot je Django, izvajajo zaščito in kako atributi na ravni brskalnika, kot je SameSite, zagotavljajo poglobljeno obrambo pred nepooblaščenimi zahtevami.

CWE-352

Vpliv

Cross-Site Request Forgery (CSRF) omogoča napadalcu, da pretenta brskalnik žrtve, da izvede neželena dejanja na drugem spletnem mestu, kjer je žrtev trenutno overjena. Ker brskalniki v zahteve samodejno vključijo ambientalne poverilnice, kot so piškotki, lahko napadalec ponareja operacije spreminjanja stanja – kot je spreminjanje gesel, brisanje podatkov ali sprožitev transakcij – brez vednosti uporabnika.

Temeljni vzrok

Temeljni vzrok za CSRF je privzeto vedenje spletnega brskalnika, ki pošilja piškotke, povezane z domeno, kadar koli je v to domeno poslana zahteva, ne glede na izvor zahteve [S1]. Brez posebne potrditve, da je bila zahteva namerno sprožena iz lastnega uporabniškega vmesnika aplikacije, strežnik ne more razlikovati med zakonitim dejanjem uporabnika in ponarejenim.

Zaščitni mehanizmi Django CSRF

Django ponuja vgrajen obrambni sistem za ublažitev teh tveganj prek integracije vmesne programske opreme in predloge [S2].

Aktivacija vmesne programske opreme

django.middleware.csrf.CsrfViewMiddleware je odgovoren za zaščito CSRF in je običajno privzeto omogočen [S2]. Postavljen mora biti pred vmesno programsko opremo pogleda, ki predvideva, da so bili napadi CSRF že obravnavani [S2].

Implementacija predloge

Za vse interne obrazce POST morajo razvijalci vključiti oznako {% csrf_token %} znotraj elementa <form> [S2]. To zagotavlja, da je v zahtevo vključen edinstven, skrivni žeton, ki ga strežnik nato preveri glede na uporabnikovo sejo.

Tveganja uhajanja žetonov

Bistvena podrobnost izvedbe je, da {% csrf_token %} nikoli ne sme biti vključen v obrazce, ki ciljajo na zunanje URL-je [S2]. S tem bi skrivni žeton CSRF odšel tretji osebi, kar bi lahko ogrozilo varnost uporabnikove seje [S2].

Zaščita na ravni brskalnika: piškotki SameSite

Sodobni brskalniki so uvedli atribut SameSite za glavo Set-Cookie, da zagotovijo plast poglobljene obrambe [S1].

  • Strogo: Piškotek je poslan samo v kontekstu prve osebe, kar pomeni, da se spletno mesto v vrstici URL ujema z domeno piškotka [S1].
  • Ohlapno: Piškotek se ne pošlje na podzahteve med spletnimi mesti (kot so slike ali okvirji), ampak se pošlje, ko uporabnik obišče izvorno spletno mesto, na primer tako, da sledi standardni povezavi [S1].

Kako ga FixVibe testira

FixVibe zdaj vključuje zaščito CSRF kot zaprto aktivno preverjanje. Po preverjanju domene active.csrf-protection pregleda odkrite obrazce, ki spreminjajo stanje, preveri vnose v obliki žetonov CSRF in signale piškotkov SameSite, nato poskusi predložitev ponarejenega izvora z majhnim vplivom in poroča šele, ko jo strežnik sprejme. Preverjanje piškotkov prav tako označi šibke atribute SameSite, ki zmanjšujejo poglobljeno obrambo CSRF.