0%
Segurança no Laravel: Guia das Melhores Práticas

Segurança no Laravel: Guia das Melhores Práticas

Descubra as melhores práticas de segurança para suas aplicações Laravel

I

InSkillCoach

· min

Segurança no Laravel: Guia das Melhores Práticas

A segurança é um aspecto crucial do desenvolvimento web moderno. O Laravel integra diversos recursos de segurança por padrão, mas é importante entender como utilizá-los de forma eficaz.

1. Proteção CSRF

O Laravel protege automaticamente seus formulários contra ataques CSRF (Cross-Site Request Forgery).

<form method="POST" action="/profile">
    @csrf
    <!-- Campos do formulário -->
</form>

Configuração personalizada

// config/session.php
return [
    'token_lifetime' => 120, // minutos
];

2. Proteção XSS

Escape automático com Blade

{{ $userInput }} // Escapado automaticamente
{!! $trustedHtml !!} // Não escapado - use com cautela

Middleware de segurança

// app/Http/Middleware/SecurityHeaders.php
public function handle($request, Closure $next)
{
    $response = $next($request);
    
    $response->headers->set('X-XSS-Protection', '1; mode=block');
    $response->headers->set('X-Frame-Options', 'SAMEORIGIN');
    $response->headers->set('X-Content-Type-Options', 'nosniff');
    
    return $response;
}

3. Autenticação e Autorização

Configuração do Sanctum para API

composer require laravel/sanctum

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Exemplo de proteção de rota

Route::middleware(['auth:sanctum'])->group(function () {
    Route::get('/user/profile', function () {
        return auth()->user();
    });
});

Policies para autorização

php artisan make:policy PostPolicy --model=Post

class PostPolicy
{
    public function update(User $user, Post $post)
    {
        return $user->id === $post->user_id;
    }
}

4. Validação de dados

Validação nas requisições

class StoreUserRequest extends FormRequest
{
    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9]).*$/',
            'name' => 'required|string|max:255'
        ];
    }
}

5. Gerenciamento de sessões seguras

Configuração das sessões

// config/session.php
return [
    'driver' => env('SESSION_DRIVER', 'file'),
    'lifetime' => env('SESSION_LIFETIME', 120),
    'expire_on_close' => false,
    'encrypt' => true,
    'secure' => true, // Para HTTPS
];

6. Proteção contra injeções SQL

Uso de consultas preparadas

// Má prática
$users = DB::select('select * from users where active = ' . $active);

// Boa prática
$users = DB::select('select * from users where active = ?', [$active]);

7. Armazenamento seguro de senhas

// No model User
public function setPasswordAttribute($value)
{
    $this->attributes['password'] = Hash::make($value);
}

8. Logging e monitoramento

// config/logging.php
'channels' => [
    'security' => [
        'driver' => 'daily',
        'path' => storage_path('logs/security.log'),
        'level' => 'warning',
        'days' => 14,
    ],
],

Boas práticas adicionais

  1. Use HTTPS em produção
  2. Atualize regularmente o Laravel e suas dependências
  3. Configure corretamente as permissões dos arquivos
  4. Use variáveis de ambiente para informações sensíveis
  5. Implemente a limitação de taxa (Rate Limiting)

Conclusão

A segurança é um processo contínuo que exige vigilância constante. O Laravel fornece diversas ferramentas para proteger sua aplicação, mas é fundamental entendê-las e utilizá-las corretamente.

Recursos úteis

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
2.0k
114

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!