socorrist.app

Mi clave de Stripe está en el código público

Stripe te da dos claves y solo una de ellas es un secreto. La publicable, que empieza por pk_, va en el navegador a propósito para que funcione el formulario de pago. La secreta, que empieza por sk_, permite cobrar, devolver dinero y leer los datos de tus clientes. Si la que está en tu código empieza por sk_, ese es el problema.

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.

Por qué te pasa

Porque hacer un cobro de verdad requiere la clave secreta, y la forma más corta de que un cobro funcione es llamar a Stripe directamente desde el navegador con ella. Funciona a la primera. La alternativa correcta, que es crear una función de servidor que haga la llamada, son bastantes más pasos y no siempre sale sola.

También ocurre al copiar del panel de Stripe, donde las dos claves están juntas, o al configurar las variables de entorno con el prefijo que las publica en el navegador. Ahí no hay ni siquiera una decisión: la variable estaba bien y el prefijo la sacó a la calle.

Conviene saber qué está en juego, sin dramatizar. Con una clave secreta se pueden emitir devoluciones hacia otra tarjeta, consultar el listado completo de tus clientes con sus correos y sus importes, y crear cobros. No vacía tu cuenta bancaria de golpe, pero sí puede sacarte dinero y desde luego expone datos de tus clientes que son responsabilidad tuya.

Lo que este error no significa

Arréglalo tú, gratis

Stripe permite tener varias claves secretas activas a la vez, y eso hace que este arreglo se pueda hacer sin cortar los cobros ni un minuto. Aprovéchalo: es lo que distingue hacerlo con calma de hacerlo con la tienda cerrada.

  1. 1Entra en tu panel de Stripe y ve a los registros de actividad y a la lista de pagos y devoluciones de los últimos días. Busca devoluciones que no reconozcas y cobros extraños. Hazlo antes de tocar nada.
  2. 2En Developers y luego API keys, crea una clave secreta nueva. No borres todavía la vieja: durante un rato van a convivir las dos, y eso es lo que evita el corte.
  3. 3Coloca la clave nueva en las variables de entorno de tu servidor, sin prefijo VITE_ ni NEXT_PUBLIC_. Si tu app no tiene todavía una parte de servidor donde ponerla, ese es el trabajo de fondo que hay que hacer, y va en el prompt de abajo.
  4. 4Saca la clave del código del navegador y despliega. Prueba un cobro real de importe mínimo para confirmar que el pago sigue funcionando por la vía nueva.
  5. 5Ahora sí, revoca la clave antigua en Stripe. A partir de ese momento, la copia que tuviera cualquiera deja de valer.
  6. 6Revisa por último si tenías webhooks configurados: si el secreto de firma del webhook también estaba publicado, hay que regenerarlo igual, o alguien puede fingir pagos que tu app dará por buenos.

Si al sacar la clave del navegador dejan de funcionar los cobros, es exactamente lo que tenía que pasar: significa que se estaban haciendo desde ahí. La solución no es devolverla, es mover esa llamada a un servidor.

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 pegarle a tu agente

En mi app ha acabado publicada una clave secreta de Stripe (empieza por sk_) en el código que llega al navegador.

Necesito que hagas esto:
1. Búscala en todo el proyecto y dime en qué ficheros y con qué variable aparece, sin pegarme el valor completo.
2. Dime qué operaciones de Stripe se están haciendo desde el navegador con esa clave: cobros, devoluciones, consultas de clientes o lo que sea.
3. Crea una función de servidor por cada una de esas operaciones, de forma que el navegador solo pida "quiero pagar esto" y sea el servidor quien hable con Stripe con la clave secreta. El navegador debe quedarse únicamente con la clave publicable.
4. Comprueba si hay un endpoint de webhook de Stripe y si verifica la firma. Si no la verifica, corrígelo: sin esa comprobación cualquiera puede simular un pago.
5. Deja el .env.example indicando claramente qué clave va en el servidor y cuál puede ir en el navegador.

No revoques ni cambies ninguna clave: la rotación la hago yo en el panel de Stripe, en un orden concreto para no cortar los cobros.

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.

Cita a partir de mañana

Agendar revisión

99 €

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

199 €

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 lo arregla

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.