Validación Anti-Forgery Token en ASP.NET Core

Antiforgery token net core

La validación Anti-Forgery Token es una medida de seguridad fundamental en las aplicaciones web ASP.NET Core para prevenir ataques de falsificación de solicitudes entre sitios (CSRF). Este tutorial te guiará a través del uso de [ValidateAntiforgeryToken] en controladores y <AntiForgeryToken /> en vistas para proteger tu aplicación ASP.NET Core.

Qué es un ataque CSRF?

Un Ataque de Falsificación de Petición entre Sitios (CSRF por sus siglas en inglés, Cross-Site Request Forgery) es un tipo de ataque malicioso en el cual un usuario autenticado involuntariamente realiza acciones no deseadas en un sitio web en el que está autenticado. Este ataque se ejecuta aprovechando la confianza que el sitio web tiene en el navegador del usuario.

El funcionamiento básico de un ataque CSRF es el siguiente:

  1. El atacante crea una página web maliciosa que contiene una solicitud HTTP diseñada para realizar una acción específica en un sitio web objetivo donde el usuario tiene una sesión activa.
  2. El atacante engaña al usuario para que visite esta página maliciosa. Esto puede lograrse a través de técnicas como phishing, envío de enlaces maliciosos por correo electrónico o redes sociales, entre otros.
  3. Cuando el usuario visita la página maliciosa, su navegador ejecuta automáticamente las solicitudes HTTP contenidas en ella. Como el usuario está autenticado en el sitio web objetivo, el navegador incluye las cookies de autenticación en las solicitudes, lo que hace que el sitio web objetivo las interprete como solicitudes legítimas.
  4. De esta manera, el atacante puede realizar acciones no autorizadas en el sitio web objetivo en nombre del usuario, como cambiar la contraseña, realizar compras, eliminar datos, entre otras.

Para prevenir los ataques CSRF, es crucial implementar medidas de seguridad, entre las cuales se encuentra el uso de tokens de anti-falsificación de solicitudes (Anti-CSRF tokens). Estos tokens son valores únicos que se incluyen en cada formulario o solicitud HTTP y que deben ser confirmados por el servidor para validar la autenticidad de la solicitud.

En el contexto de .NET Core, las directivas [ValidateAntiForgeryToken] y <AntiForgeryToken /> son herramientas proporcionadas por el framework para ayudar a prevenir ataques CSRF. Estas se utilizan para incluir y validar tokens anti-CSRF en las solicitudes HTTP. A continuación, se proporciona un tutorial detallado sobre cómo implementar y utilizar estas medidas de seguridad en una aplicación .NET Core:

Paso 1: Configuración de Anti-Forgery Token en Startup.cs

Primero, asegúrate de que la configuración de Anti-Forgery Token esté habilitada en Program.cs.

builder.Services.AddControllersWithViews();
builder.Services.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN");

En este ejemplo, hemos configurado la cabecera personalizada X-CSRF-TOKEN. Esto puede ayudar en aplicaciones que consumen una API desde un cliente JavaScript, ya que muchos frameworks JavaScript utilizan esta cabecera para manejar tokens CSRF.

Paso 2: Añadir el Token a las Vistas

En tus vistas Razor, añade <AntiForgeryToken /> dentro de tus formularios para incluir automáticamente el token CSRF en las solicitudes POST.

<form method="post">
    @Html.AntiForgeryToken()
    <!-- Otros campos del formulario aquí -->
    <button type="submit">Enviar</button>
</form>

@Html.AntiForgeryToken() genera un campo de formulario oculto que contiene el token Anti-Forgery.

Paso 3: Validación en Controladores

En tus controladores, puedes aplicar el atributo [ValidateAntiforgeryToken] para requerir que el token Anti-Forgery esté presente en las solicitudes POST.

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult MiMetodoPost()
{
    // Lógica del controlador aquí
}

Este atributo asegura que el token Anti-Forgery sea válido antes de ejecutar el método del controlador.

Ejemplo Completo

A continuación, un ejemplo completo de una vista y un controlador que utilizan la validación Anti-Forgery Token:

Vista (Index.cshtml):

@model MiProyecto.Models.MiModelo
<form method="post">
    @Html.AntiForgeryToken()
    <input type="text" asp-for="Nombre" />
    <!-- Otros campos del formulario aquí -->
    <button type="submit">Enviar</button>
</form>
using Microsoft.AspNetCore.Mvc;
using MiProyecto.Models;

namespace MiProyecto.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Index(MiModelo modelo)
        {
            if (ModelState.IsValid)
            {
                // Lógica de manejo de datos aquí
                return RedirectToAction("Exito");
            }
            return View(modelo);
        }

        public IActionResult Exito()
        {
            return View();
        }
    }
}

Con estos pasos, has implementado correctamente la validación Anti-Forgery Token en tu aplicación ASP.NET Core, fortaleciendo su seguridad contra ataques CSRF. Recuerda siempre utilizar estas medidas de seguridad en tus aplicaciones web para proteger los datos y la privacidad de tus usuarios.

Este tutorial ha cubierto los conceptos básicos de Anti-Forgery Token en ASP.NET Core, desde su configuración hasta su uso en vistas y controladores. ¡Espero que te haya sido útil!

Te puede interesar...

Deja un comentario