Hogyan kell helyesen használni a csrf tokeneket?

A lehallgatott forgalom miatt semmi sem segít. ott és a bejelentkezés és a jelszó zavyavyatsya. És az SSL nem segít, ha a középső ember érvényes. Használjuk az egyszeri jelszavakat. És nem érdekel, hogy az ügyfél nem lesz kényelmes (a jelző, amely minden egyes kérelmező számára eltérő, a "búcsút használhatóság", nyitotta meg a webhelyét két lapon, mindkét különböző token, melyik helyes?)

Az új kérvények létrehozása minden kéréshez hibahelyet okozhat, ha több lapon vagy az ajax-kérésekkel nyitja meg a webhelyet (amely új tokenet generál).

Ha egy támadó elhallgatja a forgalmat, akkor a CSRF nem segít, mivel minden adat elolvasható. Használja a HTTPS szolgáltatást a forgalom lehallgatásával szemben.

Egy token elegendő ahhoz, hogy egy foglalkozást kapjon. Ha a token nem egyezik meg, meg kell jelennie az "Hiba történt. Kérjük, ellenőrizze a beírt adatokat, és küldje el újra az űrlapot. "

Természetesen az üzenetet az űrlappal együtt meg kell jeleníteni a kitöltött adatokkal, és nem az üres oldalon.

Nem szükséges védeni a GET formanyomtatványokat, amelyek nem változtatnak az adatbázisban, például a keresési űrlapon.

Nézd meg, hogy ez hogyan valósul meg a keretek között. Például Symfony, YII stb.
Általában a logika a következő: a szabályozó lépéseinek ellenőrzése - ha a POST (ez azt jelenti, hogy az űrlapot mentjük), akkor ellenőrizzük a tokenet. Ha a token nem egyezik, egyszerűen nem mentjük az adatokat, de ugyanazt az űrlapot jelenítjük meg, de az "Érvénytelen token" hiba.
A tokeneket általában az adatok mentésekor formában használják. A keresőlapon nem látok okot használni.

Érzés a kurzuskeresésre nem. De az alkalmazás nagy és sokat jelent, ezért ellenőriztem a BasicController-ben, és ott, hogy megkülönböztessük a POST-keresést a többi művelettől, nem ilyen triviális feladat. Ráadásul még az "F5-átirányítás" 404-es "nem keresésére" sem tűnik jó ötletnek. Furcsa, hogy ezt a CSRF minden útmutatójában ajánlott.

> egyszerűen nem mentjük az adatokat
Nos, elvileg szinte megtettem. A BasicControllerben törölni fogom az adatokat a POST-ból, és egy üres űrlap jelenik meg. De ez valahogy nem túl szép. Azt hittem, talán van valami _right_ döntés.

Kapcsolódó cikkek