Artigos

Laravel Web Security: que é a falsificación de solicitudes entre sitios (CSRF)?

Neste tutorial de Laravel falamos de Seguridade web e de como protexer unha aplicación web de ataques de falsificación de solicitudes cruzadas ou CSRF.

CSRF é unha actividade maliciosa realizada por un atacante, que realiza accións en nome dun usuario autenticado, prexudiciais para a seguridade web. Afortunadamente, Laravel proporciona as ferramentas para previr este tipo de vulnerabilidades.

Que é CSRF?

Os ataques CSRF secuestran as sesións dos usuarios. Fano enganando a un usuario para que envíe unha solicitude a través de etiquetas de formularios ocultas ou URL maliciosos (imaxes ou ligazóns) sen o coñecemento do usuario.

Este ataque leva a un cambio no estado da sesión do usuario, fugas de datos e, ás veces, os hackers poden manipular os datos do usuario final nunha aplicación.

A imaxe anterior ilustra un escenario onde se infringe a seguridade web. A vítima envía unha solicitude facendo clic nunha ligazón (recibida), enviando unha solicitude a un servidor do sitio web que producirá os efectos desexados polo hacker, quen entra en posesión da información útil para acceder e manipular o servidor do sitio web.

Como evitar as solicitudes de CSRF

Para mellorar o seguridade web das súas aplicacións, en cada sesión de usuario, Laravel xera tokens seguros que utiliza para garantir que o usuario autenticado é o que solicita a aplicación.

Dado que este token cambia cada vez que se rexenera unha sesión de usuario, un atacante non pode acceder a el.

Sempre que hai unha solicitude para cambiar a información do usuario no lado do servidor (backend), como POSTPUTPATCHDELETE, debe incluír a directiva @csrf no formulario de solicitude blade HTML. O @csrf é polo tanto unha directiva Blade usado para xerar un token oculto validado pola aplicación.

A directiva Blade é a sintaxe utilizada no motor de modelos Laravel chamado Lámina . Para crear un ficheiro blade tes que darlle un nome -no noso caso forma- seguido da extensión da folla. Isto significa que o ficheiro terá o nome form.blade.php.

Utilízase o ficheiro blade para renderizar vistas para os usuarios na páxina web. Hai un par de predirectivasdefisintaxe taquigráfica nite ou blade que pode usar. Por exemplo, @if comprobar se se cumpre unha condición, @empty comprobar se os rexistros non están baleiros, @auth comprobar se un usuario está autenticado, etc.

Pero volvamos á directiva @csrf. Aquí tes como usalo:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

As versións anteriores de Laravel tiñan unha configuración diferente: ambas funcionan e fan o mesmo.

Boletín de innovación
Non te perdas as novidades máis importantes sobre innovación. Rexístrese para recibilos por correo electrónico.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Cando falta o token CSRF na solicitude de formulario que se está enviando ou se parece non válido, Laravel lanza unha mensaxe de erro "Páxina caducada" cun código de estado 419.

Como e onde se realiza a verificación CSRF

O middleware VerifyCsrfToken xestiona a verificación CSRF dentro da aplicación Laravel. O middleware está rexistrado en Kernel.php e está situado no directorio app/Http/Middleware. Isto significa que o middleware desenvólvese para solicitudes dentro da web, non relacionadas coas API.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

O middleware VerifyCsrfToken estende a clase Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, é dicir, a verificación CSRF é definoite dentro da clase.

Profundicemos para descubrir como Laravel xestiona a verificación CSRF.

Dentro da clase, temos a función tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

no código determina se a sesión e os tokens CSRF de entrada coinciden.

A función fai dúas cousas:

  1. obter $this->getTokenFromRequest o token da solicitude entrante adxunto a través dun campo oculto ou a cabeceira da solicitude. O token decífrase e despois devólvese á variable do token.
protected function getTokenFromRequest($request)
{
    $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

    if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
        try {
            $token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
        } catch (DecryptException $e) {
            $token = '';
            }
    }

    return $token;
}

No código recibe un token da cabeceira

2. Envía o token de solicitude e a sesión a unha cadea e úsao hash_equals construído en PHP para comparar se ambas cadeas son iguais. O resultado desta operación é sempre bool (verdadeiro) ou (falso) .

Ercole Palmeri

Boletín de innovación
Non te perdas as novidades máis importantes sobre innovación. Rexístrese para recibilos por correo electrónico.

Artigos recentes

Editores e OpenAI asinan acordos para regular o fluxo de información procesada pola Intelixencia Artificial

O pasado luns, o Financial Times anunciou un acordo con OpenAI. FT licencia o seu xornalismo de clase mundial...

Abril 30 2024

Pagos en liña: aquí tes como os servizos de streaming che fan pagar para sempre

Millóns de persoas pagan por servizos de streaming, pagando taxas de subscrición mensuais. É unha opinión común que vostede...

Abril 29 2024

Veeam ofrece o soporte máis completo para ransomware, desde a protección ata a resposta e a recuperación

Coveware by Veeam continuará ofrecendo servizos de resposta a incidentes de extorsión cibernética. Coveware ofrecerá capacidades forenses e de remediación...

Abril 23 2024

Revolución verde e dixital: como o mantemento preditivo está a transformar a industria do petróleo e do gas

O mantemento preditivo está a revolucionar o sector do petróleo e do gas, cun enfoque innovador e proactivo para a xestión das plantas...

Abril 22 2024