Sobre onde realmente deve existir confiança em uma aplicação

Mesmo quando a informação chega pronta pela porta de entrada, a decisão real continua acontecendo em outro nível, onde a validação não depende daquilo que foi apenas apresentado.
Quando comecei com desenvolvimento web, eu sabia teoricamente que o frontend roda no navegador do usuário. Mas, na prática, ainda existia uma sensação meio implícita de que os tokens privados estavam protegidos porque estavam no .env e não diretamente injetados no código.
Lembro de um projeto em que eu coloquei algumas variáveis secretas no .env junto com o index.html. Certa vez, quando fui debugar as requisições usando o DevTools por causa de algum bug, por acaso vi que uma delas era justamente feita para o arquivo .env, cujo conteúdo dava para ver perfeitamente.
Agradecendo por ter detectado isso antes de ter subido para produção, precisei refatorar uma boa parte do sistema para mover esse token para o backend, onde o frontend agora apenas mandava uma requisição para ele. Isso acabou mudando também o desenho da feature, porque deixou de existir a ideia de “confiar” no que vinha do front.
E aí, enquanto eu pesquisava a melhor forma de implementar essa refatoração, veio outra mudança importante de entendimento: qualquer função que roda no frontend pode ser chamada ou manipulada de alguma forma pelo usuário. Não porque alguém vai necessariamente fazer isso, mas porque o ambiente permite.
Isso ficou mais claro quando comecei a pensar em validação e regras de negócio. Por exemplo, não faz sentido depender só do frontend para validar algo importante, porque qualquer regra ali pode ser ignorada ou replicada fora do fluxo esperado. O correto foi começar a mover parte dessas validações para o backend, onde eu consigo realmente controlar o que é aceito ou rejeitado.
Com o tempo, isso mudou bastante minha forma de desenhar aplicações. Hoje, eu não coloco confiança no frontend, visto que é apenas uma camada exposta (seja pelo navegador, por curl ou Postman). A confiança e as regras críticas vivem no backend. E é exatamente sobre isso que se trata: onde realmente deve existir confiança em uma aplicação.