0%
Seguridad en Laravel: Guía de Mejores Prácticas

Seguridad en Laravel: Guía de Mejores Prácticas

Descubre las mejores prácticas de seguridad para tus aplicaciones Laravel

I

InSkillCoach

· min

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

  1. Utiliza HTTPS en producción
  2. Actualiza regularmente Laravel y sus dependencias
  3. Configura correctamente los permisos de los archivos
  4. Utiliza variables de entorno para la información sensible
  5. 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

InSkillCoach

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+
1.7k
191

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!