Non sono uno sviluppatore .NET e sto cercando di capire esattamente come __ViewState protegge dagli attacchi CSRF / XSRF.
Mi sono imbattuto in quanto segue:
sicurezza Discussione dello scambio di stack su argomenti simili e Guida OWASP alla protezione CSRF
Sono un po 'confuso da quanto esattamente la protezione CSRF sta accadendo qui. Se osserviamo il codice riportato di seguito tratto dal collegamento OWASP sopra menzionato:
private const string AntiXsrfTokenKey = "__AntiXsrfToken";
private const string AntiXsrfUserNameKey = "__AntiXsrfUserName";
private string _antiXsrfTokenValue;
protected void Page_Init(object sender, EventArgs e)
{
// The code below helps to protect against XSRF attacks
var requestCookie = Request.Cookies[AntiXsrfTokenKey];
Guid requestCookieGuidValue;
if (requestCookie != null && Guid.TryParse(requestCookie.Value, out requestCookieGuidValue))
{
// Use the Anti-XSRF token from the cookie
_antiXsrfTokenValue = requestCookie.Value;
Page.ViewStateUserKey = _antiXsrfTokenValue;
}
else
{
// Generate a new Anti-XSRF token and save to the cookie
_antiXsrfTokenValue = Guid.NewGuid().ToString("N");
Page.ViewStateUserKey = _antiXsrfTokenValue;
var responseCookie = new HttpCookie(AntiXsrfTokenKey)
{
HttpOnly = true,
Value = _antiXsrfTokenValue
};
if (FormsAuthentication.RequireSSL && Request.IsSecureConnection)
{
responseCookie.Secure = true;
}
Response.Cookies.Set(responseCookie);
}
Page.PreLoad += master_Page_PreLoad;
}
Da quello che posso capire, il codice sopra controlla se c'è un cookie chiamato '__AntiXsrfToken', già presente.
In caso contrario, viene generato un nuovo valore casuale, assegnato a ViewStateUserKey e impostato anche come valore per il cookie, '__AntiXsrfToken'.
Se il cookie è già presente, il valore del cookie viene semplicemente preso e assegnato a ViewStateUserKey.
Ora quello che non capisco è che l'intero punto su un token antiXSRF è che non dovrebbe essere ipotizzabile e certamente non verrà passato nei cookies, perché i cookie saranno sempre inviati con ogni richiesta dal browser. Nel caso precedente, poiché il token AntiXsrf viene utilizzato come cookie, come lo protegge da esso? E quale è veramente l'uso di ViewStateUserKey e in che modo ha un ruolo nella protezione contro XSRF qui?