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
Esos prefijos no son un formalismo del nombre: son una instrucción. Le dicen a la herramienta que construye tu app que esa variable debe copiarse dentro del código que se descarga el navegador. Ponerle ese prefijo a un secreto es, literalmente, pedir que se publique.
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 una trampa perfecta. Una variable sin prefijo no llega al navegador, así que la app da un error diciendo que falta. Se busca el error, y todo el mundo, documentación incluida, responde lo mismo: ponle el prefijo. Se pone, el error desaparece, la app funciona. Y si esa variable era un secreto, acaba de quedar publicada. La solución correcta para una clave pública es exactamente la equivocada para una privada, y el síntoma es idéntico.
El motivo de fondo es que el navegador no puede guardar secretos. Todo lo que necesita el código que se ejecuta en el navegador tiene que viajar hasta él, y por tanto es legible. Cuando una operación necesita una credencial de verdad, la respuesta no es hacérsela llegar al navegador: es que esa operación no debe ocurrir en el navegador.
Estas son las que nunca deben llevar prefijo, pase lo que pase: la service_role de Supabase, cualquier clave secreta de Stripe, las claves de OpenAI o de cualquier proveedor de IA, las credenciales de AWS, las contraseñas de correo saliente y los secretos de firma de webhooks. Si alguna de estas tiene prefijo hoy, está publicada.
Primero averigua qué se ha publicado exactamente, luego decide, y solo al final toca. El escáner de arriba te contesta a la primera parte en treinta segundos, pero puedes comprobarlo tú mismo a mano.
Si al quitar el prefijo se rompe una parte de la app, no vuelvas a ponerlo. Que se rompa es la prueba de que esa operación se estaba haciendo desde el navegador con una credencial que no debía estar ahí.
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 hay variables de entorno con prefijo VITE_ o NEXT_PUBLIC_ que contienen secretos, y por tanto se están publicando en el código del navegador. Necesito que hagas esto: 1. Lista todas las variables de entorno que usa el proyecto, separadas en dos grupos: las que llegan al navegador por llevar prefijo y las que no. Dime para qué se usa cada una. 2. Señálame cuáles del primer grupo son credenciales que no deberían ser públicas. No me pegues sus valores. 3. Por cada una de esas, dime exactamente qué parte del código la usa y qué hace, y propón cómo mover esa operación a una función de servidor para que la credencial deje de necesitarse en el navegador. 4. Prepara el código para leer esas credenciales desde variables sin prefijo, y deja escrito en el fichero .env.example qué variable va en cada sitio, con un comentario que diga cuáles no deben llevar prefijo nunca. No revoques nada tú ni me digas que basta con renombrar la variable: las claves ya publicadas las roto yo en cada servicio.
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
99 €
Elegimos hueco, miro tu app con calma y te digo qué pasa y cómo se arregla.
Hoy, en cola prioritaria
199 €
Entras en la cola de hoy. Reservas hueco y lo dejamos resuelto en el día.
Marc Sala
IT Manager
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.