← Guias
5 min de leitura

Chave da OpenAI (ou de qualquer API paga) no front-end: como descobrir e o que fazer

Chave de API no navegador é chave pública: alguém vai usar e você paga a conta. Como encontrar, por que o prefixo NEXT_PUBLIC_ e VITE_ entrega a chave, e como corrigir.

Todo o JavaScript do seu site é baixado por quem o visita. Se a chave da OpenAI, da Anthropic, do Stripe ou do Resend está ali, qualquer pessoa pode copiá-la e usar — gerando conta no seu cartão, enviando spam no seu nome ou esgotando o seu limite.

Sinais de que a chave está exposta

  • Variáveis com prefixo público guardando chave secreta: NEXT_PUBLIC_OPENAI_API_KEY, VITE_STRIPE_SECRET. O prefixo existe para mandar o valor ao navegador.
  • dangerouslyAllowBrowser: true no cliente da OpenAI — o nome já avisa.
  • A chamada para a API paga é feita de dentro de um componente da tela.
  • No site publicado, F12 → Sources, busque por sk-, sk_live_, re_ ou secret.

Como corrigir

A chave vai para o servidor, numa variável SEM prefixo público, e o site chama uma rota sua. Essa rota confere o login e, de preferência, limita quantas vezes cada pessoa pode chamar.

// app/api/resumo/route.ts — a chave fica só no servidor
import OpenAI from "openai";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // sem NEXT_PUBLIC_

export async function POST(req: Request) {
  const usuario = await usuarioLogado(req); // a sua conferência de sessão
  if (!usuario) return Response.json({ erro: "faça login" }, { status: 401 });

  const { texto } = await req.json();
  const r = await openai.chat.completions.create({
    model: "gpt-4o-mini",
    messages: [{ role: "user", content: texto }],
  });
  return Response.json({ resumo: r.choices[0]?.message.content });
}

E a chave que já vazou

  1. 1Revogue a chave no painel do provedor e gere outra. Mudar o código não invalida a antiga.
  2. 2Configure um limite de gasto mensal no provedor: é a rede de proteção para o próximo erro.
  3. 3Confira o uso dos últimos dias em busca de consumo que não é seu.

Chave publicável existe e pode ir para o site: a anon/sb_publishable_… do Supabase, a pk_… do Stripe, a do Google Maps restrita ao seu domínio. A regra é: se o nome ou a documentação diz "secret", ela nunca vai para o navegador.

Dicas curtas de segurança para quem cria com IA: siga @npx_vibedefender no Instagram.