Este conceito separa quem entende de quem não entende segurança web. Existem dois lugares onde código roda, e eles têm níveis de confiança opostos:
LADO DO CLIENTE (navegador) │ LADO DO SERVIDOR (edge/VPS/banco)
────────────────────────── │ ─────────────────────────────────
• Código JavaScript da página │ • A API, as regras de negócio
• Tudo é VISÍVEL (F12 → ver fonte) │ • O código NÃO é visível ao usuário
• Tudo é EDITÁVEL pelo usuário │ • O usuário não altera o código
• ❌ NÃO confie: é território inimigo │ • ✅ Aqui moram as decisões de segurança
Consequências práticas (erros reais que você vai encontrar):
- Esconder um botão de admin no JavaScript não protege nada — o atacante lê o código e chama a API direto.
- Validar o formulário só no navegador é inútil para segurança — o atacante pula o formulário e fala com a API na unha (com
curl). isPro = trueguardado no navegador (localStorage) é editável — a decisão "esse usuário é premium?" tem que ser no servidor (Ex. 13.3).- Segredos (chaves de API) nunca no código do cliente — ele é público. (Ex. 25 audita justamente isso.)
Regra de ouro nº 2: tudo que roda no cliente é público e adulterável. Decisões de segurança são sempre no servidor.