¿Es segura tu app de Replit?
¿Vale Replit para alojar una app de verdad? Construir y publicar son un solo paso, lo cual es cómodo, y es justo lo que hace que valga revisar.

Los logotipos son propiedad de sus respectivos dueños y se muestran solo para indicar compatibilidad.
En resumen
- Una app de Replit es segura de alojar, pero construir y publicar son un mismo gesto: no hay un paso de despliegue en el que atrapar un error.
- Replit Secrets mantiene una clave fuera de tus archivos. No puede mantenerla fuera del navegador si es tu código de navegador quien la lee.
- Si tus datos están en Supabase, el ajuste que decide quién puede leerlos es Row Level Security, y se pone tabla por tabla.
Replit ejecuta tu app y la publica desde el mismo sitio en el que la construyes. Ahí está la mayor parte de su atractivo, y también significa que la distancia entre «he cambiado algo» y «internet lo puede ver» es prácticamente cero. No hay un paso de despliegue aparte en el que detenerse a pensar.
Aquí está lo que guía tras guía cuenta mal: guardar una clave en un gestor de secretos no la hace privada. El gestor decide dónde reposa el valor. Tu código decide a dónde viaja, y si tu código lo lleva a un navegador, ahí acaba.
Qué le entrega una app de Replit publicada a un visitante
Toda su fachada, siempre.
Piénsalo como una tienda. Las páginas, formularios y botones de tu app son el escaparate, entregado entero a cada visitante que carga tu web: un navegador no puede pintar una página que no le enviaron. Tus datos viven en el almacén, un edificio aparte en internet con su propia dirección y su propia cerradura.
El matiz que se escapa en Replit es dónde cae la frontera. El código que se ejecuta en el servidor y el que se ejecuta en el navegador del visitante están en el mismo proyecto, muchas veces en archivos contiguos. Un valor leído en el servidor se queda en el servidor. Ese mismo valor leído por código de navegador se compila dentro de lo que publicas. Replit Secrets mantiene una clave fuera de tus archivos fuente, lo cual es de verdad útil, pero no puede decidir qué mitad de tu app la lee.
¿Es malo que mi app de Replit lleve una clave dentro?
Normalmente no. Depende de cuál sea, y hay dos que se parecen casi por completo.
Una clave publicable identifica tu proyecto y nada más. Supabase la llama
sb_publishable_… en los proyectos nuevos y anon en los antiguos, y está hecha
para vivir en un navegador. Una clave secreta (sb_secret_…, o
service_role antes del cambio de nombre) ignora todas las reglas que hayas
puesto y lee y escribe cada fila de cada tabla.
Si un escáner te dice que una clave está expuesta, esto es lo primero que hay que establecer, porque una de ellas es un martes cualquiera y la otra merece que te detengas. La comprobación lleva un minuto.
Y «nadie conoce mi URL» no es una defensa. Hay rastreadores automáticos leyendo webs públicas en busca justo de estas cadenas, sin parar, sin la menor idea de quién eres.
Qué decide si un desconocido puede leer tus datos
Las reglas de tu base de datos, que no forman parte en absoluto de tu proyecto de Replit.
Si tus datos están en Supabase, el ajuste es Row Level Security: un interruptor por tabla que decide fila a fila quién puede leer qué. Apagado, tu clave publicable le devuelve la tabla entera a cualquiera. Encendido, con una política escrita, devuelve solo lo que esa política permite.
Dos cosas deciden si lo tienes, y ninguna se ve desde dentro de tu app. Supabase activa Row Level Security por defecto en las tablas creadas en el Table Editor del panel, y no en las creadas ejecutando SQL, que es como las crea un archivo de migración, o un asistente que escribe tu esquema. Y una tabla puede llevar el ajuste mientras su política sigue dejando pasar a todo el mundo, así que el interruptor por sí solo no restringe a nadie.
Quitar una página de tu app de Replit no cambia nada de esto. El almacén no sabe que tu escaparate existe.
Cómo revisar tu propia app de Replit en unos diez minutos
Averigua qué mitad lee cada secreto. Para cada clave del proyecto, busca el código que la usa y decide si ese código se ejecuta en el servidor o en el navegador. Todo lo que lea el navegador está publicado, se guardara donde se guardara.
Carga tu propia app publicada y abre las DevTools. La pestaña Red muestra exactamente lo que recibe un visitante. Es la misma vista que tiene alguien de fuera, y zanja la pregunta más rápido que leer archivos.
Abre Authentication → Policies en Supabase. Todo lo que muestre Row Level Security como desactivado lo puede leer cualquiera que tenga la dirección de tu proyecto.
Y luego mira bien desde fuera. Para eso está nuestro escaneo gratuito: lee tu web en vivo igual que lo haría cualquier visitante y te da una nota en unos 20 segundos, sin cuenta: escanea tu app.
Qué hacer
- En Replit, construir y publicar son un mismo gesto. No hay un paso de despliegue en el que atrapar un error.
- Un gestor de secretos protege un valor en reposo. El código de navegador publica lo que lee, venga el valor de donde venga.
- Una clave publicable en tu app es correcta.
sb_secret_…yservice_roleson las que hay que renovar hoy. - Las tablas creadas ejecutando SQL empiezan sin Row Level Security, y encenderlo deja todas las filas legibles hasta que una política diga otra cosa.
- Una URL desconocida no es protección. Los rastreadores no necesitan saber quién eres para encontrar tu web.
Coge la clave que más usa tu app y sigue qué mitad de tu proyecto la lee: servidor o navegador. Esa única respuesta te dice más que cualquier cantidad de lectura, y la lista de seguridad en 10 minutos cubre el resto de la superficie cuando la tengas.
Qué puede salir mal de verdad con una app de Replit
Nada de esto significa que hicieras algo mal: son los efectos secundarios normales de construir rápido. Esto es lo que vale la pena comprobar:
Una clave secreta en tu código en vez de en Replit Secrets
Replit te da un gestor de Secrets para que las claves queden fuera de tu código. Pero es tentador pegar una clave directamente en un archivo para que funcione, y si ese archivo se ejecuta en el navegador, o tu Repl es público, cualquiera puede leerla. Reeve encuentra las claves en el código cargado de tu app y te dice cuáles son seguras de exponer y cuáles deben moverse.
Un Repl público que expone tu código fuente (y las claves)
En muchos planes, los Repls son públicos por defecto, lo que significa que tu código, y cualquier cosa escrita a fuego en él, puede ser leído por cualquiera con el enlace. Reeve comprueba qué expone tu app desplegada desde fuera, para que sepas si hay detalles privados visibles.
Tu base de datos abierta (RLS desactivado)
Si tu app guarda datos (en la base de datos de Replit, en Supabase o en otro Postgres), normalmente hay una regla sobre quién puede leer o cambiar cada fila. Si está desactivada o mal configurada, tus tablas pueden estar abiertas para cualquiera que encuentre la dirección. Es el problema serio más común, y se esconde hasta que lo compruebas.
Un archivo .env o de configuración expuesto
Las claves suelen vivir en un archivo .env que no debería publicarse. A veces acaba accesible en el sitio desplegado de todos modos, lo cual es un atajo a todo lo sensible. Reeve comprueba si el tuyo está accesible sin que lo sepas.
Source maps dejados activos
Un «source map» revela el código original de tu app a cualquiera que mire. Práctico mientras construyes, pero en producción da a extraños una copia legible de cómo funciona tu app y hace más fáciles de encontrar otras brechas. Reeve comprueba si los tuyos están expuestos.
Cabeceras de seguridad ausentes y endpoints abiertos
Pequeños ajustes que le dicen a los navegadores cómo proteger a tus visitantes, más si tus endpoints de datos responden a cualquiera o a cualquier sitio. Menores por sí solos; juntos amplían la brecha. Reeve señala lo que falta.
Qué es Reeve, y qué no
Reeve es una comprobación gratuita, de solo lectura y desde fuera, como un inspector que prueba las puertas sin entrar. Es rápida y detecta los errores comunes de alto impacto. No es una auditoría de seguridad completa, y una nota limpia no es garantía. Significa que las puertas obvias están cerradas.
Replit te da buenas herramientas (un gestor de Secrets y controles sobre si un Repl es público), y ayudan de verdad cuando las usas. Lo que Reeve añade: una comprobación de lo que tu app desplegada realmente expone desde fuera, por si una clave se coló en el código o un Repl es más público de lo que creías, explicado en palabras sencillas con las que puedes actuar. Y si prefieres no pensar en ello, podemos vigilarla por ti.
¿Quieres que se gestione, no solo que se compruebe?
Reeve Care sigue vigilando tu app, respalda tus datos y te ayuda a arreglar cosas cuando se rompen, para que puedas seguir creando en vez de preocuparte.
Conoce Reeve CarePreguntas frecuentes
¿Las apps de Replit son seguras por defecto?
Replit te da las piezas para ser seguro (Secrets, controles de despliegue), pero «por defecto» depende de si las claves quedaron en Secrets, si tu Repl es privado y si las reglas de tu base de datos están activadas. La única forma de saberlo es comprobar qué está expuesto, que es lo que Reeve hace gratis en unos 20 segundos.
¿Es seguro guardar claves de API en mi código de Replit?
Es mucho más seguro guardarlas en Replit Secrets que en tu código. Una clave escrita en un archivo puede leerse si ese código se ejecuta en el navegador o tu Repl es público. Reeve encuentra claves en tu app cargada y te dice cuáles son seguras de exponer y cuáles deben moverse a Secrets.
¿Puede la gente ver mi código si mi Repl es público?
Sí. Un Repl público significa que tu código fuente, y cualquier cosa escrita a fuego en él, puede ser leído por cualquiera con el enlace. Reeve comprueba qué revela tu app desplegada desde fuera para que puedas ver si hay detalles privados a la vista.
¿Analizar mi app de Replit romperá algo?
No. Reeve solo mira lo que ya es público desde fuera. Nunca inicia sesión, nunca cambia nada y nunca descarga tus archivos. Solo lectura, como comprobar si una puerta está cerrada sin entrar.
Puse mis claves en Replit Secrets en vez de en el código. ¿Las hace eso privadas?
Las mantiene fuera de tus archivos, lo cual merece la pena y resuelve un problema real. No hace privado un valor una vez que tu app se lo envía a un navegador. Si el código que usa la clave se ejecuta en el navegador del visitante, la clave viaja hasta ahí sin importar dónde estuviera guardada. Un gestor de secretos protege un valor en reposo, y es tu app la que lo saca hasta el visitante.
Mi app de Replit es pequeña y nadie conoce la URL. ¿Es suficiente?
No, y el motivo es que nadie tiene por qué conocerte. Hay rastreadores automáticos recorriendo webs públicas sin parar en busca de cadenas con forma de clave y de puntos de acceso de base de datos abiertos, sin la menor idea de quién es su dueño. Ser desconocido no es lo mismo que ser inalcanzable.
¿Dónde miro para saber si mi base de datos está abierta?
Si usas Supabase, abre el proyecto y ve a Authentication, luego a Policies. Ahí aparece cada tabla del esquema public con el estado de Row Level Security. Todo lo desactivado lo puede leer quien tenga la URL de tu proyecto y tu clave publicable, y las dos cosas están dentro de tu app publicada.