State-parameteren og CSRF
Forstå hvordan «state»-parameteren reduserer risikoen for Cross-Site Request Forgery-angrep (CSRF) i OAuth2-flyter.
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_HEREAutorisasjonsserveren 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_HEREBekrefte 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.
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
- Tokensikkerhet (access/refresh)
- State-parameteren og CSRF
- Beste praksis for grant-typer
- Sikring av omdirigerings-URI-er