Cum să utilizați corect jetoanele csrf

Cu traficul interceptat, nimic nu te va ajuta. acolo și parola și parola sunt zavyavyatsya. Și SSL nu ajută dacă se aplică omul în mijloc. Să folosim atunci parole unice. Și nu-mi pasă că clientul nu va fi convenabil (tokenul care pentru fiecare solicitant este diferit este "utilitatea la revedere", a deschis site-ul dvs. în două file, pe ambele jetoane diferite, care este corect?)







Generarea unui nou jeton pentru fiecare solicitare poate duce la erori la deschiderea site-ului în mai multe file sau cu solicitări ajax (care vor genera un nou jeton).

Dacă un atacator interceptează traficul, CSRF nu ajută, deoarece toate datele pot fi citite. Utilizați HTTPS pentru a proteja împotriva interceptării traficului.

Un jeton este suficient pentru a avea unul pe sesiune. Dacă tokenul nu se potrivește, ar trebui să afișați mesajul "A apărut o eroare. Verificați datele introduse și trimiteți din nou formularul. "







Firește, mesajul trebuie afișat împreună cu formularul cu datele completate, și nu pe pagina goală.

Formularele GET care nu fac modificări în baza de date, cum ar fi formularul de căutare, nu trebuie protejate.

Uită-te la modul în care acest lucru este implementat în cadre. De exemplu, Symfony, YII, etc.
De obicei, logica este după cum urmează: în acțiunea controlerului cu formularul verificăm - dacă POST (înseamnă că forma este salvată), atunci verificăm jetonul. Dacă tokenul nu se potrivește, pur și simplu nu salvăm datele, dar afișăm același formular, dar cu eroarea "Invalid Token".
Iar jetoanele sunt de obicei utilizate în forme atunci când se salvează date. Pentru formularul de căutare nu văd nici un motiv să le folosesc.

Sentiment pentru căutarea, desigur, nu. Dar aplicația este mare și se formează foarte mult, așa că am făcut o verificare în BasicController și acolo pentru a distinge căutarea POST de alte acțiuni nu este o sarcină atât de banală. În plus, chiar și pentru "nu căutăm" redirecționarea F5 la 404 nu mi se pare o idee bună. Este ciudat că acest lucru este recomandat în toate ghidurile pentru CSRF.

> pur și simplu nu salvăm date
În principiu, aproape că am făcut-o. În BasicController, șterg datele din POST și se afișează un formular gol. Dar într-un fel nu este foarte frumos. M-am gândit că a existat o anumită decizie.







Articole similare

Trimiteți-le prietenilor: