So che per proteggere le applicazioni Web da Cross Site Request Forgery, l'unico metodo sicuro è l'implementazione di un token CSRF. La mia domanda è, non è possibile utilizzare il token CSRF anche per tenere traccia delle sessioni? Perché dovremmo implementare un ID di sessione diverso per tracciare le sessioni?Qual è lo scopo dell'utilizzo di un ID sessione quando la protezione csrf è già stata implementata?
Qual è lo scopo dell'utilizzo di un ID sessione quando la protezione csrf è già stata implementata?
risposta
Un token CSRF è un valore che deve essere generato in modo casuale e associato a una sessione (un utente) in OGNI GET che mostra un modulo per impedire il falso POST. Questo falso POST proviene anche dal browser dell'utente, per autenticare il POST, è necessaria una sessione con il token memorizzato nella memoria del server per confrontare se il token fornito con il POST è lo stesso che è memorizzato nella sessione utente.
Inoltre, la richiesta di un'app web per identificare gli utenti in un token GET e CSRF è solo nel POST.
La sessione deve essere statica per identificare l'utente nel tempo e diverse richieste a causa della natura disconnessa di HTTP. CSRF cambia in ogni GET, non può essere usato come sessione.
Nell'altra mano. Quale server dovrebbe fare con la tua idea? Creare una nuova sessione ogni GET e copiare tutti i dati della sessione precedente nella nuova sessione? Questo è pazzesco.
Dai uno sguardo allo this pdf presso la Montana State University. Mi aiuta a capire CSRF.
- 1. Qual è lo scopo di un LoaderManager?
- 2. Qual è lo scopo di una sessione HTTP?
- 3. Qual è lo scopo di. * \\?
- 4. Qual è lo scopo di clojure.core.reducers/reduce?
- 5. Qual è lo scopo di 'var'?
- 6. Qual è lo scopo di durandal?
- 7. Cosa sta causando "Lo stato della sessione ha creato un ID di sessione, ma non è possibile salvarlo perché la risposta è già stata scaricata dall'applicazione."
- 8. Qual è lo scopo di riutilizzareIdentificatore?
- 9. Qual è lo scopo di com.sun.org.apache.xpath.internal.operations.String?
- 10. Qual è lo scopo di Ember.Container
- 11. Qual è lo scopo di HttpHeaders.TryAddWithoutValidation?
- 12. qual è lo scopo di glClear (GL_DEPTH_BUFFER_BIT)
- 13. Qual è lo scopo di "() =>"
- 14. Qual è lo scopo di Rake?
- 15. Qual è lo scopo di Array.GetLowerBound (int)?
- 16. qual è lo scopo di javax StreamSource
- 17. Qual è lo scopo del nodo jasmine?
- 18. Qual è lo scopo di UIWindow?
- 19. Qual è lo scopo di MarkDownSharp quando utilizzato con PageDown?
- 20. Qual è lo scopo di angular-sanitize?
- 21. Qual è lo scopo di @EnableTransactionManagement?
- 22. Qual è lo scopo di StreamReader quando Stream.Read() esiste?
- 23. Qual è lo scopo di IAsyncStateMachine.SetStateMachine?
- 24. Qual è lo scopo di partitioningBy
- 25. Qual è lo scopo di ldexp?
- 26. Qual è lo scopo di precompiledApp.config?
- 27. Qual è lo scopo di IntentSender?
- 28. Qual è lo scopo di requestWindowFeature()?
- 29. Qual è lo scopo dell'uso di CommandType.Tabledirect
- 30. Qual è lo scopo di Microsoft.Net.Compilers?
"** I token CSRF sono solo nel POST **" errati! Penso che la tua intera idea sui token csrf sia sbagliata. –
Quindi anche la Montana State University ha torto ... Quindi, come ti manda un token CSRF in un GET ?. Nella stringa di query? E perché vorresti farlo se in un GET non dovresti eseguire alcuna operazione che deve essere autenticata. – jlvaquero
Risposta breve: la sessione deve essere statica per identificare l'utente nel tempo. CSRF cambia in ogni GET quindi Se stai ripetendo i token CSRF per usarli come sessione, stai sbagliando. – jlvaquero