ViewState ASP.NET impedisce implicitamente gli attacchi CSRF? Cosa significa questo per MVC?

13

Se un ASP.NET Viewstate crittografato viene inviato con ogni modulo e controlla POST, significa che ASP.NET è meno vulnerabile a CSRF rispetto ad altre soluzioni con questo?

Qual è l'estensione e la limitazione di tale protezione?

Dato che AntiForgeryToken non è implementato per impostazione predefinita in ASP.NET MVC significa che tali siti potrebbero essere più a rischio?

    
posta random65537 08.11.2011 - 08:23
fonte

2 risposte

16

Lo scopo di ASP.NET ViewState è di mantenere lo stato di controllo tra postback (vedere spiegazione MDSN ), non abilita implicitamente la sicurezza che impedirebbe CSRF.

Si noti inoltre che ViewState crittografato in versioni precedenti di ASP.NET prive di patch è suscettibile a una vulnerabilità di crittografia .

Per abilitare questo tipo di protezione puoi:

ASP.NET MVC3 ha un token anti-contraffazione che viene utilizzato con l'attributo [ValidateAntiForgeryToken] sull'azione del controller (vedere link ). Nel tag modulo della vista chiama l'helper Html.AntiForgeryToken (vedi link ) con la seguente sintassi:

Web Form:

<%= Html.AntiForgeryToken() %>

Razor:

@Html.AntiForgeryToken()
    
risposta data 08.11.2011 - 10:25
fonte
7

È difficile eseguire un attacco CSRF di successo su un'applicazione utilizzando viewstate ma non impossibile. Un modo per eseguire un attacco CSRF succcessivo su un'applicazione con _viewstate è

  1. L'attaccante è in grado di accedere all'applicazione (utilizzando credenziali proprie o acquisite)
  2. Visita la pagina (con gli stati delle variabili più comuni o più utili) rispetto ai quali desidera creare un attacco CSRF per
  3. Copia il _Viewstate
  4. Inserisci questo _viewstate nella sua pagina di attacco
  5. Invia la pagina di attacco alla vittima
  6. Con un po 'di fortuna e indovinando l'attacco potrebbe funzionare

Una soluzione a questo è stata introdotta in 1.1. Invece di usare solo _viewstate puoi usare ViewStateUser-Key. Questo utilizza la chiave di sessione use per creare il token di stato che sarà davvero difficile da indovinare o copiare dall'attaccante.

Suggerirei comunque di implementare un meccanismo di token Indipendent CSRF per la protezione contro CSRF nella tua applicazione (so che molti saranno diversi su questo)

    
risposta data 08.11.2011 - 09:41
fonte

Leggi altre domande sui tag