Schema di best practice per la sincronizzazione in background del worker di servizio con la protezione CSRF

2

Ho una richiesta che utilizza un token una tantum incorporato nella pagina per garantire la protezione CSRF - un utente malintenzionato potrebbe ingannare i miei utenti a fare una richiesta illecita, ma non può ottenere il token e anche se essi può essere cambiato con ogni richiesta e può scadere.

Finora, così sicuro.

Voglio implementare la sincronizzazione in background con un operatore del servizio, in modo che un utente possa pubblicare dati offline e quindi inviarli successivamente quando ottengono una connessione.

Tuttavia, ciò significa che la pagina non è disponibile per ottenere il token CSRF e qualsiasi token collegato con la richiesta quando l'utente lo crea potrebbe non essere valido al momento dell'invio effettivo dei dati.

Questo sembra essere un problema generale con qualsiasi sito web progressivo, qual è la migliore pratica per gestirlo?

Penso che la sincronizzazione in background possa richiedere un nuovo token, applicarlo ai dati da inviare e quindi inviarlo, e che sia ancora un loop che un utente malintenzionato di CSRF non può sfruttare, ma non lo sono certo. Qualcuno può confermare questo in entrambi i modi?

Al momento i token CRSF assicurano che la richiesta provenga da una pagina specifica, che dovrà essere modificata affinché qualsiasi processo in background funzioni. Invece ci sarà una sorta di servizio token CSRF, quindi saremo in grado di garantire che l'utente sia stato in precedenza e recentemente in grado di fare una richiesta da quel servizio. E 'ancora una protezione adeguata contro CSRF?

    
posta Keith 09.08.2016 - 08:59
fonte

1 risposta

1

I think that the background-sync could request a new token, apply it to the data to send and then send it, and that still be a loop that a CSRF attacker couldn't take advantage of, but I'm not certain of that. Can anyone confirm this either way?

Prenderò questo approccio. La Stessa politica di origine garantirà comunque che qualsiasi attaccante non possa afferrare il token CSRF.

At the moment the CRSF tokens ensure that the request has come from a specific page - that's going to have to change for any background process to work. Instead there will have to be some kind of CSRF token service, so we'll only be able to ensure that the user has previously and recently been able to make a request from that service. Is that still adequate protection against CSRF?

È sufficiente disporre di un token CSRF per sessione utente. C'è poco bisogno di andare più granulare di questo e di farlo per pagina. Finché il token è associato alla sessione e non può essere utilizzato per altre sessioni, questo attenuerebbe CSRF.

Un servizio token CSRF è una buona idea.

    
risposta data 09.08.2016 - 10:34
fonte

Leggi altre domande sui tag