OAuth2 og OpenID Connect i dybden · leksjon

State-parameteren og CSRF

Forstå hvordan «state»-parameteren reduserer risikoen for Cross-Site Request Forgery-angrep (CSRF) i OAuth2-flyter.

Leksjon 2 av 411 trinn

State-parameteren og CSRF er en gratis leksjon i OAuth2 og OpenID Connect i dybden på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i OAuth2 og OpenID Connect i dybden, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i OAuth2 og OpenID Connect i dybden inneholder totalt 4 leksjoner.

Forstå CSRF-angrep

Har du hørt om Cross-Site Request Forgery (CSRF)? Det er en type angrep der en angriper lurer nettleseren til en bruker til å utføre en uønsket handling på et pålitelig nettsted der brukeren allerede er autentisert.

Se for deg at noen forfalsker underskriften din på et dokument du ikke hadde tenkt å signere, ved å utnytte tilliten du allerede har hos mottakeren.

CSRF-trusselen mot OAuth2

I OAuth2 kan et CSRF-angrep være farlig. En angriper kan lure en bruker til å klikke på en ondsinnet lenke som starter en OAuth2-flyt til en applikasjon angriperen kontrollerer.

Hvis brukeren er logget inn på autorisasjonsserveren og gir tilgang, kan autorisasjonskoden bli sendt til angriperens klient i stedet for den legitime klienten. Dette kan kompromittere brukerens data.

Parameteren 'state' til unnsetning

For å motvirke CSRF i OAuth2 bruker vi parameteren state. Det er en ugjennomsiktig verdi som klientapplikasjonen genererer og sender sammen med autorisasjonsforespørselen.

Autorisasjonsserveren returnerer deretter nøyaktig den samme state-verdien når brukeren omdirigeres tilbake til klienten. Dermed kan klienten kontrollere at forespørselen er autentisk.

Klienten oppretter en unik 'state'

Klientapplikasjonen har ansvar for å generere en unik og uforutsigbar state-verdi for hver autorisasjonsforespørsel. Verdien bør være kryptografisk sterk og lagres sikkert i brukerens økt (for eksempel i en cookie) på klientsiden.

La oss se på en enkel måte å generere en slik streng på i Java:

import java.security.SecureRandom;
import java.util.Base64;

public class StateGenerator {
  public static void main(String[] args) {
    SecureRandom random = new SecureRandom();
    byte[] bytes = new byte[32]; // 32 bytes = 256 bits
    random.nextBytes(bytes);
    String state = Base64.getUrlEncoder()
                         .withoutPadding()
                         .encodeToString(bytes);
    System.out.println("Generated state: " + state);
  }
}

Sende 'state' i forespørselen

Når klientapplikasjonen omdirigerer brukeren til autorisasjonsserveren for å starte OAuth2-flyten, inkluderer den den genererte state-parameteren i URL-en. Slik «husker» autorisasjonsserveren tilstanden.

GET /authorize?
  response_type=code&
  client_id=myclientid&
  redirect_uri=https://client.com/callback&
  scope=profile&
  state=YOUR_UNIQUE_STATE_HERE

Autorisasjonsserveren gjentar 'state'

Etter at brukeren har autentisert seg og gitt tillatelse hos autorisasjonsserveren, omdirigerer serveren brukeren tilbake til klientens registrerte redirect_uri.

Det er avgjørende at denne omdirigeringen inkluderer nøyaktig den samme state-parameteren som klienten sendte opprinnelig.

GET https://client.com/callback?
  code=AUTHORIZATION_CODE&
  state=YOUR_UNIQUE_STATE_HERE

Bekrefte parameteren 'state'

Når klientapplikasjonen mottar omdirigeringen fra autorisasjonsserveren, utfører den en viktig kontroll:

  • Den henter state-verdien fra den innkommende URL-en.
  • Den sammenligner denne verdien med state-verdien den opprinnelig genererte og lagret i brukerens økt.

Hvis verdiene ikke samsvarer, *må* klienten avvise forespørselen.

Parameteren 'state' i praksis

Hvordan forhindrer dette CSRF? Hvis en angriper prøver å lure en bruker, kjenner angriperen ikke den legitime state-verdien som er lagret i brukerens økt på klientsiden.

Når den forfalskede forespørselen kommer tilbake til klienten, samsvarer ikke state-parameteren i URL-en med den klienten forventer. Klienten avviser dermed forespørselen og avverger angrepet.

Beste praksis for parameteren 'state'

Følg disse anbefalingene for å maksimere effekten av state-parameteren:

  • Unikhet: Generer alltid en ny, tilfeldig state for hver autorisasjonsforespørsel.
  • Lagring: Lagre den sikkert, vanligvis i en økt-cookie som er knyttet til brukerens nettleserøkt.
  • Utløp: Implementer kort utløpstid for state for å forhindre replay-angrep.
  • Kryptografisk styrke: Bruk en kryptografisk sikker generator for tilfeldige tall for å sikre at verdien ikke kan forutsies.

Hurtigsjekk: 'state'-parameter

Repeter det du har lært om state-parameteren i OAuth2.

Oppsummering: Sikring med 'state'

Vi har lært at state-parameteren er en viktig sikkerhetsfunksjon i OAuth2. Den er en unik, tilfeldig verdi som genereres av klienten, sendes til autorisasjonsserveren og deretter gjentas tilbake til klienten.

Ved å validere denne parameteren kan klienten bekrefte at den innkommende forespørselen er autentisk. Dette beskytter effektivt mot CSRF-angrep og sikrer en trygg autorisasjonsflyt.

Gratis å komme i gang

Lær deg OAuth2 og OpenID Connect i dybden med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «State-parameteren og CSRF» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien OAuth2 og OpenID Connect i dybden, inkludert «State-parameteren og CSRF», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i OAuth2 og OpenID Connect i dybden inneholder totalt 4 leksjoner.

Hva lærer jeg i «State-parameteren og CSRF»?

Forstå hvordan «state»-parameteren reduserer risikoen for Cross-Site Request Forgery-angrep (CSRF) i OAuth2-flyter. Du øver på OAuth2 og OpenID Connect i dybden med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med OAuth2 og OpenID Connect i dybden?

Ingen tidligere erfaring er nødvendig. OAuth2 og OpenID Connect i dybden på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «State-parameteren og CSRF»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne OAuth2 og OpenID Connect i dybden-leksjonen?

Ja. Alle OAuth2 og OpenID Connect i dybden-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Tokensikkerhet (access/refresh)
  2. State-parameteren og CSRF
  3. Beste praksis for grant-typer
  4. Sikring av omdirigerings-URI-er
← Tilbake til OAuth2 og OpenID Connect i dybden