FixVibe
Covered by FixVibehigh

CSRF-beskyttelse: Forsvar mod uautoriserede tilstandsændringer

Cross-Site Request Forgery (CSRF) er fortsat en væsentlig trussel mod webapplikationer. Denne forskning undersøger, hvordan moderne rammer som Django implementerer beskyttelse, og hvordan attributter på browserniveau som SameSite giver et dybtgående forsvar mod uautoriserede anmodninger.

CWE-352

Indvirkning

Cross-Site Request Forgery (CSRF) giver en hacker mulighed for at narre et offers browser til at udføre uønskede handlinger på et andet websted, hvor offeret i øjeblikket er godkendt. Fordi browsere automatisk inkluderer omgivende legitimationsoplysninger som cookies i anmodninger, kan en hacker forfalske tilstandsændrende operationer – såsom at ændre adgangskoder, slette data eller starte transaktioner – uden brugerens viden.

Grundårsag

Den grundlæggende årsag til CSRF er webbrowserens standardadfærd med at sende cookies tilknyttet et domæne, når der sendes en anmodning til det pågældende domæne, uanset anmodningens oprindelse [S1]. Uden specifik validering af, at en anmodning med vilje blev udløst fra applikationens egen brugergrænseflade, kan serveren ikke skelne mellem en legitim brugerhandling og en forfalsket handling.

Django CSRF beskyttelsesmekanismer

Django leverer et indbygget forsvarssystem til at afbøde disse risici gennem middleware og skabelonintegration [S2].

Middleware-aktivering

django.middleware.csrf.CsrfViewMiddleware er ansvarlig for CSRF-beskyttelse og er typisk aktiveret som standard [S2]. Den skal placeres før enhver view-middleware, der antager, at CSRF-angreb allerede er blevet håndteret [S2].

Skabelonimplementering

For alle interne POST-formularer skal udviklere inkludere {% csrf_token %}-tagget inde i <form>-elementet [S2]. Dette sikrer, at et unikt, hemmeligt token er inkluderet i anmodningen, som serveren derefter validerer mod brugerens session.

Token-lækagerisici

En kritisk implementeringsdetalje er, at {% csrf_token %} aldrig bør inkluderes i formularer, der er målrettet mod eksterne URL'er [S2]. Hvis du gør det, ville det lække det hemmelige CSRF-token til en tredjepart, hvilket potentielt kompromittere brugerens sessionssikkerhed [S2].

Forsvar på browserniveau: SameSite-cookies

Moderne browsere har introduceret SameSite-attributten til Set-Cookie-headeren for at give et lag af forsvars-i-dybde [S1].

  • Streng: Cookien sendes kun i en førstepartskontekst, hvilket betyder, at webstedet i URL-linjen matcher cookiens domæne [S1].
  • Laks: Cookien sendes ikke på underanmodninger på tværs af websteder (såsom billeder eller rammer), men sendes, når en bruger navigerer til oprindelseswebstedet, såsom ved at følge et standardlink [S1].

Hvordan FixVibe tester for det

FixVibe inkluderer nu CSRF-beskyttelse som en gated aktiv kontrol. Efter domænebekræftelse inspicerer active.csrf-protection opdagede tilstandsændrende formularer, kontrollerer for CSRF-token-formede input og SameSite-cookie-signaler og forsøger derefter en lav-impact indsendelse af forfalsket oprindelse og rapporterer kun, når serveren accepterer det. Cookietjek markerer også svage SameSite-attributter, der reducerer CSRF-forsvar i dybden.