Segurança no Laravel: Guia das Melhores Práticas
Descubra as melhores práticas de segurança para suas aplicações Laravel
InSkillCoach
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
- Use HTTPS em produção
- Atualize regularmente o Laravel e suas dependências
- Configure corretamente as permissões dos arquivos
- Use variáveis de ambiente para informações sensíveis
- 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
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+
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão