~/VibeHandbook
PDF gratis

Capítulo 18 · 03

Secretos y claves de API: la trampa de la clave expuesta

Un es cualquier cosa que otorga acceso: claves de (Application Programming Interface, Interfaz de Programación de Aplicaciones), contraseñas de bases de datos, tokens de proveedores de pago, claves de firma. El error de vibe coding más común — y más caro — es filtrar uno.

Dos trampas atrapan a la gente constantemente:

  • Secretos en el código del cliente. Todo lo que está en tu (el JavaScript que se ejecuta en el navegador) es público. Los usuarios pueden abrir las herramientas de desarrollador y leerlo. La IA, cuando se le pide que llame a una API desde un componente de React, pegará alegremente tu clave secreta ahí mismo — y ahora cualquiera que visite tu sitio puede copiarla y disparar tu factura. Las claves secretas pertenecen al servidor, nunca al código que se envía al navegador.
  • Secretos en el repositorio. Una clave escrita directamente en un archivo se termina subiendo a . Aunque la borres más tarde, sigue viva para siempre en el historial de git, y hay bots que escanean repositorios públicos buscando justo esto a los pocos minutos de un push.

El lugar correcto para un secreto es una — un valor que se le suministra a la app en tiempo de ejecución, mantenido completamente fuera del código:

// VULNERABLE: key is in the source, will be committed to git
const stripe = new Stripe("sk_live_51H8xQ2eZvK...");

// SAFE: key is read from the environment, never written in code
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

Un secreto tiene exactamente un hogar seguro: del lado del servidor, leído desde el entorno. El navegador es un lugar público: cualquier cosa enviada ahí puede leerla cualquiera que abra las herramientas de desarrollador.

            ┌──────────────────────────────────────────┐
            │  .env  (gitignored, never committed)      │
            │  STRIPE_SECRET_KEY=sk_live_...            │
            └───────────────────┬──────────────────────┘
                                │ injected at runtime
                                ▼
   ┌──────────────────────┐          ┌──────────────────────┐
   │   SERVER             │          │   BROWSER (client)    │
   │   process.env.KEY ✓  │   ✗──────│   anyone can read     │
   │   calls Stripe here  │  NEVER   │   dev tools · "view   │
   │                      │  send    │   source" · network   │
   └──────────────────────┘  here    └──────────────────────┘
        safe: stays private              public: = leaked

Añade .env (y .env.local, etc.) a tu .gitignore antes de escribir un solo secreto. Si alguna vez una clave termina en tu código o en tu historial, trátala como quemada: rótala (genera una nueva y revoca la vieja) — borrar la línea no basta, porque la clave vieja sigue siendo válida y sigue estando ahí fuera.

¿Lo quieres sin conexión?

Descarga el libro entero en PDF o EPUB — gratis.