Source profileQuality 78/100

affaan-m/ECC/docs/es/skills/laravel-security/SKILL.md

laravel-security

Buenas prácticas de seguridad en Laravel para autenticación/autorización, validación, CSRF, asignación masiva, subida de archivos, secretos, limitación de velocidad y despliegue seguro.

Source repository stars
234,327
Declared platforms
0
Static risk flags
1
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Guía completa de seguridad para aplicaciones Laravel que protege contra vulnerabilidades comunes.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/laravel-security"
    Safe inspection promptEditorial

    Inspect the Agent Skill "laravel-security" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/docs/es/skills/laravel-security/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Cuándo Activar

      Agregar autenticación o autorización

      Agregar autenticación o autorizaciónManejar entrada de usuarios y subida de archivosConstruir nuevos endpoints de API
    2. 02

      Cómo Funciona

      El middleware proporciona protecciones de base (CSRF mediante VerifyCsrfToken, cabeceras de seguridad mediante SecurityHeaders).

      El middleware proporciona protecciones de base (CSRF mediante VerifyCsrfToken, cabeceras de seguridad mediante SecurityHeaders).Los guards y policies aplican el control de acceso (auth:sanctum, $this-authorize, middleware de policy).Los Form Requests validan y dan forma a la entrada (UploadInvoiceRequest) antes de que llegue a los servicios.
    3. 03

      Configuración Principal de Seguridad

      APPDEBUG=false en producción

      APPDEBUG=false en producciónAPPKEY debe estar establecido y rotarse al comprometerseEstablecer SESSIONSECURECOOKIE=true y SESSIONSAMESITE=lax (o strict para apps sensibles)
    4. 04

      Reforzamiento de Sesión y Cookies

      Establecer SESSIONHTTPONLY=true para prevenir acceso desde JavaScript

      Establecer SESSIONHTTPONLY=true para prevenir acceso desde JavaScriptUsar SESSIONSAMESITE=strict para flujos de alto riesgoRegenerar sesiones al iniciar sesión y al cambiar privilegios
    5. 05

      Autenticación y Tokens

      Ejemplo de protección de rutas:

      Usar Laravel Sanctum o Passport para autenticación de APIPreferir tokens de corta vida con flujos de actualización para datos sensiblesRevocar tokens al cerrar sesión y en cuentas comprometidas

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 227

    The documentation includes network, browsing, or remote request actions.

    'allowed_origins' => ['https://app.example.com'],

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score78/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    docs/es/skills/laravel-security/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    Buenas Prácticas de Seguridad en Laravel

    Guía completa de seguridad para aplicaciones Laravel que protege contra vulnerabilidades comunes.

    Cuándo Activar

    • Agregar autenticación o autorización
    • Manejar entrada de usuarios y subida de archivos
    • Construir nuevos endpoints de API
    • Gestionar secretos y configuración de entornos
    • Reforzar despliegues en producción

    Cómo Funciona

    • El middleware proporciona protecciones de base (CSRF mediante VerifyCsrfToken, cabeceras de seguridad mediante SecurityHeaders).
    • Los guards y policies aplican el control de acceso (auth:sanctum, $this->authorize, middleware de policy).
    • Los Form Requests validan y dan forma a la entrada (UploadInvoiceRequest) antes de que llegue a los servicios.
    • La limitación de velocidad agrega protección contra abusos (RateLimiter::for('login')) junto con controles de autenticación.
    • La seguridad de datos proviene de casts encriptados, guards de asignación masiva y rutas firmadas (URL::temporarySignedRoute + middleware signed).

    Configuración Principal de Seguridad

    • APP_DEBUG=false en producción
    • APP_KEY debe estar establecido y rotarse al comprometerse
    • Establecer SESSION_SECURE_COOKIE=true y SESSION_SAME_SITE=lax (o strict para apps sensibles)
    • Configurar proxies de confianza para la detección correcta de HTTPS

    Reforzamiento de Sesión y Cookies

    • Establecer SESSION_HTTP_ONLY=true para prevenir acceso desde JavaScript
    • Usar SESSION_SAME_SITE=strict para flujos de alto riesgo
    • Regenerar sesiones al iniciar sesión y al cambiar privilegios

    Autenticación y Tokens

    • Usar Laravel Sanctum o Passport para autenticación de API
    • Preferir tokens de corta vida con flujos de actualización para datos sensibles
    • Revocar tokens al cerrar sesión y en cuentas comprometidas

    Ejemplo de protección de rutas:

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Route;
    
    Route::middleware('auth:sanctum')->get('/me', function (Request $request) {
        return $request->user();
    });
    

    Seguridad de Contraseñas

    • Hashear contraseñas con Hash::make() y nunca almacenar texto plano
    • Usar el password broker de Laravel para los flujos de restablecimiento
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Validation\Rules\Password;
    
    $validated = $request->validate([
        'password' => ['required', 'string', Password::min(12)->letters()->mixedCase()->numbers()->symbols()],
    ]);
    
    $user->update(['password' => Hash::make($validated['password'])]);
    

    Autorización: Policies y Gates

    • Usar policies para autorización a nivel de modelo
    • Aplicar autorización en controladores y servicios
    $this->authorize('update', $project);
    

    Usar middleware de policy para aplicación a nivel de ruta:

    use Illuminate\Support\Facades\Route;
    
    Route::put('/projects/{project}', [ProjectController::class, 'update'])
        ->middleware(['auth:sanctum', 'can:update,project']);
    

    Validación y Sanitización de Datos

    • Siempre validar entradas con Form Requests
    • Usar reglas de validación estrictas y verificaciones de tipo
    • Nunca confiar en los payloads de la request para campos derivados

    Protección contra Asignación Masiva

    • Usar $fillable o $guarded y evitar Model::unguard()
    • Preferir DTOs o mapeo explícito de atributos

    Prevención de Inyección SQL

    • Usar Eloquent o el query builder con binding de parámetros
    • Evitar SQL crudo a menos que sea estrictamente necesario
    DB::select('select * from users where email = ?', [$email]);
    

    Prevención de XSS

    • Blade escapa la salida por defecto ({{ }})
    • Usar {!! !!} solo para HTML de confianza y sanitizado
    • Sanitizar texto enriquecido con una librería dedicada

    Protección CSRF

    • Mantener el middleware VerifyCsrfToken habilitado
    • Incluir @csrf en formularios y enviar tokens XSRF en requests de SPA

    Para autenticación SPA con Sanctum, asegurarse de que las requests stateful estén configuradas:

    // config/sanctum.php
    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost')),
    

    Seguridad en Subida de Archivos

    • Validar tamaño de archivo, tipo MIME y extensión
    • Almacenar subidas fuera del directorio público cuando sea posible
    • Escanear archivos en busca de malware si es necesario
    final class UploadInvoiceRequest extends FormRequest
    {
        public function authorize(): bool
        {
            return (bool) $this->user()?->can('upload-invoice');
        }
    
        public function rules(): array
        {
            return [
                'invoice' => ['required', 'file', 'mimes:pdf', 'max:5120'],
            ];
        }
    }
    
    $path = $request->file('invoice')->store(
        'invoices',
        config('filesystems.private_disk', 'local') // establecer a un disco no público
    );
    

    Limitación de Velocidad

    • Aplicar middleware throttle en endpoints de autenticación y escritura
    • Usar límites más estrictos para login, restablecimiento de contraseña y OTP
    use Illuminate\Cache\RateLimiting\Limit;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\RateLimiter;
    
    RateLimiter::for('login', function (Request $request) {
        return [
            Limit::perMinute(5)->by($request->ip()),
            Limit::perMinute(5)->by(strtolower((string) $request->input('email'))),
        ];
    });
    

    Secretos y Credenciales

    • Nunca hacer commit de secretos al control de versiones
    • Usar variables de entorno y gestores de secretos
    • Rotar claves después de una exposición e invalidar sesiones

    Atributos Encriptados

    Usar casts encriptados para columnas sensibles en reposo.

    protected $casts = [
        'api_token' => 'encrypted',
    ];
    

    Cabeceras de Seguridad

    • Agregar CSP, HSTS y protección de frames donde sea apropiado
    • Usar configuración de proxies de confianza para forzar redirecciones HTTPS

    Ejemplo de middleware para establecer cabeceras:

    use Illuminate\Http\Request;
    use Symfony\Component\HttpFoundation\Response;
    
    final class SecurityHeaders
    {
        public function handle(Request $request, \Closure $next): Response
        {
            $response = $next($request);
    
            $response->headers->add([
                'Content-Security-Policy' => "default-src 'self'",
                'Strict-Transport-Security' => 'max-age=31536000', // agregar includeSubDomains/preload solo cuando todos los subdominios sean HTTPS
                'X-Frame-Options' => 'DENY',
                'X-Content-Type-Options' => 'nosniff',
                'Referrer-Policy' => 'no-referrer',
            ]);
    
            return $response;
        }
    }
    

    CORS y Exposición de API

    • Restringir orígenes en config/cors.php
    • Evitar orígenes wildcard para rutas autenticadas
    // config/cors.php
    return [
        'paths' => ['api/*', 'sanctum/csrf-cookie'],
        'allowed_methods' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
        'allowed_origins' => ['https://app.example.com'],
        'allowed_headers' => [
            'Content-Type',
            'Authorization',
            'X-Requested-With',
            'X-XSRF-TOKEN',
            'X-CSRF-TOKEN',
        ],
        'supports_credentials' => true,
    ];
    

    Logging y PII

    • Nunca registrar contraseñas, tokens o datos completos de tarjetas
    • Redactar campos sensibles en logs estructurados
    use Illuminate\Support\Facades\Log;
    
    Log::info('User updated profile', [
        'user_id' => $user->id,
        'email' => '[REDACTED]',
        'token' => '[REDACTED]',
    ]);
    

    Seguridad de Dependencias

    • Ejecutar composer audit regularmente
    • Fijar dependencias con cuidado y actualizar rápidamente ante CVEs

    URLs Firmadas

    Usar rutas firmadas para enlaces temporales a prueba de manipulaciones.

    use Illuminate\Support\Facades\URL;
    
    $url = URL::temporarySignedRoute(
        'downloads.invoice',
        now()->addMinutes(15),
        ['invoice' => $invoice->id]
    );
    
    use Illuminate\Support\Facades\Route;
    
    Route::get('/invoices/{invoice}/download', [InvoiceController::class, 'download'])
        ->name('downloads.invoice')
        ->middleware('signed');
    

    Alternatives

    Compare before choosing