Mi chiedo come controlla ASP.NET se un token anti-contraffazione è valido o no? Ti piace dove ASP.NET sta memorizzando quei token? E come vengono memorizzati?in che modo ASP.NET convalida il token anti-contraffazione
risposta
La versione breve è che un token generato viene memorizzato in 2 posizioni: (a) cookie (b) valore del modulo nascosto. Quando il modulo viene inviato, questi 2 valori vengono confrontati l'uno con l'altro per determinare se sono validi. Per ulteriori approfondimenti:
http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks http://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals
Una spiegazione graduale che è più chiara di quanto la risposta imho accettato (da https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks)
- il client richiede una pagina HTML che contiene un modulo.
- Il server include due token nella risposta. Un token viene inviato come cookie. L'altro è inserito in un campo modulo nascosto. I token vengono generati casualmente in modo che un avversario non possa indovinare i valori.
- Quando il client invia il modulo, deve inviare entrambi i token al server. Il client invia il token cookie come cookie e invia il token del modulo all'interno dei dati del modulo. (Un client browser lo fa automaticamente quando l'utente invia il modulo.)
- Se una richiesta non include entrambi i token, il server non consente la richiesta.
La descrizione di cui sopra non tutto è ciò che viene fatto, in caso di AjaxRequest del antiforgery, in particolare in richieste GET, di solito non inviare il modulo con il valore nascosto per il confronto, invece sarà necessario impostare un valore di intestazione con lo stesso contenuto del cookie tramite javascript .. il nome dell'intestazione che dovresti impostare è di default X-XRF-Token header [related to angularjs] ... ovviamente dovrai disabilitare CORS o abilitarlo solo per domini specifici per proteggere le API, è necessario impostare SAMEORIGIN per evitare il clickjacking.
In realtà vengono generati due token. Non solo uno che è memorizzato in due punti. –