Brasil
Posts

Dia 2: De 'Login Fake' para OAuth Real - Como Quase Quebrei Minha Extensão (e Consertei!) 🔐⚡

May 28, 2025
E aí, pessoal! 👋 Lembram do Dia 1 do Startlar? Aquela extensão do Chrome que comecei para analisar editais de leilão da Caixa? Pois é... o Dia 2 foi uma montanha-russa de emoções que me ensinou muito sobre segurança, performance e a arte de não over-engineer as coisas! 😅 Depois de construir o esqueleto da extensão, chegou a hora da verdade. Aquele "login fake" que eu tinha implementado para acelerar o desenvolvimento? Era hora de aposentar e colocar algo de verdade no lugar. Mas antes de sair codificando, resolvi fazer algo que deveria ter feito desde o início: uma auditoria de segurança. E cara... o que descobri me deu um susto! 😱 Rodei uma análise de segurança na extensão e... BAAM! 5 vulnerabilidades detectadas: Sim, eu tinha deixado o client secret do Google hardcoded no código. Basicamente como deixar a chave de casa grudada na porta com um bilhetinho "pode entrar"! Minha extensão estava completamente aberta para qualquer script malicioso. Era como um castelo sem muralhas. A extensão pedia mais permissões do que precisava e guardava tokens sem nenhuma criptografia. Foi nesse momento que pensei: "Cara, se eu fosse um hacker, essa extensão seria um prato cheio!" 😬 Decidi fazer as coisas direito e implementei:
  • Supabase (região Brasil, porque latência importa!)
  • Google OAuth 2.0 (o login social que todo mundo ama)
  • JWT Tokens com validação adequada
  • Content Security Policy restritivo
// O fluxo ficou assim:
// Usuário clica → Google OAuth → Supabase Auth → JWT Token → Chrome Storage → Widget Ativo

async function authenticateUser() {
const { data, error } = await supabase.auth.signInWithOAuth({
  provider: 'google',
  options: {
    redirectTo: chrome.identity.getRedirectURL()
  }
});

if (data?.session) {
  await chrome.storage.local.set({
    'auth_token': data.session.access_token,
    'user_data': data.user
  });
  updateAuthStatus(true);
}
}
Depois de implementar tudo, rodei a auditoria novamente: ZERO vulnerabilidades! 🎉 Estava me sentindo o ninja da segurança até que... Testei a extensão com toda a segurança implementada e... DESASTRE TOTAL!
  • ⏱️ 15 segundos para fazer login (eram 2 segundos antes)
  • 🐌 Interface travando o tempo todo
  • 😤 Usuário (eu mesmo) frustrado: "antes era super rápido!"
O problema? Eu tinha implementado criptografia AES pesada para criptografar tudo. Era como usar uma furadeira industrial para fazer um furo numa parede de papel! Over-engineering total. Depois de muito debugging, cheguei numa arquitetura que equilibra segurança e performance de forma inteligente. A solução final conecta diferentes componentes de maneira eficiente: O fluxo funciona da seguinte forma: quando o usuário clica no botão de login no popup da extensão, ele é direcionado para o sistema de autenticação OAuth do Google. Após confirmar suas credenciais, o Google redireciona para o Supabase Auth (configurado na região Brasil para menor latência), que valida e gera um JWT token seguro. Esse token é então armazenado de forma segura no Chrome Storage, onde fica disponível para os outros componentes da extensão. O Service Worker atua como intermediário, gerenciando a comunicação entre o popup e o content script, enquanto valida constantemente se o token ainda é válido. Por fim, o content script (que injeta o widget no site da Caixa) utiliza esses dados validados para personalizar a experiência do usuário, sempre garantindo que apenas informações seguras e verificadas sejam processadas. A grande sacada foi simplificar sem comprometer a segurança - removendo camadas desnecessárias de criptografia pesada, mas mantendo validações robustas e princípios de segurança essenciais. Voltei à prancheta e repensei tudo:
  • Criptografia pesada demais
  • Validações excessivas em cada clique
  • Camadas desnecessárias de segurança
  • OAuth real com Google
  • Validação JWT robusta
  • CSP bem configurado
  • Sanitização de dados
  • Tempo de login: de 15s para 3s (80% mais rápido!)
  • 🛡️ Segurança: Zero vulnerabilidades
Implementar segurança desde o início é MUITO mais fácil que consertar depois. Lesson learned! Criptografia pesada numa extensão do Chrome? Sério mesmo? Às vezes a solução mais simples é a melhor. Não adianta ter a extensão mais segura do mundo se ninguém consegue usar. Equilíbrio é tudo! Logs detalhados e debugging sistemático foram essenciais para identificar onde estava o gargalo. O sistema de logging que implementei foi crucial para identificar os gargalos de performance. Com logs estruturados e timing preciso, consegui mapear exatamente onde o processo estava lento. Agora o Startlar está:
  • Autenticação instantânea com Google
  • Widget aparece automaticamente no site da Caixa
  • Performance otimizada e segura
  • Zero vulnerabilidades detectadas
  • Frontend: Chrome Extensions API, JavaScript vanilla
  • Autenticação: Google OAuth 2.0, Supabase Auth
  • Storage: Chrome Storage API com validação JWT
  • Segurança: CSP, sanitização de dados, princípio de menor privilégio
  • Tempo de autenticação: aproximadamente 3 segundos
  • Linhas de código: cerca de 500 linhas (otimizadas)
  • Tempo de desenvolvimento: alguns dias de debugging intensivo
  • Região do Supabase: Brasil (latência baixa)
  • Integração com IA para análise real dos editais
  • Processamento de PDFs
  • Sistema de alertas inteligentes
  • Dashboard web complementar
  • Histórico de análises
  • Publicação na Chrome Web Store
  • Monitoramento de uso e performance
Esse Dia 2 me ensinou que segurança e performance não são inimigos - eles são complementares quando você encontra o equilíbrio certo. A chave é implementar a segurança necessária para o seu contexto, não toda segurança possível. E sabe qual foi a lição mais valiosa? Às vezes a melhor solução não é a mais complexa, mas a mais adequada ao problema que você está resolvendo. A transformação de uma extensão com vulnerabilidades críticas em um sistema seguro e rápido foi um desafio técnico fascinante. O resultado final: uma ferramenta que os usuários realmente querem usar, sem comprometer a segurança.
Próximo capítulo: vamos colocar IA de verdade nessa extensão! Stay tuned! 🤖
Quer saber mais sobre desenvolvimento seguro de extensões Chrome ou tem alguma dúvida sobre o projeto? Entre em contato!