Zum Inhalt springen / Skip to content

Seguridad en Wavor

Los datos de su negocio merecen la misma protección que un banco. No solo le decimos QUÉ protegemos. Le mostramos CÓMO.

AES-256TLS 1.32FADSGVO/GDPRUK GDPRLGPD (BR)DPDP (IN)Servidores de la UE

Seguridad Central

Cifrado AES-256
Sensitive fields are stored encrypted. Read without the key, they show nothing.
Centros de Datos de la UE (Hetzner DE)
Servers and customer files in Germany. Offsite backups sit encrypted outside the EU under the EU's transfer safeguards; the privacy policy names the provider.

Tiempo de Actividad e Infraestructura

99.9%
Objetivo de Tiempo de Actividad
6h
Intervalo de Respaldo
90d
Longest retention
Nerd zone

It gets technical from here. You do not need to read any of it to use Wavor safely - it is here so it can be checked.

Arquitectura de Seguridad

Cómo fluye tu datos. Desde la solicitud hasta el almacenamiento

PASO 1
Cloudflare Edge
Protección DDoS, WAF, TLS 1.3 con retroceso a 1.2. Red anycast global.
PASO 2
Cloudflare Tunnel
Origen físicamente inalcanzable. Conexión solo saliente a CF, sin puerto de entrada. Confianza personalizada AOP solo con certificado Wavor RSA-4096.
PASO 3
Aplicación Node.js
Validación de sesión, verificación 2FA, RBAC, validación de entrada a través de esquemas Zod.
PASO 4
PostgreSQL + Vault
Encrypted storage with AES-256. Secrets in HashiCorp Vault.
TLS 1.3 (Retroceso a 1.2)
HTTPS estricto completo en los 7 dominios.
Protección DDoS
Protección en el borde antes de que el servidor vea la solicitud.
¿Dónde se almacenan los datos?
The servers are at Hetzner in Germany (Falkenstein and Nuremberg), customer files in object storage in Germany. The data centres are guarded around the clock, with biometric access. Backups and some services such as email, SMS and AI run through providers outside the EU. Those transfers are secured under the EU's rules, and the privacy policy names every provider.
¿Cómo se aseguran las claves?
Todas las claves API y secretos en HashiCorp Vault (KV v2, cifrado, control de acceso). Advertencia de rotación automática a los 90/180/365 días. Sin secretos en texto plano en código, env o registros.
¿Cómo funciona la copia de seguridad?
Automated PostgreSQL backups every 6 hours. Kept: every one for two days, one a day up to 14 days, one a week up to 90 days. Each is decrypted again and checked after encryption, and every night the newest is restored as a test. Offsite copy at Backblaze, encrypted with our own key before it leaves the server.

Capas de Defensa

Encabezados de Seguridad HTTP: 14 directivas endurecidas

CSP Level 3 (21 Direktiven)
Modo de aplicación. Estándar W3C máximo incl. script-src-elem/-attr granular, Trusted-Types en el subdominio de administración, lista blanca de manifest/worker/media-src.
HSTS (Strict-Transport-Security)
max-age 1 year, includeSubDomains, preload enabled.
X-Frame-Options
DENEGAR. Sin clickjacking a través de iframes.
X-Content-Type-Options
nosniff. Los navegadores no pueden malinterpretar los tipos MIME.
Referrer-Policy
strict-origin-when-cross-origin.
Permissions-Policy
Cámara, micrófono, geolocalización. Todos desactivados por defecto.
COOP (Cross-Origin-Opener-Policy)
same-origin. Aísla el contexto de navegación.
CORP (Cross-Origin-Resource-Policy)
same-site. Los recursos no pueden ser incrustados de origen cruzado.

Independently verifiable: Mozilla's HTTP Observatory grades the headers of wavor.io A+. A test asks Mozilla for the result again every night. https://developer.mozilla.org/en-US/observatory/analyze?host=wavor.io(developer.mozilla.org)

Seguridad de la Cuenta

2FA: TOTP / SMS / Correo Electrónico
Tres métodos para el segundo factor. Códigos de respaldo de un solo uso.
Reconocimiento de Dispositivos
Notificación instantánea en nuevos dispositivos a través de correo electrónico con IP + User-Agent.
Gestión de Sesiones
Ver sesiones activas, terminar individualmente o cerrar sesión en todas a la vez.
Protección contra Fuerza Bruta (3 capas)
5 fallos por correo electrónico / bloqueo de 15 min. 10 por IP / 1h. 5 correos electrónicos distintos desde una IP / prohibición de 24h.
Captcha Cloudflare Turnstile
Protección contra bots sin rompecabezas de clics. Script cargado con crossOrigin anónimo + no-referrer. Sin fuga de sesión a Cloudflare.
Hashing de Contraseñas Bcrypt (costo 12)
Every guess costs computing time, which makes list attacks unaffordable. Passwords >= 12 chars, zxcvbn strength check.
Validación de Entrada Zod
Toda la entrada de la API validada del lado del servidor a través de Zod. Drizzle-Zod como única fuente de verdad con esquema de base de datos.
Rate limiting with a sliding window
A sliding window rather than fixed blocks, so a limit is not handed out afresh at the top of every minute. The counter currently lives in the individual worker process; once Redis is configured, all processes share one.

Controles Avanzados

RBAC de Grano Fino (cerrado por defecto)
Consciente del rol + método HTTP: GET necesita ver, POST/PATCH necesita editar, DELETE necesita eliminar. Permiso faltante = 403, nunca eludir.
Aislamiento Multi-Tenant
Ámbito companyId en cada consulta de DB. Sin filtración de datos entre inquilinos.
Registros de Auditoría
Cada mutación registrada a través de eventLog + AuditLogger. Rastro inmutable con userId, companyId, acción, entidad.
Approval by two people
Four actions need two approvals: changes to legal values, prices and terms, and a new sub-processor. While only one person is authorised, that person decides alone. The rule takes effect once there is a second.
Política de Rotación de Secretos
Advertencia automática a los 90/180/365 días a través de secretRotation.ts.
Enmascaramiento de PII en Respuestas
Correo electrónico, IBAN, teléfono enmascarados para miembros del equipo sin acceso a PII. piiMasking.ts central.
Limpieza de Registros
Todos los registros se limpian centralmente. Cero PII en registros, monitoreo o salida de depuración.
Claves API con Ámbitos
Permisos granulares con expiración a través de apiKeyAuth.ts.
Eliminación Suave y Recuperación
Recuperación de datos eliminados de 28 días. Columna deletedAt con filtro de consulta automático.
Data export
Exportación completa en JSON de todos los datos del usuario en una solicitud. Eliminación a través del flujo DSAR (Art. 17).

Protección de Datos

Concrete technical measures

Cifrado a Nivel de Campo (AES-256-GCM)
IBAN, ID fiscal, seguridad social, detalles bancarios, secretos de 2FA TOTP y códigos de un solo uso (inicio de sesión/verificación/restablecimiento): AES-256-GCM con IV de 96 bits, etiqueta de autenticación de 128 bits. IV aleatorio por cifrado.
Cifrado Cerrado por Defecto
Sin ENCRYPTION_KEY en producción: el servidor se niega a iniciar. Sin retroceso en texto plano (GDPR Art. 32 lit. a).
Detección de Manipulación (GCM)
El tag de autenticación AES-GCM detecta cualquier manipulación del texto cifrado. La desencriptación falla de manera contundente. Nunca aceptar en silencio.
Hash de Búsqueda HMAC-SHA256
Campos cifrados permanecen buscables a través de HMAC determinista. Clave separada (Separación de Clave según NIST SP 800-57).
Gestión de Claves Vault
ENCRYPTION_KEY + SESSION_SECRET + todas las claves API en HashiCorp Vault (KV v2). Sin texto plano en código, env o registros.
Versionado de Claves para Rotación
Formato de texto cifrado v1:iv:data:tag. Rotable a nueva versión sin pérdida de datos.

Seguridad de la Cadena de Suministro

Protección contra dependencias comprometidas (event-stream 2018, ua-parser-js 2021)

Dependencies as a build gate
Every build checks all dependencies against the vulnerability database. New findings block; known ones sit in a dated baseline that may only shrink.
Alertas de Dependabot
GitHub Dependabot verifica diariamente contra la base de datos CVE. PRs de seguridad automáticos.
Archivo de bloqueo comprometido
package-lock.json en el repositorio. Previene que CI extraiga versiones diferentes a las locales.
SSRF protection on outbound fetches
Every address that comes from user input is checked before Wavor fetches it. Private networks are blocked, and each redirect is checked again instead of being followed blindly.
Parcheo de Seguridad Automático
unattended-upgrades installs operating-system security fixes automatically.
Scripts Externos: CORS + Referente
Turnstile (Cloudflare) cargado con crossOrigin anónimo + referrerPolicy no-referrer. Sin fuga de credenciales.

Monitoreo y Observabilidad

Seguimiento de Errores (autoalojado)
Alertas de errores en tiempo real con trazas de pila.
Métricas (Prometheus + Grafana)
Latencia de solicitud, consultas a la base de datos, memoria, métricas comerciales personalizadas.
Monitoreo del Servidor
Tiempo de actividad, CPU, memoria, disco: controles automatizados 24/7.

Seguridad de Carga de Archivos (Pila de 7 Capas)

Protección contra malware, ataques poliglota, SVG-XSS, recorrido de ruta, detección de MIME

Capa 1: Puerta de Tamaño Absoluto (100 MB)
Límite duro contra bombas zip + DoS. Multer + defensa en profundidad.
Capa 2: Puerta de Tamaño por Tipo
Imágenes 5 MB, PDF 20 MB, video 100 MB. Límites específicos por tipo.
Capa 3: Lista Blanca + Lista Negra de MIME
22 tipos permitidos. HTML/JS/EXE/SH/JAR bloqueados explícitamente (vectores XSS).
Capa 4: Saneamiento de Nombres de Archivo
Recorridos de ruta (../), byte nulo, nombres reservados de Windows bloqueados.
Capa 5: Validación de Byte Mágico
El contenido del archivo DEBE coincidir con la extensión + MIME. La biblioteca de tipos de archivo detecta ataques de 'evil.exe renombrado a picture.jpg'.
Capa 6: Saneamiento de SVG
DOMPurify elimina etiquetas <script> incrustadas de SVGs. Sin saneamiento, la carga de SVG es un vector XSS común.
Layer 7: virus scan
Server-side virus scan before storage, provided the scanner is running on the server. If it is missing, that is logged rather than passed over silently.

Defensa XSS en Profundidad (4 Capas)

XSS almacenado, reflejado, DOM, de cadena de suministro. Todos los vectores cubiertos.

Capa 1: Auto-Escape de React JSX
Todas las entradas de usuario se escapan por defecto. Las etiquetas <script> se renderizan como texto, nunca se ejecutan. Regla de código: nunca usar dangerouslySetInnerHTML con entrada de usuario.
Capa 2: Saneador DOMPurify
sanitizeProse() + sanitizeEmailPreview() limpian HTML de artículos, vistas previas de correos electrónicos + markdown. Elimina <script>, <iframe>, controladores on* y URIs javascript:/data:.
Capa 3: CSP script-src 'self'
Incluso si las capas 1+2 fallan: el navegador bloquea scripts extranjeros. Lista blanca solo para Stripe + captcha Turnstile.
Capa 4: Tipos de Confianza (Admin)
require-trusted-types-for 'script' en admin.wavor.io obliga a cada manipulación del DOM a través de una política. Previene que errores de biblioteca causen DOM-XSS.

Hoja de Ruta de Certificación

Somos transparentes: estamos en proceso de construcción y aún no tenemos certificaciones formales. Pero ya implementamos los estándares y estamos trabajando activamente hacia ellos.

DSGVO / GDPR (EU)
Implementado
UK GDPR (Data Protection Act 2018)
Implementado
LGPD (Brasilien)
Implementado
DPDP Act 2023 (Indien)
Implementado
AVG (Niederlande)
Implementado
FADP (Schweiz)
Implementado
ePrivacy (Cookie-Consent)
Implementado
DSA (Digital Services Act)
Implementado
SOC 2 Type II
Planificado
ISO 27001:2022
Planificado
ISO 27017 + 27018 (Cloud)
Planificado
ISO 27701 (Privacy)
Planificado
ISO 42001 (AI Management)
Planificado
BSI C5 Type II
Planificado
CSA STAR Level 1
Planificado

Además, nos alineamos con la Ley de IA de la UE, NIS2 y GoBD (contabilidad alemana). Estas son regulaciones, no certificaciones.

Reportar Problema de Seguridad

¿Encontraste una vulnerabilidad? Repórtala de forma confidencial a nuestro equipo. Tomamos cada informe en serio y te responderemos lo más rápido posible.