affaan-m/ECC

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.

78CollectingNetwork access
See how to use itView GitHub source
npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/laravel-security"
Automated source guide

Source checked Jul 28, 2026·Refresh due Oct 26, 2026

Reorganized from the pinned upstream SKILL.md

Turn laravel-security's source instructions into a guide you can follow

According to the pinned SKILL.md from affaan-m/ECC: Guía completa de seguridad para aplicaciones Laravel que protege contra vulnerabilidades comunes.

npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/laravel-security"
Check the pinned source

Best fit

  • 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.

Bring this context

  • A concrete task that matches the documented purpose of laravel-security.
  • The files, examples, or context the task depends on.
  • Your constraints, target environment, and definition of done.

Expected outputs

  • A result that follows the pinned laravel-security instructions.
  • A concise record of assumptions, inputs used, and unresolved questions.
  • A final check against the source workflow and relevant permission signals.

Key source sections

Read laravel-security through these 5 source sections

Sections are extracted automatically from the pinned SKILL.md and link back to the source.

01

Cuándo Activar

Agregar autenticación o autorización

SKILL.md · Cuándo Activar
Agregar autenticación o autorizaciónManejar entrada de usuarios y subida de archivosConstruir nuevos endpoints de API
02

Cómo Funciona

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

SKILL.md · 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.
03

Configuración Principal de Seguridad

APPDEBUG=false en producción

SKILL.md · Configuración Principal de Seguridad
APPDEBUG=false en producciónAPPKEY debe estar establecido y rotarse al comprometerseEstablecer SESSIONSECURECOOKIE=true y SESSIONSAMESITE=lax (o strict para apps sensibles)
04

Reforzamiento de Sesión y Cookies

Establecer SESSIONHTTPONLY=true para prevenir acceso desde JavaScript

SKILL.md · Reforzamiento de Sesión y Cookies
Establecer SESSIONHTTPONLY=true para prevenir acceso desde JavaScriptUsar SESSIONSAMESITE=strict para flujos de alto riesgoRegenerar sesiones al iniciar sesión y al cambiar privilegios
05

Autenticación y Tokens

Ejemplo de protección de rutas:

SKILL.md · Autenticación y Tokens
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

SkillSignal prompt templates

Provide the task, context, and acceptance criteria

These prompts were written by SkillSignal from the source structure; they are not upstream text.

Task-start prompt

Confirm source fit, inputs, and outputs before acting.

Use laravel-security to help me with: [specific task]. Context: [files, data, or background]. Constraints: [environment, scope, and prohibited actions]. Before acting, check the pinned SKILL.md and explain which sections apply, what inputs are still missing, and what you will deliver.

Source-guided execution

Make the Agent explicitly follow the key extracted sections.

Apply the pinned laravel-security source to [task]. Pay particular attention to these source sections: “Cuándo Activar”, “Cómo Funciona”, “Configuración Principal de Seguridad”, “Reforzamiento de Sesión y Cookies”, “Autenticación y Tokens”. Preserve the important decision at each step. Mark facts not covered by the source as “needs confirmation” instead of inventing them. Then verify the result against my acceptance criteria: [criteria].

Result-review prompt

Check omissions, permissions, and source drift before delivery.

Review the current laravel-security result: (1) does it satisfy the original task; (2) were any applicable steps or limits in the pinned SKILL.md missed; (3) did it perform any unauthorized file, command, network, or data action; and (4) which conclusions remain unverified? List issues first, then fix only what the source or user authorization supports.

Output checklist

Verify each item before delivery

The task matches the purpose documented in the SKILL.md.

The source section “Cuándo Activar” has been checked.

The source section “Cómo Funciona” has been checked.

The source section “Configuración Principal de Seguridad” has been checked.

The source section “Reforzamiento de Sesión y Cookies” has been checked.

Inputs, constraints, and acceptance criteria are explicit.

Unverified facts, compatibility, and outcome claims are clearly marked.

Any file, command, network, or data action has been reviewed.

Choose a different workflow

When another Skill is the better fit

FAQ

What does laravel-security do?

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

How do I start using laravel-security?

The catalog detected this source-specific install command: npx skills add https://github.com/affaan-m/ECC --skill "docs/es/skills/laravel-security". Inspect the command and pinned source before running it.

Which Agent platforms does it declare?

No dedicated Agent platform is declared in the pinned source record.

Repository stars
234,327
Repository forks
35,711
Quality
78/100
Source repository last pushed

Quality breakdown

Based on traceable docs and repository signals; stars are not treated as quality.

78/100
Documentation28/30
Specificity14/25
Maintenance20/20
Trust signals16/25
View original Skill.mdThis page is parsed directly from the repository SKILL.md without editorial rewriting. Collected: Jul 28, 2026 · about 3 min

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');
Source repo
affaan-m/ECC
Skill path
docs/es/skills/laravel-security/SKILL.md
Commit SHA
4e973d3eaf92
Repository license
MIT
Data collected