Validação rigorosa de dados: prevenindo falhas de segurança e dados inconsistentes com Zod e TypeScript
TypeScript não valida o que chega da internet. Veja como usar Zod para barrar dados inválidos na entrada da API e do formulário — com um único esquema.
Por Equipe We Codex3 min de leitura
TypeScript dá uma sensação de segurança enganosa. Os tipos existem só enquanto você programa; em produção, o que chega numa requisição é texto vindo de qualquer lugar. Se a sua API confia que idade é número porque o tipo diz que é, um único "idade": "abc" pode gravar lixo no banco — ou abrir uma brecha.
O papel do Zod
Zod é uma biblioteca que valida dados em tempo de execução e, ao mesmo tempo, gera o tipo TypeScript a partir da regra. Um esquema, duas garantias.
import { z } from 'zod'
export const ClienteSchema = z.object({
nome: z.string().trim().min(2).max(80),
email: z.string().trim().toLowerCase().email(),
telefone: z.string().regex(/^\d{10,11}$/),
plano: z.enum(['basico', 'pro']),
})
export type Cliente = z.infer<typeof ClienteSchema>No controller, ClienteSchema.parse(req.body) ou devolve um objeto limpo e tipado, ou lança um erro com a lista exata do que está errado.
Valide na borda, sempre
A validação mora na entrada do sistema — o controller da arquitetura em camadas (Arquitetura em camadas no Node.js: como organizar Controllers, Services e Repositories). Daí para dentro, os services trabalham com dados confiáveis.
O mesmo esquema no front
Compartilhando o esquema entre formulário e API, o usuário recebe o erro antes de enviar e o servidor confere de novo, sem divergência entre as regras. Esse é o coração do TypeScript de ponta a ponta: reduzindo bugs em produção com tipagem unificada entre front, app e back.
Validação não é sanitização
Validar diz se o dado está no formato certo. Sanitizar remove o que é perigoso. Os dois andam juntos e não substituem consultas parametrizadas ao banco — veja Sanitização de entradas: o que limpar, onde e por quê e SQL injection em 2026: ainda acontece, e é assim que se previne.
Além do formato
Um e-mail pode passar no .email() e ainda assim não existir, ter um erro de digitação ou ser descartável. Para cadastros e leads, vale ir além do regex: Validação de e-mail além do regex: domínios inexistentes, typos e descartáveis.
Todo sistema que a We Codex entrega valida entrada no cliente e no servidor. Veja Segurança Anti-Hacker e sistemas web, ou fale com a gente.
- Zod
- TypeScript
- Validação
- Segurança
Resolver de vez, com quem faz isso todo dia
Precisa de uma API ou integração que não caia quando o negócio crescer?
Este artigo mostra o caminho. A implementação sob medida — o detalhe que muda o resultado no seu caso — é o trabalho da We Codex, empresa de engenharia do grupo Wocom.
Continue lendo
Tudo sobre Backend & APIs- Ler artigo
Backend & APIs3 min
Arquitetura em camadas no Node.js: como organizar Controllers, Services e Repositories
Rotas com 400 linhas, regra de negócio misturada com SQL e medo de mexer em qualquer coisa? Veja como organizar um backend Node.js em Controllers, Services e Repositories.
- Ler artigo
Backend & APIs3 min
TypeScript de ponta a ponta: reduzindo bugs em produção com tipagem unificada entre front, app e back
O backend muda um campo e o app quebra em produção. Tipos compartilhados entre front, app e API acabam com essa classe inteira de bugs.
- Ler artigo
Segurança3 min
Sanitização de entradas: o que limpar, onde e por quê
Validar diz se o dado tem o formato certo; sanitizar remove o que é perigoso. Onde cada um entra e por que um não substitui o outro.