mediumCWE-20A03:2021

Sin Validación de Inputs

Datos enviados por el usuario pasados directo a bases de datos o APIs externas sin ninguna validación de tipo, formato o contenido.

Cómo Funciona

Cuando pasas req.body directo a una query de base de datos o llamada a API, el atacante controla la forma y contenido de esos datos. Esto habilita SQL injection, NoSQL injection, bugs de confusión de tipos y comportamiento inesperado. El código generado por IA es especialmente propenso a esto — suele saltarse la validación por brevedad.

Código Vulnerable
// MAL: body directo a la base de datos
export async function POST(req: Request) {
  const body = await req.json();
  const user = await db.users.create({ data: body });
  return Response.json(user);
}
Código Seguro
// BIEN: valida con Zod antes de tocar la DB
const schema = z.object({
  name: z.string().min(1).max(100),
  email: z.string().email(),
});
export async function POST(req: Request) {
  const body = schema.parse(await req.json());
  const user = await db.users.create({ data: body });
  return Response.json(user);
}

Ejemplo Real

Error clásico del vibecoder: la IA genera una API route que desestructura req.body y lo pasa al create() de Prisma. Si la tabla users tiene un campo role, el atacante puede enviar role: 'admin' y escalar privilegios al instante.

Cómo Prevenirlo

  • Usa Zod, Joi o Yup para validar cada request body y query param de tu API
  • Define explícitamente qué campos se permiten — nunca pases el body completo a un ORM
  • Valida tipos, longitudes, formatos y rangos — no solo si el campo existe
  • Devuelve 400 con un mensaje claro en caso de fallo de validación, no 500

Tecnologías Afectadas

nodejsNext.jsPythonGoPHP

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas