En resumen
- Cada archivo que publicas lo puede leer cualquiera que pueda abrir el sitio, y un código de acceso no cambia lo que debe estar ahí. Deja fuera claves, contraseñas y datos de clientes.
- Sin servidor no significa sin riesgo. Cuidado con las claves pegadas, los scripts externos y el texto insertado con innerHTML.
- Si se filtra una clave, revócala primero. Eliminar el archivo no basta.
Qué se hace público
Esta es la regla que hay que recordar. Cuando publicas un sitio web, cualquiera que conozca la dirección puede descargar todos sus archivos. Eso incluye archivos que ninguna página enlaza. Ocultar el código con “minificar” u “ofuscar” lo hace más difícil de leer, no secreto.
| Tipo de archivo | ¿Público? | Ejemplo |
|---|---|---|
| HTML, CSS, JavaScript | Sí | Una clave de API escrita en script.js |
| Imágenes, PDF, descargas | Sí | Un PDF con lista de precios que ninguna página enlaza |
| Archivos de configuración | Sí | config.json con un token dentro |
Archivos .env | Sí, si se suben | Claves guardadas junto a tu proyecto |
Mapas de origen (.map) | Sí, si se suben | Copias legibles de tu código original |
La carpeta .git | Sí, si se suben | Historial antiguo con claves “eliminadas” |
| Archivos que no publicaste | No | Notas, borradores, el resto de tu proyecto |
Dónde se esconden las claves secretas
Las herramientas de IA son buenas haciendo que las cosas funcionen. A veces lo más rápido es pegar una clave directamente en el código. Busca esto:
- Claves en JavaScript. Un widget de chatbot que llama a un servicio de IA directamente desde la página, con la clave en el código. Cualquiera puede copiar esa clave y disparar tu factura.
- Archivos
.env. Los proyectos guardan claves en un archivo llamado.env. Debería quedarse en tu ordenador, pero se sube si publicas toda la carpeta del proyecto. - Archivos de configuración y compilación. Los archivos de ajustes, los mapas de origen y los archivos de prueba que sobran pueden contener claves o rutas que no querías compartir.
- La carpeta
.git. Esta carpeta oculta guarda todo el historial de tu proyecto, incluidas claves que se “eliminaron” hace tiempo.
Las claves públicas no son un problema
Algunas claves están pensadas para estar en una página web: una clave publicable de Stripe (pk_...), una clave de mapas restringida a tu dominio, un ID de estadísticas. La documentación del servicio indica si una clave es segura para el navegador. Si dice “secreta” o “solo del lado del servidor”, o empieza por sk_, nunca debe estar en tu sitio.
Si una función necesita un secreto
Si una función solo funciona con una clave secreta, un sitio web normal no puede hacerlo de forma segura por sí solo. Tus opciones:
- Usa un servicio hecho para eso: un servicio de formularios para los formularios de contacto, una herramienta de reservas para las citas, un checkout alojado para los pagos. Ellos guardan los secretos por ti.
- Pon el secreto detrás de una pequeña función de servidor en algún lugar que las admita, y haz que tu página llame a esa función.
- Olvídate de esa función por ahora. Un enlace de correo claro es mejor que una clave filtrada.
Pregúntale directamente a tu IA: “¿Contiene este sitio alguna clave secreta? Si es así, ¿cómo podemos hacer esto sin poner un secreto en el navegador?”. Suele detectar el problema cuando se lo preguntas.
Scripts que cargas de otros sitios
Muchas páginas hechas con IA cargan scripts de otros sitios web: un cargador de fuentes, un paquete de iconos, estadísticas, un widget de chat. Cada uno se ejecuta en tu página con todo el poder. Puede leer lo que escriben los visitantes y cambiar lo que ven. Si ese otro sitio sufre un ataque, tu página también.
- Usa menos. Pregunta: “¿Necesita esta página realmente cada script externo?”
- Fija la versión. Usa
library@1.2.3, no “latest”, para que el archivo no pueda cambiar sin que lo sepas. - Añade una comprobación de integridad cuando la biblioteca la publique. Entonces el navegador rechaza un archivo que ha sido alterado. Se ve así:
<script src="https://cdn.example.com/lib@1.2.3/lib.min.js" integrity="sha384-..." crossorigin="anonymous"></script>
- Revisa los widgets. Los widgets de estadísticas, chat y reservas a menudo añaden también cookies y rastreo. Sabe qué hace cada uno e indícalo en tu página de privacidad.
Poner texto en la página de forma segura
Si tu código toma texto de la barra de direcciones, de un cuadro de formulario o de un visitante y lo pone en la página con innerHTML, un atacante puede colar código que se ejecuta en los navegadores de otras personas. Esto se llama cross-site scripting, o XSS. El hábito seguro es insertar texto plano con textContent, que nunca se ejecuta como código.
Find every use of innerHTML, document.write and eval in my site. For each one, say where the text comes from. If it can come from the URL, a form or a visitor, change it to use textContent instead. Tell me what you changed.
Un chatbot en tu página
Un cuadro de chat que habla con una IA necesita una clave para llamar al servicio de IA. Esa clave va en un servidor, nunca en tu página. Dos cosas más que debes saber:
- Inyección de prompts. Los visitantes pueden escribir instrucciones pensadas para engañar al bot y que ignore las tuyas. No se puede evitar del todo.
- Así que limita el daño. No des al bot secretos ni acciones. Si solo responde preguntas a partir de texto público, un truco puede hacer poco daño.
Formularios y datos personales
- Recoge solo lo que necesitas. Un nombre y un correo suelen bastar. Cada campo extra es algo que tienes que proteger.
- Di adónde va. Tu página de privacidad debe decir quién recibe los mensajes y por qué.
- No crees tu propio almacenamiento. Una página normal no puede guardar mensajes de forma segura. Usa un servicio de formularios o uno integrado en tu host.
En Page Lemon, pídele a tu IA que “Añada un formulario de contacto a mi sitio”. Los mensajes te llegan por correo y se guardan en tu cuenta, sin un servicio de formularios aparte. Los formularios vienen con los planes de pago. Consulta Formularios de contacto.
Licencias y exactitud
- Revisa las licencias. Las bibliotecas, fuentes, iconos e imágenes externos tienen condiciones. Algunos exigen una mención, otros prohíben el uso comercial. Pídele a tu IA que enumere lo que usas y de dónde viene.
- Revisa los datos. La IA puede inventar precios, reseñas y afirmaciones. Tú eres quien las publicó.
- Quién es el dueño del trabajo escrito por IA depende del país y aún se está definiendo. Esto no es asesoramiento legal. Si es importante, consulta a un profesional.
Qué no pegar en tu IA
Tu sitio es público, pero tu chat no está pensado para serlo. No pegues en él:
- listas de clientes, pedidos o mensajes, a menos que sepas cómo trata esos datos tu servicio de IA;
- contraseñas, claves de API o códigos de acceso, porque la IA puede escribirlos en el sitio;
- nada que no imprimirías en un folleto.
Usa nombres de ejemplo y “example@example.com” mientras creas. Pon tú mismo los datos reales después.
Una revisión de cinco minutos antes de compartir el enlace
Márcalos. O deja la parte de escaneo a tu IA con el prompt de abajo.
0 de 6 hechos
List every external script, key-like string, innerHTML use, form action and personal detail in my site, with the file and line for each. Don't change anything.
Cuando esté limpio, repasa la lista de lanzamiento del sitio web.
Si una clave llegó a hacerse pública
Cómo ayuda Page Lemon
Los sitios hechos con IA suelen publicarlos personas que nunca han tenido que pensar en esto, así que hay varias redes de seguridad:
- Los archivos
.env,.git,node_modules, los source maps y los archivos de claves privadas se omiten y nunca se sirven. - Las subidas se comprueban en busca de tipos conocidos de claves secretas y claves privadas. Si se encuentra alguna, no se publica nada de esa subida, y se te dice qué archivo y línea corregir.
Estas comprobaciones detectan errores comunes, no todos los secretos. Elegir qué publicas sigue siendo lo que protege tus secretos. Más en Seguridad & confianza y Publicar un sitio.