Skip Content

OWASP 2025 (A01-A10) Quick Fixes para Laravel 12

Este tutorial es un checklist para copiar/pegar de las primeras 10 categorias (A01-A10). Cada seccion incluye un snippet practico y un link a la pagina completa.

A01: Control de Acceso Roto

Pagina completa: /es/Vulnerabilidades/ControlDeAccesoRoto

use Illuminate\Support\Facades\Gate;
 
Gate::authorize('update', $post);

A02: Configuracion de Seguridad Incorrecta

Pagina completa: /es/Vulnerabilidades/ConfiguracionSeguridadIncorecta

APP_ENV=production
APP_DEBUG=false
SANCTUM_STATEFUL_DOMAINS=app.ejemplo.com
// config/session.php
 
'secure' => env('SESSION_SECURE_COOKIE', env('APP_ENV') === 'production'),
'http_only' => env('SESSION_HTTP_ONLY', true),
'same_site' => env('SESSION_SAME_SITE', 'lax'),

A03: Fallas en la Cadena de Suministro de Software

Pagina completa: /es/Vulnerabilidades/FallasCadenaSuministroSoftware

composer audit
composer outdated

A04: Fallas Criptograficas

Pagina completa: /es/Vulnerabilidades/FallasCriptograficas

APP_KEY=base64:NUEVA_LLAVE_AQUI
APP_PREVIOUS_KEYS=base64:LLAVE_ANTIGUA_1,base64:LLAVE_ANTIGUA_2
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Crypt;
 
$password = Hash::make($request->password);
$encrypted = Crypt::encryptString($sensitiveValue);

A05: Inyeccion

Pagina completa: /es/Vulnerabilidades/Inyeccion

$query->where('email', $request->string('email'));

A06: Diseno Inseguro

Pagina completa: /es/Vulnerabilidades/DisenoInseguro

use Illuminate\Support\Facades\Gate;
 
Gate::authorize('update', $post);
abort_unless($post->status === 'draft', 422);
$post->update(['status' => 'published']);

A07: Fallos de Autenticacion

Pagina completa: /es/Vulnerabilidades/FallosAutenticacion

$request->session()->regenerate();

A08: Fallos de Integridad de Software o Datos

Pagina completa: /es/Vulnerabilidades/FallosIntegridadSoftwareDatos

// Nunca confies en ownership enviado por el cliente.
Comment::create([
'post_id' => $post->id,
'user_id' => $request->user()->id,
'body' => $request->string('body')->toString(),
]);

A09: Fallos de Logging y Alertas de Seguridad

Pagina completa: /es/Vulnerabilidades/FallosLoggingYAlertas

use Illuminate\Support\Facades\Log;
 
Log::withContext([
'correlation_id' => $request->header('X-Request-Id'),
'user_id' => $request->user()?->id,
'tenant_id' => $request->user()?->getAttribute('tenant_id'),
'ip' => $request->ip(),
]);
 
Log::channel('security')->warning('auth.login_failed', [
'email' => $request->string('email')->toString(),
'reason' => 'invalid_credentials',
]);

A10: Mal Manejo de Condiciones Excepcionales

Pagina completa: /es/Vulnerabilidades/MalManejoCondicionesExcepcionales

try {
$spamDetectionService->isSpam($commentBody);
} catch (SpamServiceTimeout $e) {
report($e);
return response()->json(['message' => 'Falla temporal.'], 503);
}