Como Manter as Chaves de API Seguras no Seu App
Para manter as chaves de API seguras, guarde-as como segredos ou variáveis de ambiente na sua hospedagem, use-as apenas em código do servidor e nunca as cole em chats, arquivos de código, capturas de tela ou em um repositório Git. Dê a cada chave a menor permissão de que ela precisa, defina limites de gasto no provedor e, se uma chave vazar, troque-a — crie uma nova e apague a antiga — em vez de apenas escondê-la do lugar onde apareceu.
Uma chave de API é a senha de um serviço. Sua chave da OpenAI permite que alguém gaste o seu dinheiro com IA; sua chave secreta da Stripe permite emitir reembolsos; sua chave do provedor de e-mail permite enviar mensagens em seu nome. Os construtores de apps com IA são bons em conectar essas chaves, mas nem sempre são cuidadosos com o lugar onde elas acabam. Este guia mostra como mantê-las seguras e como verificar.
Chaves públicas x chaves secretas
Nem toda chave é secreta. Saber a diferença evita que você entre em pânico com a chave errada e ignore a certa.
| Tipo | Exemplos | Pode ficar no navegador? |
|---|---|---|
| Chaves públicas / publicáveis | Chave pk_… da Stripe, chave de mapas restrita ao seu domínio, alguns IDs de analytics | Sim — foram feitas para isso |
| Chaves secretas | sk_… da Stripe, chaves da OpenAI e da Anthropic, chaves de provedores de e-mail, senhas de banco de dados | Nunca |
| Chaves de serviço/administrador | Chaves que contornam as regras de acesso de um banco de dados hospedado | Nunca — trate como as mais sensíveis |
Se não tiver certeza de que tipo é uma chave, consulte a documentação do provedor. Na dúvida, trate-a como secreta.
Passo 1: Guarde as chaves como segredos, não no código
As chaves pertencem às variáveis de ambiente ou às configurações de segredos da sua hospedagem. O seu código as lê pelo nome em tempo de execução (por exemplo process.env.OPENAI_API_KEY), então o valor nunca aparece nos seus arquivos. Para entender o básico, veja o que são variáveis de ambiente e segredos.
Mova cada chave de API do código para variáveis de ambiente. Liste cada chave que você encontrou, em qual arquivo estava e o nome da variável que você usou. Não mostre os valores.
Depois, confira se não sobrou nada:
Pesquise em todo o projeto, incluindo arquivos de configuração e qualquer arquivo .env, qualquer coisa que pareça uma chave de API ou senha. Informe o arquivo e a linha, não o valor.
Passo 2: Use chaves secretas somente no servidor
Esta é a regra mais importante. Tudo o que o navegador recebe, um visitante pode ler — o código-fonte da página e os arquivos JavaScript estão todos visíveis nas ferramentas de desenvolvedor.
Por isso, se o app precisa chamar a OpenAI, o navegador deve chamar o seu servidor, e o seu servidor chama a OpenAI com a chave. A chave nunca sai do servidor.
O recurso de chat chama a OpenAI diretamente do navegador. Mova essa chamada para uma rota de API no servidor que lê OPENAI_API_KEY do ambiente. O navegador deve chamar apenas a nossa rota. Exija login para acessar a rota.
Fique atento a uma armadilha comum em frameworks de frontend: as variáveis com prefixo público — VITE_ no Vite, NEXT_PUBLIC_ no Next.js — são incorporadas ao código do navegador de propósito. Uma chave secreta com um desses prefixos fica exposta, mesmo estando "em uma variável de ambiente".
Passo 3: Teste se nada vaza
Não confie que funcionou — confira o site no ar:
- Abra o app publicado em um navegador.
- Abra as ferramentas de desenvolvedor e a aba Sources ou Network.
- Pesquise em todos os arquivos pelos primeiros caracteres de cada chave secreta (por exemplo
sk_ousk-). - Veja as requisições de rede que o app faz. Uma requisição indo direto do navegador para um provedor de IA pago é um sinal de alerta.
Se encontrar uma chave secreta, mova-a para o servidor (passo 2) e troque-a (passo 6), porque ela já estava pública.
Passo 4: Restrinja o que cada chave pode fazer
Muitos provedores permitem limitar uma chave:
- Chaves restritas ou com escopo que só podem fazer o que o seu app precisa. A Stripe, por exemplo, oferece chaves restritas com permissões específicas.
- Restrições por domínio ou IP para chaves que precisam ser públicas, como as de mapas.
- Chaves separadas por app e por ambiente, para que um vazamento não exponha tudo e revogar uma não quebre as outras.
- Chaves de teste durante a construção, e chaves reais apenas no app publicado.
Passo 5: Coloque um teto nos danos
Até uma chave bem protegida pode ser mal usada pelo seu próprio app — alguém automatizando o seu recurso de IA milhares de vezes, por exemplo.
- Configure limites ou alertas de gasto em todos os provedores pagos.
- Exija login para qualquer recurso que custe dinheiro a cada uso.
- Adicione um limite de uso por usuário. Veja o que é limitação de taxa (rate limiting).
Adicione um limite de 30 requisições de IA por usuário por hora em /api/chat. Mostre uma mensagem clara quando o limite for atingido. Rejeite requisições de usuários que não estão logados.
Passo 6: Troque as chaves que vazaram
Se uma chave secreta aparecer em algum lugar onde não deveria — uma mensagem de chat, um commit, uma captura de tela, um chamado de suporte, código do navegador —, considere que ela está comprometida.
- Crie uma nova chave no provedor.
- Atualize o segredo nas configurações do seu app.
- Refaça o deploy ou publique de novo para que o app no ar use a nova chave.
- Apague a chave antiga no provedor.
- Confira os registros de uso do provedor para atividades que você não reconhece.
Apagar a mensagem do chat ou o commit do Git não basta. O histórico do Git guarda versões antigas, e tudo o que foi público pode já ter sido copiado.
Erros comuns
- Colar uma chave no prompt. Ela fica no histórico do chat. Use um formulário de segredos.
- Um prefixo público em uma variável secreta.
VITE_OPENAI_API_KEYenvia a chave para todos os visitantes. - Commitar um arquivo
.env. Garanta que ele esteja no.gitignoreantes do primeiro push. - Uma chave para tudo. Use chaves separadas para teste e produção, e para cada app.
- Sem limite de gasto. Uma chave vazada ou abusada sem teto pode gerar uma conta grande antes de você perceber.
- Esconder em vez de trocar. Depois que uma chave foi exposta, só uma nova resolve.
- Chaves em capturas de tela. Recorte ou desfoque as páginas de configuração antes de compartilhá-las para pedir ajuda.
Checklist
- Cada chave está guardada como segredo ou variável de ambiente, não no código.
- Nenhum arquivo
.envou chave está commitado no Git. - Chaves secretas são usadas somente em código do servidor.
- Nenhuma variável secreta usa um prefixo público como
VITE_ouNEXT_PUBLIC_. - Pesquisei o JavaScript do site no ar pelo prefixo de cada chave e não encontrei nada.
- As chaves têm escopo ou restrições onde o provedor permite.
- Chaves de teste e de produção são separadas.
- Recursos pagos exigem login e têm limites por usuário.
- Todo provedor pago tem um teto ou alerta de gasto.
- Sei como trocar cada chave, e qualquer chave que já foi exposta foi trocada.
Mantendo as chaves seguras na Mythex
A Mythex mantém as chaves fora do seu código e do chat de duas formas:
- Cartão de pedido de segredos. Quando o agente precisa de uma chave, ele mostra um cartão no chat em que você digita o valor em campos de formulário, não na caixa de mensagem, e ele é guardado como segredo do projeto. Veja Segredos no chat.
- Configurações do projeto → Secrets, ou
/secretsno chat, para adicionar ou alterar chaves você mesmo. Veja Variáveis de ambiente e segredos.
Depois de alterar um segredo de um app publicado, publique de novo para que o app no ar o use. Projetos exportados não incluem os segredos, então adicione-os de novo onde for rodar o código. Se uma chave aparecer no chat, troque-a no provedor.
Para o restante da revisão de segurança antes do lançamento, siga a lista de verificação de segurança para apps criados com IA. Se você está adicionando recursos de IA, como usar APIs de LLM explica chaves e custos com mais profundidade.
Perguntas
É seguro colocar uma chave de API no código do frontend?
Só se o provedor tiver desenhado essa chave para ser pública, como a chave publicável da Stripe ou uma chave de mapas restrita ao seu domínio. Qualquer chave que possa gastar dinheiro ou ler dados privados deve ficar no servidor, porque tudo o que é enviado ao navegador pode ser lido por qualquer pessoa.
O que fazer se eu colei uma chave de API em um chat ou em um repositório público?
Troque a chave: crie uma nova no provedor, atualize os segredos do app, publique de novo e depois apague a antiga. Apagar a mensagem ou o commit não basta, porque cópias podem já existir.
Onde as chaves de API devem ser guardadas?
Nas variáveis de ambiente ou nas configurações de segredos da sua hospedagem, lidas pelo código do servidor em tempo de execução. Elas não devem ser escritas em arquivos de código, commitadas no Git nem aparecer em capturas de tela.
Como sei se minha chave de API está exposta no meu site?
Abra o seu site no ar, veja o código-fonte da página e os arquivos JavaScript nas ferramentas de desenvolvedor do navegador, e procure o início da chave. Se ela aparecer, está exposta e deve ser movida para o servidor e trocada.