A autenticação no Laravel é um dos recursos mais utilizados pelos desenvolvedores para garantir a segurança dos usuários. Entretanto, para evitar ataques de força bruta e acessos indevidos, é essencial implementar um rate limiter. Neste artigo, vamos explorar como configurar um sistema de autenticação seguro no Laravel com rate limiting, utilizando Laravel Breeze para autenticação e Blade para a interface no front-end.
A autenticação no Laravel é um dos recursos mais utilizados pelos desenvolvedores para garantir a segurança dos usuários. Entretanto, para evitar ataques de força bruta e acessos indevidos, é essencial implementar um rate limiter. Neste artigo, vamos explorar como configurar um sistema de autenticação seguro no Laravel com rate limiting, utilizando Laravel Breeze para autenticação e Blade para a interface no front-end.

Autenticação no Laravel com Rate Limiter: Protegendo Seu Sistema Contra Ataques

A autenticação no Laravel é um dos recursos mais utilizados pelos desenvolvedores para garantir a segurança dos usuários. Entretanto, para evitar ataques de força bruta e acessos indevidos, é essencial implementar um rate limiter. Neste artigo, vamos explorar como configurar um sistema de autenticação seguro no Laravel com rate limiting, utilizando Laravel Breeze para autenticação e Blade para a interface no front-end.

O que é Rate Limiting no Laravel?

O Rate Limiting (limitação de taxa) é uma técnica usada para restringir o número de requisições que um usuário pode fazer em um determinado período de tempo. No Laravel, isso é implementado de forma simples com o middleware ThrottleRequests, que evita múltiplas tentativas de login seguidas, dificultando ataques de força bruta.

Pré-requisitos

Antes de começarmos, certifique-se de que você tem:

• Laravel 10 ou superior instalado

• Laravel Breeze para autenticação

• Um banco de dados configurado

• Node.js e npm instalados para a interface com Blade

Passo 1: Configurando a Autenticação no Laravel

Primeiro, vamos instalar o Laravel Breeze, um pacote oficial para autenticação simples.

composer require laravel/breeze --dev
php artisan breeze:install blade
npm install && npm run dev
php artisan migrate

Isso criará todo o sistema de autenticação, incluindo login, registro, recuperação de senha e logout, além de rotas e views em Blade.

Passo 2: Configurando o Rate Limiter no Laravel

Agora, vamos proteger a rota de login contra ataques de força bruta. No Laravel, o rate limiter pode ser configurado no arquivo routes/api.php ou diretamente no routes/web.php, caso o login seja realizado via web.

Abra o arquivo app/Providers/RouteServiceProvider.php e edite o método configureRateLimiting():

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Http\Request;

protected function configureRateLimiting()
{
    RateLimiter::for('login', function (Request $request) {
        return Limit::perMinute(5)->by($request->ip());
    });
}

Neste caso, estamos limitando a 5 tentativas de login por minuto por IP.

Agora, vamos aplicar esse limitador à rota de login. No arquivo routes/web.php, adicione o middleware throttle:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\LoginController;

Route::post('/login', [LoginController::class, 'authenticate'])
    ->middleware('throttle:login');

Agora, se um usuário tentar realizar mais de 5 tentativas de login em menos de um minuto, ele receberá a seguinte resposta:

{
    "message": "Too Many Attempts. Please try again later."
}

Passo 3: Criando a Interface do Login com Blade

Agora que a autenticação e o rate limiter estão configurados, vamos criar o formulário de login usando Blade.

Edite o arquivo resources/views/auth/login.blade.php e adicione o seguinte código:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-6">
            <div class="card">
                <div class="card-header">Login</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-danger">{{ session('status') }}</div>
                    @endif

                    <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group mb-3">
                            <label for="email">E-mail</label>
                            <input type="email" name="email" class="form-control" required autofocus>
                        </div>

                        <div class="form-group mb-3">
                            <label for="password">Senha</label>
                            <input type="password" name="password" class="form-control" required>
                        </div>

                        <button type="submit" class="btn btn-primary">Entrar</button>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Este formulário básico envia os dados para a rota de login, que agora está protegida contra ataques de força bruta pelo Rate Limiter.

Passo 4: Testando o Rate Limiter

Após implementar o rate limiter, você pode testá-lo manualmente tentando inserir credenciais erradas repetidamente. Se exceder o limite de 5 tentativas por minuto, você verá a mensagem de erro.

Caso queira testar automaticamente, pode usar o Artisan Tinker:

php artisan tinker

E rodar uma simulação de múltiplos logins:

use Illuminate\Support\Facades\Http;

for ($i = 0; $i < 10; $i++) {
    $response = Http::post(url('/login'), [
        'email' => 'email@exemplo.com',
        'password' => 'senhaerrada',
    ]);
    echo $response->status() . "\n";
}

Você verá o status 429 (Too Many Requests) após algumas tentativas, indicando que o rate limiter está funcionando corretamente.

Conclusão

Implementar autenticação no Laravel com rate limiter é uma estratégia fundamental para proteger seu sistema contra ataques de força bruta. Utilizando o Laravel Breeze para facilitar a autenticação e Blade para a interface, criamos um sistema seguro e funcional.

✅ Como instalar e configurar autenticação com Laravel Breeze

✅ Como configurar rate limiting para rotas de login

✅ Como criar um formulário de login seguro com Blade

✅ Como testar a limitação de tentativas de login

Se você gostou deste conteúdo, compartilhe e continue explorando Laravel para tornar suas aplicações ainda mais seguras!