Microsoft nos proporciona una funcionalidad incorporada que utilizamos en nuestra aplicación con fines de seguridad, para que nadie pueda piratear nuestro sitio o invadir alguna información crítica.
Uso de ValidateAntiForgeryToken
Probemos con un ejemplo simple para entender este concepto. No quiero complicarlo demasiado, por eso voy a usar una plantilla de una aplicación MVC, ya disponible en Visual Studio. Haremos esto paso a paso. Empecemos.
Paso 1: cree dos aplicaciones MVC con plantilla de Internet predeterminada y asigne esos nombres como CrossSite_RequestForgery y Attack_Application respectivamente.
Ahora, abra la configuración web de la aplicación CrossSite_RequestForgery y cambie la cadena de conexión con la que se muestra a continuación y luego guarde.
``
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
Ahora, haga clic en Herramientas >> NuGet Package Manager, luego Package Manager Console
Ahora, ejecute los tres comandos mencionados a continuación en Package Manager Console para crear la base de datos.
Enable-Migrations agregar-migración primera actualización-base de datos
Notas importantes: he creado una base de datos con el primer enfoque de código porque quiero hacer este ejemplo en la forma en que trabajan los desarrolladores. Puede crear una base de datos manualmente también. Es tu elección.
- Ahora, abra el controlador de cuenta. Aquí, verá un método de registro cuyo tipo es post. Por encima de este método, debe haber un atributo disponible como [ValidateAntiForgeryToken]. Comenta este atributo. Ahora, haga clic derecho en registrarse y haga clic en Ir a Ver. De nuevo, encontrará un ayudante html como @ Html.AntiForgeryToken (). Comenta este también. Ejecute la aplicación y haga clic en el botón de registro. La URL se abrirá como:
http: // localhost: 52269 / Cuenta / Registrarse
Notas : ahora sé que la pregunta que se plantea en la mente de todos los lectores es por qué estos dos ayudantes deben ser comentados, ya que todos saben que se usan para validar la solicitud. Entonces, solo quiero que todos sepan que esto es solo porque quiero mostrar la diferencia después y antes de aplicar estos ayudantes.
Ahora, abra la segunda aplicación que es Attack_Application. Luego, abra el método de registro del controlador de cuenta. Simplemente cambie el método POST con el simple, que se muestra a continuación.
Formulario de inscripción
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7. Ahora, suponga que es un hacker y conoce la URL desde donde puede registrar el usuario en la aplicación CrossSite_RequestForgery. Ahora, creó un sitio de falsificación como Attacker_Application y simplemente puso la misma URL en el método de publicación.
8. Ejecute esta aplicación ahora y complete los campos de registro y haga clic en registrarse. Verá que está registrado en la aplicación CrossSite_RequestForgery. Si revisa la base de datos de la aplicación CrossSite_RequestForgery, verá la entrada que ingresó.
- Importante: ahora, abra la aplicación CrossSite_RequestForgery y comente el token en el Controlador de cuenta y registre la Vista. Intente registrarse nuevamente con el mismo proceso. Entonces, se producirá un error como el siguiente.
Error del servidor en la aplicación '/'. ________________________________________ La cookie antifalsificación requerida "__RequestVerificationToken" no está presente.
Esto es lo que dice el concepto. Lo que agregamos en View, es decir, @ Html.AntiForgeryToken () genera __RequestVerificationToken en el tiempo de carga y [ValidateAntiForgeryToken] disponible en el método Controller. Haga coincidir este token en la hora de publicación. Si el token es el mismo, significa que esta es una solicitud válida.