Analise uma página pública à procura de 25 tipos de segredos expostos
As aplicações feitas por vibe coding enviam muitas vezes chaves para o navegador. Indique o endereço de uma só página sua e o scanner lê o HTML dessa página e os ficheiros de script que ela liga, à procura de chaves API, tokens e URLs de bases de dados que um visitante podia copiar. Os valores são mostrados mascarados.
Resultado
O que esta análise não consegue ver
O scanner lê apenas os ficheiros que o navegador de um visitante descarrega da página. Não vê segredos que ficam no servidor, páginas atrás de um login, ficheiros carregados mais tarde por import() nem source maps. Um resultado limpo não prova que a aplicação é segura.
Os 25 tipos de chave
20 deles são segredos que nunca devem chegar a um navegador. 5 são públicos por definição.
As chaves marcadas como públicas, como uma chave anon do Supabase, uma apiKey do Firebase ou uma chave publicável do Stripe, destinam-se ao navegador. Só são seguras enquanto as regras da sua base de dados protegerem os dados por trás delas.
| Tipo de chave | ID | Gravidade | Natureza |
|---|---|---|---|
| Chave API da OpenAI | openai-key | Crítica | Segredo |
| Chave API da Anthropic | anthropic-key | Crítica | Segredo |
| Chave secreta live do Stripe | stripe-secret | Crítica | Segredo |
| Chave secreta de teste do Stripe | stripe-test-secret | Média | Segredo |
| Chave publicável do Stripe | stripe-publishable | Info | Público por definição |
| ID de chave de acesso da AWS | aws-access-key | Alta | Segredo |
| Chave de acesso secreta da AWS | aws-secret | Crítica | Segredo |
| Token do GitHub | github-token | Crítica | Segredo |
| Chave API do Google | google-api-key | Info | Público por definição |
| apiKey da configuração web do Firebase | firebase-web-config | Info | Público por definição |
| Chave service_role do Supabase | supabase-service-role-jwt | Crítica | Segredo |
| Chave anon do Supabase | supabase-anon-jwt | Info | Público por definição |
| JSON Web Token | jwt-other | Baixa | Segredo |
| Chave secreta do Supabase | supabase-secret-key | Crítica | Segredo |
| Chave publicável do Supabase | supabase-publishable-key | Info | Público por definição |
| Token do Slack | slack-token | Crítica | Segredo |
| URL de webhook do Slack | slack-webhook | Alta | Segredo |
| Chave API do SendGrid | sendgrid-key | Crítica | Segredo |
| SID de chave API do Twilio | twilio-key | Alta | Segredo |
| Chave API do Mailgun | mailgun-key | Alta | Segredo |
| Bloco de chave privada | private-key-block | Crítica | Segredo |
| URL de base de dados com palavra-passe | database-url | Crítica | Segredo |
| Token do npm | npm-token | Crítica | Segredo |
| Token do Hugging Face | huggingface-token | Alta | Segredo |
| Chave API do Resend | resend-key | Alta | Segredo |
Perguntas
O que lê o scanner de segredos?
Lê o HTML da página e até 14 ficheiros de script que ela liga, 3 MB no total, os primeiros 512 KB da página e os primeiros 1 MB de cada ficheiro. Procura formatos de chave conhecidos, como chaves API, tokens de acesso, blocos de chave privada e URLs de bases de dados com palavra-passe.
Onde corre a análise e quanto tempo demora?
A análise corre no seu navegador; o nosso servidor apenas obtém os ficheiros para ela, um pedido por ficheiro. Nada é guardado. Num site lento, uma análise pode demorar até cerca de um minuto e meio.
O que não consegue o scanner ver?
Segredos que existem apenas no servidor, páginas atrás de um login, blocos que a página carrega mais tarde por import() e source maps. Também não consegue saber se uma chave encontrada ainda está ativa. Um resultado limpo não prova que a aplicação é segura.
Porque estão algumas chaves marcadas como públicas por definição?
Uma chave anon ou publicável do Supabase, uma apiKey do Firebase, uma chave API do Google e uma chave publicável do Stripe foram feitas para ser enviadas ao navegador. Identificam o seu projeto e só permitem o que as regras da sua base de dados, as restrições da API e as verificações do servidor autorizam. São indicadas para que possa confirmar que essas regras existem, não porque a chave em si seja uma fuga.
O que devo fazer se um segredo real for exposto?
Rode-o primeiro: crie uma chave nova no fornecedor e revogue a antiga. Depois passe a chave nova para código do lado do servidor ou variáveis de ambiente e volte a fazer o deploy. Apagar a chave do código não basta, porque o valor antigo continua em builds anteriores, caches e no histórico do git.
Porque é que as aplicações feitas por vibe coding expõem chaves com tanta frequência?
O código escrito depressa com ferramentas de IA chama muitas vezes uma API paga ou privilegiada diretamente a partir do navegador, e a chave acaba no script que todos os visitantes descarregam. A segurança no vibe coding começa por manter essas chamadas no servidor.