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.
