2011-03-08 25 views
7

Estoy creando una página que realiza varias publicaciones de formulario AJAX sin una actualización de página.ASP.NET MVC HTML.AntiForgeryToken() con múltiples solicitudes AJAX desde una página

Me gustaría utilizar el ayudante ASP.NET MVC HTML.AntiForgeryToken() para proteger el formulario contra los ataques CSRF. Creo que cada formulario en la página puede compartir el mismo token, pero ¿permitirá múltiples solicitudes con el mismo token? Si no, ¿hay alguna forma de obtener un nuevo token o alguna otra forma de proteger los formularios?

Respuesta

7

Puede compartir el mismo token. Por supuesto, como regla general, es muy recomendable ajustar sus llamadas Ajax en un método unificado que concatena el token CSRF a la solicitud (ya sea GET o POST aunque POST sea más seguro y mucho más correcto desde el punto de vista arquitectónico), de modo que cuando haga que las llamadas a Ajax le permitan concentrarse solamente en los valores de entrada del negocio, y no necesita preocuparse por CSRF.

Editar: Leer esta bonita muestra post & de auto-envolver Ajax para la protección CSRF usando jQuery 1.5 o superior: http://www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15

1

voy a sugerir a leer estos artículos:

http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

http://msmvps.com/blogs/luisabreu/archive/2009/02/09/the-mvc-platform-the-new-anti-forgery-token.aspx

Así que para responder a su pregunta - que dependerá de cómo lo está haciendo. Cuando usa AntiForgeryToken para incrustar el token, generará (nuevo) token en el campo oculto, así como en la cookie. Y el ataque CRSF se detecta comparándolos siempre que haya marcado su método de acción (para POST) con el atributo ValidateAntiForgeryToken. Ahora, es importante que se cree un nuevo token para cada solicitud. Por lo tanto, cuando haga publicaciones AJAX, la cookie se establecerá con un nuevo valor de token y deberá asegurarse de que la respuesta AJAX contenga un nuevo campo de token y la actualice en el lado del navegador. También le sugiero que use diferentes sales para diferentes formas para una mejor protección.

Cuestiones relacionadas