Proteja Suas Server Actions: Não Caia na Armadilha dos IDs
Descubra como falhas simples de autorização podem abrir brechas perigosas em suas rotas HTTP e aprenda a defender seus dados contra ataques inesperados.
Por que isso é importante
Se você esquecer de validar a propriedade do usuário em operações no servidor, qualquer pessoa pode modificar ou excluir dados que não pertencem a ela. Uma brecha comum pode destruir a confiança do seu app e comprometer toda a experiência do usuário. Não é opcional: proteger rotas e server actions vai além do login, é sobre saber com absoluta certeza quem está autorizando cada ação.
Não confie no ID recebido: qualquer um pode tentar acessar o que não é seu
Imagine que sua server action funciona como uma rota HTTP. Basta que alguém consiga o ID de um item do carrinho e pronto: ele pode tentar manipular ou excluir dados de outro usuário. Essa brecha é mais fácil do que parece e, se ignorada, permite que usuários mal-intencionados causem danos irreversíveis.
⚠️Atenção
Nunca confie apenas no dado que chega do front-end. IDs, emails e qualquer parâmetro vindo da URL ou do body podem ser facilmente forjados.
O erro clássico: deletando itens que não são seus
Sem uma verificação de propriedade, qualquer usuário pode enviar um cart item ID alheio para a rota de deleção. Com isso, um item do carrinho de outro usuário seria removido sem a menor dificuldade – imagine esse caos rodando num e-commerce ao vivo!
Valide a relação: item do carrinho pertence ao carrinho do usuário logado?
A verificação mais segura consiste em buscar o cart item pelo ID, mas sempre exigindo junto o carrinho a que ele pertence. Então, compare o userID do carrinho com o userID da sessão ativa. Se não bater, lance imediatamente uma exceção de “unauthorized”. Isso é o mínimo que um dev responsável precisa implementar.
❌Alerta de Segurança
Não valide apenas se o cart item existe. A verificação só é válida se o usuário logado for, de fato, dono do recurso. Qualquer deslize pode ser explorado!
Como implementar: validando ownership em Server Actions
Sempre faça um fetch do cart item pelo ID, trazendo junto o cart. Cheque: <b>if (cartItem.cart.userId !== session.user.id) { throw unauthorized }</b>. Evite atalhos e nunca confie apenas no front-end ou em IDs jogados.
ℹ️Atenção
Mesmo em single page apps ou APIs privadas, essa proteção precisa ser implementada no servidor. Front-end nunca substitui a validação back-end.
Por onde começam os ataques? Imprima a mentalidade do atacante
Qualquer parâmetro controlado pelo usuário é um vetor de ataque. Seja num e-commerce, SaaS ou plataforma social, usuários curiosos ou scripts automáticos vão testar IDs sequenciais, combinar dados, forçar requests. A cada endpoint vulnerável, é uma ameaça real – e você nunca será avisado antes do estrago.
✅Boas Práticas
Priorize sempre a validação de ownership antes de qualquer ação sensível. Use logs para monitorar tentativas suspeitas e nunca exponha mensagens de erro detalhadas no front.
Checklist Rápido para Não Errar
- Sempre relacione qualquer dado sensível ao userId da sessão
- Traga dados agregados do banco, nunca confie no valor vindo do client
- Lançe erro claramente caso o userId não bata
- Teste endpoints forçando IDs de terceiros
Sintoma de um sistema inseguro: confiança cega no front-end
Sempre que perceber que o servidor toma decisões críticas baseado apenas em parâmetro recebido do cliente, acenda o sinal vermelho. O código do lado do usuário nunca pode ser fonte de verdade em operações sensíveis.
Avalie o risco: do bug à catástrofe legal
Vazamento ou exclusão indevida de dados pode gerar não só prejuízo reputacional, mas também processos jurídicos, multas e alertas de privacidade. Empresas sérias investem pesado exatamente nessas proteções. Sim, você precisa também!
Server Actions e Rotas HTTP: onde aplicar na prática
Cada mutation, deleção, atualização – tudo que recebe informações sensíveis pelo request – precisa ser blindado. Teste sua API como um atacante: tente burlar o ownership e só feche os olhos quando tudo estiver bloqueado.
O que NÃO fazer: nunca ignore a autenticação no servidor
Autenticação só no front-end, checagem superficial ou truste cego em tokens sem checar ownership são receitas prontas para desastre.
Dica Dev Doido: Explore vulnerabilidades (com ética!)
Quer saber se seu sistema está bem protegido? Simule requests usando IDs de outros usuários. Siga canais focados em bugs de segurança (como Dev Doido). Entenda como hackers pensam e reforce seu mindset.
Aprenda e Pratique: um hábito para toda carreira
Segurança não é tarefa de um sprint. É ciclo contínuo. Quanto mais vezes você revisar a lógica de autorização dos endpoints, menor a chance de surpresas. Tome o hábito de revisar ownership sempre – priorize isso até virar instinto automático!
Conclusão: Só passa despercebido para quem não foi atacado (ainda)
O usuário certo só modifica o que é dele. Simples assim. Quem não protege endpoints com ownership está implorando por desastre. A hora de mudar é agora.