# Introducción

Laravel facilita la protección de su solicitud contra los ataques de cross-site request forgery (CSRF). Las falsificaciones de solicitudes en sitios cruzados son un tipo de explotación maliciosa en la que se realizan comandos no autorizados en nombre de un usuario autenticado.

Laravel genera automáticamente un "token" CSRF para cada sesión de usuario activo gestionado por la aplicación. Este token se utiliza para verificar que el usuario autentificado es el que realmente hace las solicitudes a la aplicación.

Cada vez que defina un formulario HTML en su aplicación, debe incluir un campo token CSRF oculto en el formulario para que el middleware de protección CSRF pueda validar la solicitud. Puede utilizar la directiva Blade @csrf para generar el campo token:

<form method="POST" action="/profile">
    @csrf
    ...
</form>

El middleware VerifyCsrfToken el cuál está incluído en el grupo de middlewares web, automaticamente verificará que la prueba en la petición de entrada concuerda con la almacenada en la sesión.

CSRF Tokens & JavaScript

Cuando se construyen aplicaciones impulsadas por JavaScript, es conveniente que su biblioteca de JavaScript HTTP adjunte automáticamente el token CSRF a cada solicitud saliente. De manera predeterminada, la biblioteca Axios HTTP provista en el archivo resources/js/bootstrap.js envía automáticamente un encabezado X-XSRF-TOKEN utilizando el valor de la cookie XSRF-TOKEN cifrada. Si no estás usando esta biblioteca, tendrás que configurar manualmente este comportamiento para tu aplicación.

# Excluir URIs de la Protección CSRF

A veces se puede desear excluir un conjunto de URI de la protección del CSRF. Por ejemplo, si está usando Stripe para procesar pagos y está utilizando su sistema de webhook, necesitará excluir su ruta de manejo de webhook de Stripe de la protección del CSRF ya que Stripe no sabrá qué token del CSRF enviar a sus rutas.

Normalmente, usted debería situar este tipo de cosas en rutas fuera de su grupo middleware web que el RouteServiceProvider aplica a todas las rutas en el fichero routes/web.php. No obstante, usted puede también excluír las rutas agregandolas a la propiedad $except del middleware VerifyCsrfToken:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

El middleware CSRF se desactiva automáticamente cuando se realiza pruebas.

# X-CSRF-TOKEN

Además para comprobar la prueba CSRF como parametro POST el middleware VerifyCsrfToken comprobará también el X-CSRF-TOKEN para las cabeceras de las peticiones. Podría, por ejemplo, almacenar la prueba en una meta etiqueta HTML:

<meta name="csrf-token" content="{{ csrf_token() }}">

Entonces, una vez haya creado la meta etiqueta, usted puede indicar a una librería como Jquery como agregar automáticamente el token a todas las cabeceras de las peticiones. Esto proporciona una protección CSRF simple y conveniente para sus aplicaciones basadas en AJAX:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

# X-XSRF-TOKEN

Laravel almacena la prueba CSRF en la cookie XSRF-TOKEN que es incluída con cada respuesta generada por el framework. Puede utilizar la cookie para establecer la cabecera de la petición X-XSRF-TOKEN.

Esta cookie es primordialmente enviada por conveniencia para algunos frameworks de JavaScript u librerías como Angular y Axios, sitúa automáticamente su valor en la cabecera X-XSRF-TOKEN.

Por defecto, el archivo resources/js/bootstrap.js incluye la librería Axios HTTP que lo enviará automáticamente por ti.