>_ Black Engine

API key expuesta: qué hacer (y si subiste tu .env a GitHub)

Por Black Engine · 6 de noviembre de 2026

Si una API key quedó expuesta (en GitHub, en el código de tu página, en un chat o en una captura de pantalla), lo que hay que hacer, en este orden, es: 1) revocar o rotar la llave en el servicio que la emitió, 2) poner la nueva en un lugar seguro, 3) revisar si alguien la usó (cargos, accesos, datos) y 4) limpiar el lugar donde se filtró. Borrar el archivo no invalida la llave: solo el servicio puede hacerlo.

Paso 1: revoca la llave (ya)

Entra al panel del servicio, busca la sección de llaves (API keys, Credentials, Tokens) y revoca/elimina la expuesta. Luego crea una nueva.

Servicio Dónde se cambia (puede variar por versión)
OpenAI Panel de la plataforma → API keys → borrar y crear nueva
Anthropic (Claude) Console → API Keys
Google (Gemini, Maps) Google Cloud Console o AI Studio → Credenciales
Stripe Dashboard → Developers → API keys → Roll key
Mercado Pago Panel de desarrolladores → Tus integraciones → Credenciales
Supabase Settings → API Keys (ve la guía específica)
AWS IAM → usuario → Security credentials → desactivar y borrar la access key
GitHub token Settings → Developer settings → tokens

Si la llave la usa una app que está en producción, prepárate: al revocarla, la app dejará de funcionar hasta que pongas la nueva. Aun así, revocar va primero si la llave tiene permisos de cobro o acceso a datos.

Paso 2: guarda la nueva llave donde debe ir

  • Llaves secretas (OpenAI, Stripe secret, Supabase service_role, AWS): solo en el servidor: variables de entorno del hosting (Vercel, Netlify, Replit Secrets, Lovable Secrets), Edge Functions o tu backend.
  • Nunca en el frontend. En apps con Vite, cualquier variable que empiece con VITE_ termina en el navegador. Ve variables de entorno en Vite y React.
  • Llaves públicas por diseño (Supabase anon/publishable, Stripe publishable pk_, Google Maps restringida por dominio) sí pueden ir en el navegador.

Si no tienes claro qué es un .env, lee qué es el archivo .env.

Paso 3: revisa si alguien la usó

  • Facturación: cargos inusuales en OpenAI, Google Cloud, AWS, Twilio, etc.
  • Logs de uso: peticiones de IPs o países raros, picos de consumo.
  • Datos: en bases de datos, registros borrados, usuarios nuevos que no conoces.
  • Pagos: en Stripe o Mercado Pago, reembolsos o cambios de cuenta bancaria que no hiciste.

Pon límites de gasto y alertas en todos los servicios que cobran por uso. Si encuentras cargos que no hiciste, contacta al soporte del servicio cuanto antes.

Paso 4: .env en GitHub, cómo limpiarlo

Si el .env todavía está en el repositorio

# 1. Sácalo del repositorio (el archivo se queda en tu computadora)
git rm --cached .env

# 2. Que Git lo ignore de ahora en adelante
echo ".env" >> .gitignore
echo ".env.*" >> .gitignore
echo "!.env.example" >> .gitignore

git add .gitignore
git commit -m "Quitar .env del repositorio"
git push

El historial sigue teniéndolo

Aunque lo borres, el archivo vive en commits anteriores. Opciones:

  1. Lo importante ya lo hiciste: rotar las llaves. Con llaves nuevas, las viejas del historial no sirven.
  2. Si quieres borrarlo también del historial, la herramienta recomendada es git filter-repo. Reescribe la historia del repositorio: todos los que tengan una copia tendrán que volver a clonarlo, y puede romper ramas abiertas. Haz un respaldo antes.
# Requiere instalar git-filter-repo
git filter-repo --path .env --invert-paths
git push --force --all

Si no estás seguro de lo que hace un --force, no lo hagas en un repositorio compartido sin ayuda.

Usa un .env.example

Sube un archivo con los nombres de las variables pero sin valores, para que otros sepan qué configurar:

# .env.example
VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=
OPENAI_API_KEY=

Cómo evitar que vuelva a pasar

  • Activa la protección de secretos de GitHub (secret scanning y push protection) en la configuración de seguridad del repositorio; bloquea pushes que contienen llaves conocidas.
  • .gitignore desde el día uno, con .env incluido.
  • No pegues llaves en chats de IA (Lovable, ChatGPT, Cursor). Usa la sección de secretos de la herramienta.
  • No compartas pantallas o capturas con el .env abierto.
  • Permisos mínimos: crea llaves con solo los permisos necesarios y, si el servicio lo permite, restringidas por dominio o IP.
  • Una llave por app o componente, para que una fuga no obligue a cambiar todo.

Errores comunes

  • Hacer el repo privado y ya. No invalida la llave.
  • Esperar a ver si pasa algo. Los bots que buscan llaves no esperan.
  • Rotar la llave pero dejarla en el frontend otra vez.
  • Olvidar otros lugares: Vercel, Netlify, Replit, n8n, Zapier, tu servidor; todos donde estaba la vieja necesitan la nueva.

En resumen

Si tu API key quedó expuesta: revócala, crea otra, guárdala solo en el servidor, revisa cargos y accesos, y limpia el .env de GitHub. Si tu app hecha con IA tiene llaves regadas por el frontend y no sabes cuáles son peligrosas, o necesitas rotarlas sin tumbar tu sitio, en Black Engine lo revisamos contigo por WhatsApp. Para una revisión más completa, usa nuestra checklist de seguridad para apps hechas con IA.

Preguntas frecuentes

Borré el archivo .env de GitHub, ¿ya estoy a salvo?

No. El archivo sigue en el historial de commits y pudo ser copiado en minutos. Hay que revocar la llave y crear una nueva.

¿Qué tan rápido pueden usar mi llave expuesta?

Muy rápido. Hay programas que revisan repositorios públicos todo el tiempo buscando llaves. Actúa como si ya la hubieran visto.

¿Me pueden cobrar por una API key robada?

Sí. Con llaves de servicios que cobran por uso (IA, nube, SMS, correo) alguien puede generar cargos a tu cuenta. Revisa tu facturación y pon límites de gasto.

¿Hacer privado el repositorio soluciona el problema?

No por sí solo. Si fue público aunque sea un rato, la llave pudo copiarse. Hacerlo privado evita nuevas exposiciones, pero igual tienes que rotarla.

Pide ayuda por WhatsApp