Arquitectura de seguridad
Analytics House se ejecuta en entornos aislados V8 de Cloudflare Worker, con consultas SQLite parametrizadas en Cloudflare D1, un estricto aislamiento entre inquilinos y una verificación de seguridad automatizada de extremo a extremo.
1. Autenticación y refuerzo de credenciales
- Hash de contraseñas: las contraseñas se convierten en hash con WebCrypto
PBKDF2-SHA256, con 100 000 iteraciones y una sal aleatoria única de 128 bits por usuario. La verificación usa una comparación de bytes en tiempo constante para evitar ataques de canal lateral basados en el tiempo. - Tokens de sesión y de restablecimiento: las sesiones usan JWT
HS256firmados con un TTL de 7 días. Los enlaces para restablecer la contraseña usan tokens aleatorios de un solo uso, almacenados solo como resúmenesSHA-256, que caducan al cabo de 1 hora. - Limitación de frecuencia en el perímetro: los intentos de inicio de sesión, los registros, los restablecimientos de contraseña, la ingesta de eventos (por proyecto y por IP/relay), los envíos de prueba de informes y los endpoints de la API están protegidos por limitadores de frecuencia de ventana deslizante que devuelven
429 Too Many Requestscon encabezadosRetry-After.
2. Aislamiento multiinquilino y control de acceso basado en roles (RBAC)
- Delimitación estricta por inquilino: cada consulta SQL vincula
project_idy verifica la pertenencia al proyecto antes de ejecutarse. Las solicitudes no autorizadas reciben404 Not Found, de modo que no se pueden enumerar los ID de proyecto. - Roles de propietario, administrador y lector: los lectores tienen acceso de solo lectura a los paneles agregados; las exportaciones de eventos en bruto están bloqueadas (
403) y los flujos de eventos en bruto ocultan automáticamenteuser_id,session_id,visitor_idycitya los lectores. - Claves de API de estadísticas de solo lectura y alcance limitado (
ea_sk_...): en D1 solo se almacenan el hashSHA-256y un prefijo de 12 caracteres. Las claves de estadísticas nunca pueden leer eventos en bruto, gestionar la configuración ni revelar la clave de API de ingesta.
3. Seguridad de la cadena de suministro y de los webhooks
- Subresource Integrity (SRI): el panel Privacidad y configuración de cada proyecto calcula en tiempo real el resumen de integridad
sha384-...de/tracker.jspara que los sitios web puedan fijar los bytes exactos del script en su etiqueta HTML<script integrity="...">. - Webhooks de alertas reforzados contra SSRF: los webhooks de alertas salientes de Slack, Discord y personalizados solo admiten
https://y bloquean localhost, las direcciones de bucle invertido (loopback), las de enlace local y los rangos de IP privadas de RFC 1918. - Protección contra la inyección en CSV: todas las exportaciones CSV neutralizan las celdas que empiezan por caracteres que activan fórmulas (
=,+,-,@, tabulador, CR). - Encabezados de seguridad HTTP: las respuestas aplican
X-Content-Type-Options: nosniff,X-Frame-Options: DENY,Referrer-Policy: strict-origin-when-cross-originy una lista estricta de orígenes CORS permitidos.
4. Supervisión de la disponibilidad y divulgación responsable
Las comprobaciones en tiempo real del estado de la base de datos y del Worker se ejecutan cada 15 minutos y se publican en la página pública Estado del sistema. Para notificar una vulnerabilidad de seguridad, escribe a contact@analytics.house o ponte en contacto con nosotros desde Contacto y soporte.