Sì, questo è tutto ciò che devi fare.
Finché si genera un nuovo token in ogni pagina protetta, con <%= Html.AntiForgeryToken() %>
e sempre assicurarsi che viene controllato in ogni azione protetta, utilizzando [ValidateAntiForgeryToken]
Questo implementa il pattern Synchronizer Token come discusso nella CSRF Prevention Cheat Sheet a OWASP .
Per fare in modo che uno script riesca a fare una richiesta accettabile, dovrebbe prima ottenere il modulo e leggere il token e quindi pubblicare il token. Same Origin Policy impedirà l'accesso a un browser. Un sito canot effettua una richiesta http in stile AJAX su un altro sito; solo a se stesso. Se per qualche motivo la stessa politica di origine può essere violata, allora diventerai vulnerabile.
Si noti che se si dispone di una vulnerabilità di cross-site scripting, un utente malintenzionato può abusare della vulnerabilità xss per eludere la protezione fornita dallo stesso criterio di origine (poiché lo script è ora in esecuzione dal proprio sito, quindi SOP ha esito positivo) . Lo script iniettato può quindi leggere e inviare nuovamente il token. Questa tecnica per superare la protezione CSRF tramite XSS è stata comune in alcuni worm recentemente. Fondamentalmente, se hai XSS, la tua protezione CSRF è una perdita di tempo, quindi assicurati di non essere vulnerabile a nessuno dei due.
Un'altra cosa a cui prestare attenzione è Flash e Silverlight. Entrambe queste tecnologie non si iscrivono allo stesso criterio di origine e utilizzano invece i file di criteri di dominio incrociato per limitare l'accesso alle risorse remote. Lo script Flash/Silverlight può accedere alle risorse sul tuo sito solo se pubblichi un file xml di criteri tra domini sul tuo sito. Se pubblichi questo file, consenti sempre una whitelist di server di terze parti attendibili e non consentire mai *.
Per saperne di più CSRF at OWASP Vedi anche: XSS Prevention Cheat Sheet
Quindi, a parte la convalida del token, occorre fare attenzione con crossdomain.xml, giusto? Se riesco a verificare correttamente, l'esposizione dell'applicazione Web per le richieste di domini incrociati illimitati (allow-http-request-headers-from domain = "*" in crossdomain.xml) vanifica lo scopo di AntiForgeryTokens e rende vulnerabile il sito CSRF? – PanJanek
sì. buon punto se pubblichi un file di criteri crossdomain.xml sul tuo server puoi riaprire te stesso agli attacchi CSRF fatti tramite ActionScript in un filmato flash in remoto. Se pubblichi questo file autorizzi sempre solo la whitelist di terze parti e mai *. Lo aggiungo alla risposta – Cheekysoft
"Un sito canot effettua una richiesta http in stile AJAX su un altro sito, solo su se stesso" Come funziona Google Analytics? Penso che la politica Same-Origin abbia a che fare con l'incapacità di leggere/modificare i cookie di un altro sito. –