Seguridad en PayrollPro
Última actualización: 25 de mayo de 2026
PayrollPro maneja números de Seguro Social, credenciales bancarias y declaraciones fiscales. Tratar esos datos con negligencia sería imperdonable. Esta página es el resumen público de cómo los protegemos. Nuestro conjunto completo de políticas de seguridad se mantiene bajo control de versiones junto al código fuente — cada cambio es auditable.
De un vistazo
- 🔐Cifrado AES-256 en reposo (base de datos + respaldos)
- 🔒TLS 1.2+ en tránsito, precarga HSTS
- 🛡️NIST SP 800-63 AAL2 en el panel de la firma (contraseña + TOTP)
- 🚫MFA por SMS no ofrecido (obsoleto según NIST SP)
- 🔑SSN cifrado a nivel de columna con pgcrypto; la clave nunca está en el paquete del navegador
- 🤖Desafío anti-bots Cloudflare Turnstile en el registro
- 📜Cada firma registra IP + agente de usuario + hash SHA-256 del documento (E-SIGN)
- 🏦Origen de ACH conforme a las Reglas Operativas de NACHA
- 🗑️Derecho de supresión GDPR / CCPA con periodo de gracia de 30 días
- 📋Dependabot + SLAs manuales para la aplicación de parches de vulnerabilidades
Cifrado
En reposo. Todos los datos de los clientes residen en una base de datos PostgreSQL (Supabase, AWS us-east-1) con cifrado de disco completo AES-256 gestionado por AWS KMS. Los campos sensibles — números de Seguro Social, metadatos de cuentas bancarias — se cifran adicionalmente a nivel de columna con pgp_sym_encrypt (pgcrypto) mediante una clave de 256 bits independiente que nunca se incluye en el paquete del navegador. El descifrado solo ocurre en rutas de código del lado del servidor que han superado las verificaciones de autenticación y de titularidad del inquilino (tenant).
En tránsito. Todo el tráfico utiliza TLS 1.2 o superior con conjuntos de cifrado modernos. Establecemos Strict-Transport-Security y solicitamos la precarga de HSTS. Las conexiones a la base de datos son exclusivamente por TLS. Las entregas de webhooks se verifican mediante firma (HMAC de Stripe, Ed25519 de Telnyx) y se rechazan fuera de una ventana de repetición de 5 minutos.
Autenticación
- Panel de la firma (
/dashboard/*): contraseña + TOTP exigidos del lado del servidor. Las sesiones que solo alcanzan AAL1 son rechazadas por el middleware de borde (edge) en cada solicitud — no solo al iniciar sesión. - Política de contraseñas: mínimo de 10 caracteres, contrastadas contra la conocida lista de contraseñas comprometidas, sin reglas arbitrarias de composición (conforme a la guía NIST SP 800-63B).
- Segundo factor: únicamente TOTP (RFC 6238). Compatible con Google Authenticator, Authy, 1Password, etc. El MFA por SMS está expresamente prohibido.
- Dispositivo de confianza (opcional): una cookie firmada con HMAC-SHA-256 y válida por 30 días permite al usuario omitir el TOTP en un navegador recordado. Está vinculada al ID del usuario y es revocable desde la página de perfil.
- Fuente única de verdad: Supabase Auth es el único proveedor de identidad — sin tablas de usuarios paralelas, sin autenticación por función. El acceso se otorga o revoca desde un solo lugar.
- Protección anti-bots: Cloudflare Turnstile protege el registro público para mantener el abuso automatizado fuera del embudo.
Autorización y aislamiento de inquilinos
Cada tabla del esquema payroll aplica políticas de Seguridad a Nivel de Fila (Row-Level Security) de PostgreSQL que restringen las lecturas y escrituras al inquilino (tenant) del usuario solicitante. La RLS es la última línea de defensa — el código de la aplicación también verifica la titularidad del inquilino en cada ruta de la API como defensa en profundidad.
La clave de Rol de Servicio (Service Role), que omite la RLS, reside únicamente en las variables de entorno de producción de Vercel; nunca se incluye en el paquete del navegador ni la utiliza ningún código que no haya validado previamente el contexto de la solicitud (firma del webhook, titularidad del inquilino, etc.).
Gestión de vulnerabilidades y parches
Nuestros SLAs de aplicación de parches:
- Crítica (CVSS 9.0+): parcheada en un plazo de 24 horas
- Alta (7.0–8.9): en un plazo de 7 días
- Media (4.0–6.9): en un plazo de 30 días
- Baja (≤3.9): en un plazo de 90 días
Dependabot se ejecuta semanalmente en npm + GitHub Actions, agrupado por ecosistema y severidad. El software que llega al fin de su vida útil se supervisa trimestralmente; los paquetes obsoletos se eliminan o se actualizan dentro de una versión menor tras el anuncio de fin de vida útil (EOL).
Privacidad y derechos del interesado
El derecho a acceder, rectificar, suprimir y portar sus datos se respeta de conformidad tanto con la CCPA § 1798.105 como con el Art. 17 del GDPR. Las solicitudes de supresión se tramitan a través de un periodo de gracia de 30 días, con un token de cancelación enviado por correo electrónico al solicitante. Transcurridos los 30 días, un proceso con rol de servicio elimina de forma permanente al inquilino y a todos los registros dependientes vinculados por clave foránea. Los registros fiscales que estamos legalmente obligados a conservar (IRS Pub. 583, normalmente 4 años) sobreviven a la supresión y se enumeran explícitamente en el comprobante.
Detalles completos: Política de Privacidad.
Subencargados del tratamiento
| Proveedor | Propósito | Región |
|---|---|---|
| Supabase | Base de datos + Autenticación | AWS us-east-1 |
| Vercel | Alojamiento web | Borde global |
| Stripe | Facturación + ACH | EE. UU. |
| Resend | Correo transaccional | EE. UU. |
| Telnyx | Fax saliente (IRS) | EE. UU. |
| Cloudflare | DNS + desafío anti-bots | Borde global |
| Google (Gemini) | Chat de ayuda en la app (opcional) | EE. UU. |
| Google (OAuth) | Inicio de sesión social opcional | EE. UU. |
Plaid se añadirá cuando se lance la integración de Transferencias ACH; aviso dentro de la app con 30 días de antelación antes de su activación.
Respuesta a incidentes
En caso de una exfiltración de datos confirmada:
- Los clientes afectados serán notificados en un plazo de 72 horas desde la confirmación
- Divulgación a las autoridades reguladoras (IRS, SSA, fiscales generales estatales) según lo exija la ley
- Informe posterior al incidente publicado en un plazo de 30 días
Exposición sospechada (no confirmada): los clientes serán notificados en un plazo de 5 días hábiles. Los incidentes de menor gravedad se resumen en el registro de cambios mensual dentro del panel de administración.
Marcos normativos de referencia
- NIST SP 800-63B — contraseñas, MFA, AAL2
- Reglas Operativas de NACHA — origen y autorización de ACH
- E-SIGN Act (15 U.S.C. § 7001) — firmas electrónicas
- IRS Pub. 1474 — autorización de Agente Declarante (Form 8655)
- IRS Pub. 583 — conservación de registros para impuestos empresariales
- GDPR Art. 17 / CCPA § 1798.105 — derecho de supresión
- Requisitos de Riesgo y Cumplimiento de Plaid (para la próxima integración de Plaid Link)
Reportar un problema de seguridad
Correo electrónico: sales@espartan.net. Por favor, incluya los pasos de reproducción y cualquier prueba de concepto. Acusamos recibo en un plazo de 2 días hábiles y proporcionamos actualizaciones de estado cada 5 días hábiles hasta su resolución. La investigación de buena fe es bienvenida y no dará lugar a acciones legales, siempre que evite violaciones de la privacidad, la interrupción del servicio y la exfiltración de datos.