Saltar al contenido

Seguridad

AppFly escribe y ejecuta código por ti, así que aquí tienes exactamente lo que eso significa para tus datos: el límite de aislamiento, qué se cifra, qué nunca se recopila y qué pasa con todo cuando te vas.

Una app no puede acceder a otra

Cada app recibe su propia base de datos Postgres y su propio rol de acceso, y el rol se crea con REVOKE CONNECT … FROM PUBLIC. El aislamiento es una propiedad de la base de datos, no del código de la aplicación: una consulta escrita por un agente en una app no puede llegar a los datos de otra aunque lo intente.

Cada app también se ejecuta en su propio contenedor, con su propio espacio de trabajo en disco. Solo se comparte el servidor.

Los secretos se cifran y nunca se muestran completos

Las claves de proveedores, los tokens y las variables de entorno se cifran en reposo con AES-256-GCM. A una página solo llega una pista enmascarada —los cuatro últimos caracteres—, así que ni una pantalla ni un log de compilación pueden filtrar una credencial completa.

Las claves se escriben en el propio .env de la app generada, dentro de su espacio de trabajo, que es el único lugar que puede leerlas. Nosotros solo emitimos una variable de entorno: la URL de la base de datos de la app, porque la base de datos la aprovisionamos nosotros.

Los datos de tus clientes no son nuestros

AppFly guarda cuentas, dominios de tienda, prompts y código generado. Nunca lee los clientes, los pedidos ni los datos personales de tu tienda, y los permisos que pedimos a Shopify no los incluyen.

Shopify exige que cada app responda a tres webhooks de cumplimiento, y respondemos a los tres. Los dos relativos a datos de clientes se confirman con un registro que deja constancia de que lo comprobamos y no teníamos nada: la respuesta que un comercio puede necesitar que tengamos archivada.

Borrar es lo predeterminado, no un ticket de soporte

Eliminar una app borra su contenedor, su base de datos, sus archivos, su despliegue, su registro DNS y sus accesos. La fila de la base de datos se borra la última, para que un borrado que falle a medias se reintente en lugar de dejar algo huérfano en marcha.

Desinstalar desde Shopify borra todo lo que pertenece a tu tienda en un plazo de 48 horas. Una tarea programada se ejecuta cada cinco minutos para terminar lo que el desinstalador no pudo, de modo que un borrado interrumpido nunca vuelve a la vida como una app activa.

Cerrar sesión revoca la sesión en el servidor. Cerrar tu cuenta borra todo lo que indica la Política de privacidad (en inglés).

Los límites que mantenemos

Cada petición a una página con sesión iniciada está autenticada, y las rutas de la API responden a una llamada no autenticada con un 401 legible en lugar de una página de inicio de sesión en HTML.

Los webhooks de facturación están firmados y se verifican contra el cuerpo original de la petición. Un despliegue sin secreto de webhook configurado devuelve 404 en ese endpoint —sin firma es sin autenticar, no abierto— y una firma incorrecta es un 401.

La consola de operador está protegida por contraseña y una cookie firmada, y sus operaciones privilegiadas son una lista fija de funciones sin shell genérica. No es accesible desde el sitio público y robots.txt la excluye.

Cómo informar de una vulnerabilidad

Envíala a [email protected] con detalles suficientes para reproducirla y una idea de su impacto. Te confirmaremos la recepción y te diremos qué estamos haciendo al respecto. Danos un plazo razonable antes de hacerla pública y no hagas pruebas contra datos de otros clientes.

Para todo lo que no sea un problema de seguridad, escribe a [email protected].