Haluan vain varmistaa, että olen ymmärtänyt, miten ns. csrf-suojaus toteutetaan.
Käsitykseni mukaan se tehdään lyhykäisesti näin:
Luodaan eväste csrf ja asetetaan sen arvoksi satunainen merkkijono – paitsi jos eväste on jo olemassa.
Tulostetaan evästeen arvo lomakkeen piilokenttään, esimerkiksi:
<input type="hidden" name="csrf" value="YL40MivcX08pWpeM6P4E9uobE84fe2Fa">
Lomakkeen käsittelyssä tarkistetaan, että lähetetyn csrf-kentän ja evästeen arvo ovat samat.
Evästeitä nimenomaan ei saa käyttää vaan arvo säilytetään palvelimella käyttäjän sessiossa.
Csrf-suojauksen toteuttamisesta kannattaa lukea ensin ja lähteä arpomaan vasta sitten.
The Alchemist kirjoitti:
Evästeitä nimenomaan ei saa käyttää vaan arvo säilytetään palvelimella käyttäjän sessiossa.
Tokenin voi lätkäistä myös keksiin kuten HTML5 tekee.
Se mitä OWASPin sivuilla tarkoitetaan ettei "Using a Secret Cookie" toimi, niin meinaa että tokeni tulisi pelkästään keksistä (eikä sitä verrata input-kentästä tulleeseen arvoon).
Mutta jos tokeni tulee keksistä sekä input-kentästä, niin silloin noiden vertaaminen ajaa asian (ulkopuolelta et pääse victim domainin kekseihin joten vastaavaa arvoa et saa siirrettyä bogus-formin inputtiin).
Tiedän kyllä eron tuolla mainitun salaisen keksin ja tässä käytetyn keksin välillä ja siksi en linkannutkaan kyseistä varoitusta tänne. Mielessäni pyörittelin asian kuitenkin niin, ettei evästeen käyttö ole toimiva idea, mutta näköjään sille on oma kohtansa samaisessa ohjeessa, joten voinemme pitää toteutusta turvallisena.
The Alchemist kirjoitti:
Evästeitä nimenomaan ei saa käyttää vaan arvo säilytetään palvelimella käyttäjän sessiossa. – –
Esimerkiksi tällä sivustolla csrf-tunniste säilytetään evästeessä (OP-CSRF
).
timoh kirjoitti:
– – Mutta jos tokeni tulee keksistä sekä input-kentästä, niin silloin noiden vertaaminen ajaa asian (ulkopuolelta et pääse victim domainin kekseihin joten vastaavaa arvoa et saa siirrettyä bogus-formin inputtiin).
The Alchemist kirjoitti:
– – mutta näköjään sille [evästeen käytölle] on oma kohtansa samaisessa ohjeessa, joten voinemme pitää toteutusta turvallisena.
Näin ajattelinkin. Kiitos!
The Alchemist kirjoitti:
Evästeitä nimenomaan ei saa käyttää vaan arvo säilytetään palvelimella käyttäjän sessiossa.
Tietoturvan kannalta on melkein sama, onko evästeessä suoraan CSRF-arvo vai pelkästään istunnon tunniste. Kun hyökkääjä ei voi lukea evästeitä, hän ei saa hyökkäyslomakkeelleen tarvittavaa CSRF-arvoa. Jos taas hyökkääjä voi lukea evästeet, peli on joka tapauksessa menetetty. Eroa on siinä varsin teoreettisessa tilanteessa, että hyökkääjä saisi vakoiltua evästeet mutta ei HTML-koodia.
Ehkä tässä oli väärinkäsitys, jota timoh jo oikaisi: pelkkä eväste ei riitä, vaan tarvitaan sekä eväste että lomakkeen kenttä.
HTML5 kirjoitti:
Esimerkiksi tällä sivustolla – –
Ohjelmointiputkaa kannattaakin käyttää esimerkkinä, koska se on aina täydellinen!
Aihe on jo aika vanha, joten et voi enää vastata siihen.