FesaComponents
Más módulos

Seguridad

El WAF por reglas con puntuación — SQLi, XSS, path traversal y command injection.

import { checkRequest, checkMultipleInputs, type WafResult } from "@fesa/components/security";

WAF por expresiones regulares con puntuación acumulada: cada regla suma puntos y el input se bloquea al llegar a 10 (BLOCK_THRESHOLD). Categorías: SQL injection, XSS, path traversal y command injection.

API

checkRequest(input: string): WafResult
checkMultipleInputs(inputs: Record<string, string>): WafResult

interface WafResult {
  blocked: boolean
  rule?: string    // la regla que disparó el bloqueo
  score: number
}

Dónde se usa

En cada punto de entrada con texto libre — no como middleware global (defensa en profundidad):

export async function submitContactAction(values: ContactValues) {
  const waf = checkMultipleInputs({
    nombre: values.name,
    mensaje: values.message,
  });
  if (waf.blocked) {
    return { error: "La solicitud contiene contenido no permitido" };
  }
  // …
}

Puntos típicos: login, registro, contacto, cotizaciones, checkout, chat.

Tests incluidos

La suite (413 líneas) viaja con la librería y corre en CI: payloads reales de SQLi/XSS/traversal/cmd-injection y casos legítimos que NO deben bloquearse (texto en español con acentos, código en mensajes de soporte). Una regla nueva protege todos los sistemas a la vez.

Qué queda en cada app (por ahora)

El rate-limiter Redis, el logger de eventos de seguridad y las alertas por correo de FesaStore dependen de ioredis/pino/Resend — se extraerán cuando se unifique el transporte. Mientras, la librería ofrece MemoryRateLimitService en utilidades.

En esta pagina