In asp.net sto implementando un IHttpModule per mitigare gli attacchi CSRF. Inietta nella risposta html un parametro di modulo nascosto con asp.net SessionID su GETs. Sui POST verifica quindi che il valore del parametro nascosto corrisponda al SessionID corrente. Per quanto ne so, l'unico modo per ottenere il valore SessionID proviene dal cookie, che non può essere letto o determinato dal sito dannoso. C'è qualcosa che sto trascurando?Token di convalida CSRF: ID di sessione sicuro?
risposta
questo approccio è corretto. Devi assicurarti che tutte le azioni disponibili tramite un'operazione GET siano "sicure" (che è comunque la migliore pratica), dal momento che stai applicando la tua protezione XSRF solo ai POST.
Per un'assicurazione aggiuntiva, è possibile utilizzarlo anche su GET (aggiungendo un parametro URL a tutti i collegamenti e verificandolo in ogni richiesta GET), ma è ingombrante.
Se sei un paranoico in più, puoi scegliere un numero casuale diverso per l'ID alternativo. Questo ti proteggerà anche se un browser rende erroneamente il tuo cookie di sessione accessibile ad alcuni Javascript ostili su un altro sito. Quando viene creata una sessione, scegli un altro grande numero casuale e memorizzalo nella sessione.
Idealmente si vorrebbe usare qualcosa di diverso dall'ID di sessione, ma in fondo è tutto. OWASP suggerisce di utilizzare un nome di elemento di forma casuale che viene archiviato nella sessione dell'utente. In questo modo un attaccante non sarebbe nemmeno in grado di forgiare il campo nascosto corretto.
Randomizzare il nome dell'elemento del modulo è un'idea interessante. Grazie per il link. – ironsam
- 1. Generazione di token CSRF
- 2. È un modo sicuro per impostare il token CSRF?
- 3. Convalida dei token ID Google in C#
- 4. Convalida il token ID JWT di OpenID Connect di Google
- 5. Token CSRF: come implementare correttamente?
- 6. Come disabilitare la convalida CSRF di Django?
- 7. Token CSRF Flask-Security
- 8. token csrf utilizzando
- 9. Token CSRF Laravel
- 10. Rails Token CSRF - Scadono?
- 11. Interceptor token Struts2: protezione CSRF
- 12. token CSRF di laravel e il bilanciamento
- 13. Token CSRF di Django senza moduli
- 14. Disabilita token CSRF sul modulo di login
- 15. Quanto deve durare la durata di un token CSRF?
- 16. ID sessione di rigenerazione
- 17. Perché il token CSRF di Laravel 4 non funziona?
- 18. Qual è lo scopo dell'utilizzo di un ID sessione quando la protezione csrf è già stata implementata?
- 19. Token CSRF mancante o errato
- 20. Django controlla token CSRF manualmente
- 21. Jquery e Django CSRF Token
- 22. sicurezza token di sessione parse.com
- 23. Cookie di sessione sicuro Expressj
- 24. Come si usa il token pattern di sincronizzazione per prevenire CSRF sicuro?
- 25. Va bene usare il cookie di sessione (crittograficamente valido) come token CSRF?
- 26. ID token di Paypal Unico?
- 27. Gemma Paperclip che attiva problemi di verifica del token CSRF
- 28. Passando token CSRF di reagire/FLUX dal nodo
- 29. Convalida del token di accesso con at_hash
- 30. Convalida di un ID Salesforce
Probabilmente non mi preoccuperò dei GET per ora, dal momento che non è valido (ma ovviamente possibile) che http cambi stato con loro. Finché manteniamo quella convenzione/standard, dovremmo stare bene. Potrei cercare di usare un valore diverso da SessionID per una maggiore sicurezza come hai detto tu - grazie. – ironsam