React Academy · Oppitunti

CSRF-suojaus Reactissa ja API-asetuksissa

Toteuta SameSite-evästeet, CSRF-tunnisteet ja kaksoislähetysevästemallit React-SPA- ja SSR-asetuksissa.

Oppitunti 2/413 vaihetta

CSRF-suojaus Reactissa ja API-asetuksissa on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä CSRF on

Cross-Site Request Forgery (CSRF) on hyökkäys, jossa haitallinen verkkosivusto huijaa käyttäjän selaimen lähettämään todennetun pyynnön API:lle. Koska selain liittää evästeet automaattisesti pyyntöihin, palvelin ei pysty erottamaan sovelluksen tekemää aitoa pyyntöä hyökkääjän sivustolta tulevasta väärennetystä pyynnöstä.

Miksi evästeet mahdollistavat CSRF:n

Evästeet ovat CSRF-haavoittuvuuden perimmäinen syy. Kun käyttäjä on kirjautunut sovellukseen, hänen istuntoevästeensä on tallennettu selaimeen. Kun hän vierailee hyökkääjän sivulla, hyökkääjä voi käynnistää lomakkeen lähetyksen tai fetch-pyynnön API:lle, ja selain liittää istuntoevästeen automaattisesti mukaan — näin haitallinen pyyntö autentikoituu.

SameSite-evästeattribuutti

Evästeen SameSite-attribuutti kertoo selaimille, milloin evästeet liitetään sivustojen välisiin pyyntöihin. Sillä on kolme arvoa: Lax (nykyaikaisten selainten oletusarvo — estää sivustojen väliset POST-pyynnöt mutta sallii GET-pyynnöt), Strict (estää kaikki sivustojen väliset pyynnöt, myös GET-siirtymät) ja None (sallii sivustojen väliset pyynnöt, mutta edellyttää HTTPS- ja Secure-määritystä).

SameSite=Lax ja turvalliset API:t

SameSite=Lax estää sivustojen väliset POST-, PUT-, DELETE- ja PATCH-pyynnöt — eli mutaatioihin käytetyt menetelmät. Jos API käyttää GET-pyyntöjä vain lukemiseen ja POST-pyyntöjä kaikkiin mutaatioihin, SameSite=Lax estää CSRF:n käytännössä kokonaan modernien selainten SPA-sovelluksissa. Tämä on perustason lievennys, johon useimmat sovellukset nykyään luottavat.

Double Submit Cookie -malli

Double Submit Cookie -malli on CSRF:n torjuntamenetelmä, jossa palvelin asettaa satunnaisen CSRF-tokenin evästeeseen, jota HttpOnly ei suojaa. Asiakas lukee evästeen arvon ja lisää sen mukautettuun pyyntöotsakkeeseen, esimerkiksi X-CSRF-Token. Palvelin tarkistaa, että otsakkeen arvo vastaa evästeen arvoa. Hyökkääjä ei voi lukea evästettä eri originista, joten hän ei voi asettaa oikeaa otsaketta.

Synchronizer Token Pattern -malli

Synchronizer Token Pattern -malli luo palvelimella jokaiselle käyttäjän istunnolle yksilöllisen CSRF-tokenin. HTML-lomakkeissa token upotetaan piilotettuun kenttään. SPA-sovellusten API-kutsuissa token annetaan päätepisteen tai meta-tagin kautta ja lähetetään mukautetussa otsakkeessa. Palvelin vahvistaa tokenin jokaisen tilaa muuttavan pyynnön yhteydessä.

JWT Authorization-otsakkeessa: ei altis CSRF:lle

React-SPA, joka tallentaa JWT:nsä muistiin tai localStorage-tallennustilaan ja lähettää sen Authorization: Bearer -otsakkeessa, ei ole altis perinteiselle CSRF:lle. CSRF-hyökkäykset hyödyntävät evästepohjaista autentikointia — hyökkääjän sivu ei voi CORS-rajoitusten vuoksi asettaa mukautettuja otsakkeita sivustojen välisiin pyyntöihin, joten se ei voi väärentää Authorization-otsaketta.

Mukautetut pyyntöotsakkeet CSRF:n torjuntana

Yksinkertaiset sivustojen väliset pyynnöt (lomakkeen POST-lähetys ja kuvan lataus) eivät salli mukautettuja otsakkeita. Vain CORS-esitarkistuksen läpikäyvät pyynnöt voivat sisältää mukautettuja otsakkeita — ja esitarkistetut pyynnöt edellyttävät palvelimelta nimenomaista lupaa. API, joka edellyttää kaikissa mutaatioissa mukautettua otsaketta, kuten X-Requested-With: XMLHttpRequest, on luonnostaan suojattu yksinkertaisilta CSRF-hyökkäyksiltä.

CORS ja CSRF ovat eri asioita

CORS määrittää, mitkä origin-osoitteet voivat lukea vastauksen eri originista tehtyyn pyyntöön. CSRF puolestaan koskee sitä, mitkä origin-osoitteet voivat tehdä tilaa muuttavia pyyntöjä. Originien rajoittaminen CORS-asetuksilla ei estä CSRF:ää — selain lähettää edelleen pyynnön ja evästeen, ja CORS määrittää vain, voiko JavaScript nähdä vastauksen. CSRF-hyökkäys ei tarvitse vastauksen lukemista.

Istuntoevästeiden parhaat käytännöt

Määrittäkää istuntoevästeet seuraavasti: HttpOnly: true (estää JavaScriptiä lukemasta evästettä ja torjuu XSS-pohjaisen tunnisteiden varastamisen), Secure: true (eväste lähetetään vain HTTPS-yhteyden kautta), SameSite: Lax tai Strict (estää CSRF:n) sekä asianmukainen Max-Age tai vanhenemisaika. Nämä neljä attribuuttia yhdessä vahvistavat istuntojen hallinnan turvallisuutta merkittävästi.

CSRF Next.js App Routerissa

Next.js App Router käyttää Server Actions -toimintoja, jotka ovat POST-pyyntöjä. Next.js toteuttaa CSRF-suojauksen tarkistamalla Origin-otsakkeen suhteessa hostiin — odottamattomista origineista tulevat pyynnöt hylätään. Tämä sisäänrakennettu tarkistus yhdessä SameSite=Lax -istuntoevästeiden kanssa tarjoaa vankan CSRF-suojauksen Server Action -pohjaisille muutoksille.

SameSite-evästeen attribuutti

Mikä SameSite-evästeen arvo estää sivustojen väliset POST-pyynnöt mutta sallii sivustojen väliset GET-navigoinnit?

Oppitunnin kertaus

CSRF hyödyntää evästepohjaista tunnistautumista huijaamalla selaimen lähettämään todennettuja pyyntöjä sivustojen välillä. SameSite=Lax on nykyaikaisten selainten perustason suojaus. Double Submit Cookie- ja Synchronizer Token -mallit tarjoavat lisäsuojan. JWT:tä Authorization-otsakkeissa käyttävät React-SPA:t ovat luonnostaan vastustuskykyisiä CSRF:lle. Mukautetut pakolliset otsakkeet ja CORS-esilennätys lieventävät myös CSRF-riskiä. Yhdistä istuntoevästeissä aina HttpOnly + Secure + SameSite.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”CSRF-suojaus Reactissa ja API-asetuksissa” ilmainen?

Kyllä – oppitunnin ”CSRF-suojaus Reactissa ja API-asetuksissa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”CSRF-suojaus Reactissa ja API-asetuksissa”?

Toteuta SameSite-evästeet, CSRF-tunnisteet ja kaksoislähetysevästemallit React-SPA- ja SSR-asetuksissa. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”CSRF-suojaus Reactissa ja API-asetuksissa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. XSS Reactissa: dangerouslySetInnerHTML ja kolmannen osapuolen skriptit
  2. CSRF-suojaus Reactissa ja API-asetuksissa
  3. Content Security Policy React-sovelluksille
  4. Salaisuuksien hallinta ja ympäristömuuttujat
← Takaisin: React Academy