seguridad

Mi clave de OpenAI o de otro proveedor de IA está expuesta

La clave que usa tu app para hablar con OpenAI, Anthropic o el proveedor que sea está dentro del código que se descarga cualquiera que visite tu web. Esa clave no protege datos: autoriza gasto contra tu tarjeta.

Revisado en agosto de 2026

De paso

Compruébalo en tu app ahora, gratis

Esto no da la cara solo: tu app funciona igual de bien esté abierta o cerrada. La única forma de saberlo es mirar.

Solo leemos lo que tu app ya le entrega a cualquier visitante.

Diagnóstico

Por qué te pasa

Porque llamar a la API desde el navegador funciona a la primera y montar una función de servidor que haga de intermediaria no. Cuando el objetivo es ver la función de IA andando esta tarde, el camino corto gana. Muchos ejemplos oficiales, además, están escritos para ejecutarse en un servidor, y al copiarlos a una app de navegador la clave se va con ellos.

Estas claves son un caso aparte por la velocidad. Una clave de base de datos filtrada exige que alguien decida qué hacer con tus datos; una clave de IA filtrada tiene un valor inmediato y líquido para cualquiera, porque se revende el acceso. Hay bots dedicados a rastrear webs y repositorios buscando exactamente estos patrones, y encuentran una clave nueva en cuestión de horas.

La consecuencia no es sutil: es una factura. Los casos que se cuentan van de cientos a miles de euros consumidos en pocos días, y el proveedor cobra ese consumo porque técnicamente lo autorizó tu clave.

Lo que este error no significa

  • No significa que ya te estén gastando el dinero. Se comprueba en un minuto en el panel de uso de tu proveedor, y es lo primero que hay que mirar.
  • No significa que la función de IA de tu app esté mal hecha. La parte que da valor está bien: lo que está en el sitio equivocado es la credencial.
  • No es un problema que puedas dejar para el fin de semana. A diferencia de otras exposiciones, esta se explota sola y deprisa, y cada hora cuenta en dinero.

Solución

Arréglalo tú, gratis

Aquí el orden es el contrario al de otras claves: primero se corta, luego se arregla. Como el riesgo es económico y automático, es mejor que la función de IA de tu app deje de funcionar un rato a que siga funcionando la de otro con tu tarjeta.

  1. 01Entra en el panel de tu proveedor y revoca la clave ahora. En OpenAI está en API keys; en Anthropic, en la sección de claves de la consola. Esto rompe la función de IA de tu app de inmediato, y es lo que queremos.
  2. 02Mira el consumo de los últimos días en la sección de uso. Si ves picos que no encajan con tu tráfico real, la clave se estaba usando y conviene que hables con el proveedor: en casos de filtración suelen atender reclamaciones.
  3. 03Ponle un límite de gasto mensual a la cuenta si no lo tenía. Es la red de seguridad que hace que la próxima vez, si la hay, sea un susto y no una factura.
  4. 04Crea una clave nueva y guárdala en las variables de entorno de tu servidor, sin prefijo VITE_ ni NEXT_PUBLIC_. Si tu app no tiene parte de servidor, hay que crearla: es el trabajo real de este arreglo.
  5. 05Despliega y comprueba que la función de IA vuelve a funcionar llamando a través de tu servidor, y que en el navegador ya no aparece la clave por ningún lado.
  6. 06Añade un límite por usuario en tu propia función de servidor. Sin él, aunque la clave esté a salvo, cualquiera puede usar tu app en bucle y el gasto acaba siendo el mismo.

El último paso se salta casi todo el mundo y es el que separa un arreglo de un parche: si tu app permite llamar a la IA sin límite y sin identificarse, el coste sigue siendo ilimitado aunque la clave esté escondida.

Y esto para la parte de código

Pégaselo tal cual al agente que escribió tu app. Está redactado para que te diga lo que ha hecho, no solo para que lo haga.

Prompt para tu agente

En mi app está publicada la clave de la API de IA en el código del navegador. Ya la he revocado.

Necesito que hagas esto:
1. Encuentra todas las llamadas al proveedor de IA en el proyecto y dime cuáles se ejecutan en el navegador.
2. Crea una función de servidor que haga de intermediaria: el navegador le manda lo que quiere preguntar y ella llama al proveedor con la clave, que se lee de una variable de entorno sin prefijo público.
3. Añade en esa función un control de uso: un límite por usuario o por sesión y un tope razonable de tamaño de petición, para que nadie pueda usar mi app como barra libre de IA.
4. Asegúrate de que si la llamada falla, el usuario ve un mensaje comprensible y el error del proveedor no se muestra tal cual en pantalla.
5. Comprueba que no queda ninguna referencia a la clave en el código que se empaqueta para el navegador.

Dime al terminar qué variable de entorno tengo que dar de alta y dónde, y confírmame que no lleva prefijo VITE_ ni NEXT_PUBLIC_.

Si no sale

Si el escáner ha encontrado algo, no lo toques con prisa

Cerrar una puerta abierta tiene un orden: primero se corta el acceso, después se comprueba en los registros si alguien entró, y solo entonces se despliega. Hacerlo al revés deja la app caída y borra el rastro de lo que pasó. Si prefieres no hacerlo solo, elige cuándo lo hacemos.

Las 10 primeras apps son gratis. Estoy empezando y necesito casos reales. A cambio te pido permiso para contar después qué me encontré, sin decir de quién era la app ni enseñar tus datos. Sin tarjeta y sin suscripción: cuando se acaben las plazas empezaré a cobrar y lo diré aquí.

Cita a partir de mañana

Agendar revisión

Gratis

durante el lanzamiento

Elegimos hueco, miro tu app con calma y te digo qué pasa y cómo se arregla.

  • Sesión de trabajo en directo contigo
  • Diagnóstico del error y del riesgo real
  • Te quedas con el arreglo aplicado

Hoy, en cola prioritaria

Rescate exprés

Gratis

durante el lanzamiento

Entras en la cola de hoy. Reservas hueco y lo dejamos resuelto en el día.

  • Hueco el mismo día
  • Prioridad sobre las revisiones agendadas
  • Mismo trabajo, antes

Quién

Marc Sala

IT Manager

  • Analista de ciberseguridad certificado por Google

No es un rating anónimo de un marketplace: es la persona que va a entrar en tu app. Reviso el código, encuentro qué falla y lo arreglo contigo delante, explicándote qué ha pasado sin jerga.