asp.net-mvc-3 - the required anti-forgery form field "__requestverificationtoken" is not present.
¿Cuando el uso de un AntiForgeryToken no es requerido/necesario? (1)
Los tokens anti falsificación son inútiles en las partes públicas del sitio donde los usuarios aún no están autenticados, como los formularios de inicio de sesión y registro. La forma en que funciona el ataque CSRF es la siguiente:
- Un usuario malintencionado establece un formulario HTML en su sitio que se parece a su sitio. Este formulario podría contener campos ocultos también.
- Él engaña a uno de los usuarios de su sitio para que visite su URL maliciosa.
- El usuario cree que está en su sitio, rellena el formulario y lo envía a su sitio.
- Si el usuario ya se autenticó en su sitio, el envío del formulario se realizó correctamente y el usuario confiado ha eliminado su cuenta (o lo que pueda imaginar).
Por lo tanto, podría usar tokens anti falsificación en partes autenticadas de su sitio que contengan acciones que podrían modificar de alguna manera el estado del usuario.
Nota: comprobar que el encabezado del Referer para identificar que una solicitud proviene de su sitio no es seguro. Cualquiera puede falsificar una solicitud y falsificar este encabezado.
UPD: La misma pregunta que se hace en security.stackexchange.com y la respuesta que recibí es diferente. Por favor, siga allí, para obtener la respuesta correcta!
Estoy ejecutando un sitio bastante grande con miles de visitas todos los días y una base de usuarios bastante grande.
Desde que comencé a migrar a MVC 3, he estado poniendo AntiForgeryToken en varios formularios, que modifican los datos protegidos, etc.
Algunas otras formas, como el inicio de sesión / registro también usan AntiForgeryToken ahora, pero en primer lugar me estoy volviendo dudoso de su necesidad, por un par de razones ...
- El formulario de inicio de sesión requiere que el cartel conozca las credenciales correctas. Realmente no puedo pensar en ninguna forma en que un ataque csrf se beneficiaría aquí. Especialmente si compruebo que la solicitud vino del mismo host (verificando el encabezado del Referente)
- El token AntiForgeryToken genera valores diferentes cada vez que se carga la página ... Si tengo dos pestañas abiertas con la página de inicio de sesión y luego intento publicarlas, la primera se cargará correctamente. El segundo fallará con una excepción AntiForgeryTokenException (primero cargue ambas páginas, luego intente publicarlas). Con páginas más seguras, esto es obviamente un mal necesario, con las páginas de inicio de sesión, parece una exageración, y solo es buscar problemas: S
Posiblemente haya otras razones por las cuales uno usaría / no usaría el token en sus formas ... ¿Tengo razón al suponer que usar el token en cada forma de publicación es malo / excesivo, y si es así, qué tipo de formas se beneficiarían de ello? y cuáles definitivamente NO se beneficiarían?