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=productionAPP_DEBUG=falseSANCTUM_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 auditcomposer outdated
A04: Fallas Criptograficas
Pagina completa: /es/Vulnerabilidades/FallasCriptograficas
APP_KEY=base64:NUEVA_LLAVE_AQUIAPP_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);}