Seguridad en Laravel: Guía de Mejores Prácticas
Descubre las mejores prácticas de seguridad para tus aplicaciones Laravel
InSkillCoach
Seguridad en Laravel: Guía de Mejores Prácticas
La seguridad es un aspecto crucial del desarrollo web moderno. Laravel integra de forma predeterminada numerosas funcionalidades de seguridad, pero es importante entender cómo utilizarlas de manera eficaz.
1. Protección CSRF
Laravel protege automáticamente tus formularios contra los ataques CSRF (Cross-Site Request Forgery).
<form method="POST" action="/profile">
@csrf
<!-- Campos del formulario -->
</form>
Configuración personalizada
// config/session.php
return [
'token_lifetime' => 120, // minutos
];
2. Protección XSS
Escape automático con Blade
{{ $userInput }} // Escapado automáticamente
{!! $trustedHtml !!} // Sin escapar - usar con precaución
Middleware de seguridad
// 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. Autenticación y autorización
Configuración de Sanctum para API
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
Ejemplo de protección de ruta
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/user/profile', function () {
return auth()->user();
});
});
Policies para la autorización
php artisan make:policy PostPolicy --model=Post
class PostPolicy
{
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
}
4. Validación de datos
Validación en las peticiones
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. Gestión de sesiones seguras
Configuración de las sesiones
// 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. Protección contra las inyecciones SQL
Uso de consultas preparadas
// Mala práctica
$users = DB::select('select * from users where active = ' . $active);
// Buena práctica
$users = DB::select('select * from users where active = ?', [$active]);
7. Almacenamiento seguro de contraseñas
// En el modelo User
public function setPasswordAttribute($value)
{
$this->attributes['password'] = Hash::make($value);
}
8. Logging y monitorización
// config/logging.php
'channels' => [
'security' => [
'driver' => 'daily',
'path' => storage_path('logs/security.log'),
'level' => 'warning',
'days' => 14,
],
],
Buenas prácticas adicionales
- Utiliza HTTPS en producción
- Actualiza regularmente Laravel y sus dependencias
- Configura correctamente los permisos de los archivos
- Utiliza variables de entorno para la información sensible
- Implementa la limitación de tasa (Rate Limiting)
Conclusión
La seguridad es un proceso continuo que requiere una vigilancia constante. Laravel ofrece numerosas herramientas para proteger tu aplicación, pero es fundamental entenderlas y utilizarlas correctamente.
Recursos útiles
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión