Seguridad y privacidad técnica
OpenMercantil maneja datos públicos del BORME, datos de cuenta de usuarios suscritos y registros operativos. La política de seguridad aplica medidas proporcionadas al riesgo de cada categoría de dato y se documenta de forma transparente: lo que está implementado, lo que está en hoja de ruta y lo que conscientemente hemos descartado.
Capa de transporte
- HTTPS forzado en todo el dominio. HSTS con
max-age=31536000eincludeSubDomains. Preload pendiente de envío al navegador hasta consolidar 6 meses sin downtime. - TLS 1.2+ con cifrados modernos (sin RC4, 3DES, MD5 ni SHA-1). Renegociación segura activa.
- Cabeceras de seguridad:
Content-Security-Policycon allowlist explícita,X-Frame-Options: SAMEORIGIN(anti-clickjacking),X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-originyPermissions-Policydenegando geolocation/camera/microphone por defecto. - Certificado SSL gestionado por OVH AutoSSL (Let's Encrypt). Renovación automática 30 días antes de caducidad.
- Redirecciones 301 single-hop auditadas para dominio canónico y variantes www en una sola respuesta.
Datos en reposo
- Base de datos SQLite con permisos UNIX 600 (solo el proceso PHP del servidor web puede leerla). Tabla
usersyapi_keysaisladas en migrations versionadas. - Hashes de contraseñas con
password_hash()+ bcrypt (cost 12). Sin almacenamiento de contraseñas en claro nunca, ni siquiera transitoriamente en logs. - Tokens de API y session IDs generados con
random_bytes()(CSPRNG del sistema operativo). Longitud mínima 32 bytes (256 bits de entropía). - Backups diarios cifrados con AES-256-GCM antes de salir del servidor. Retención: 30 días rotativos.
- Datos de pago: nunca tocan nuestros servidores. Stripe Checkout y Customer Portal gestionan toda la información de tarjeta. Solo almacenamos el
customer_idysubscription_idreferencial.
Privacidad operativa
- IP anonimizada en todos los logs accesibles (último octeto a cero antes de persistencia:
192.168.1.0). La IP completa solo aparece transitoriamente en buffers de Apache para detección de abuso, y se purga en menos de 24 horas. - Retención de logs técnicos limitada a 30 días. Logs de auditoría de seguridad (intentos de login, cambios de contraseña, ejercicio de derechos RGPD) hasta 1 año.
- Google Consent Mode v2 y Microsoft Clarity Consent API v2 implementados para aplicar la preferencia analítica del usuario.
- Sin trackers publicitarios de terceros (Meta Pixel, TikTok, etc.). Solo Google Analytics 4, Microsoft Clarity y, si decides usarlo, Crisp Chat para soporte.
- Sin venta ni cesión de datos personales a terceros bajo ninguna circunstancia comercial.
Control de acceso
- Login con email + contraseña o Google OAuth (Sign in with Google). Las contraseñas se validan contra la lista HaveIBeenPwned en cambios para prevenir credenciales comprometidas conocidas.
- Rate limit en endpoints sensibles (login, password reset, API key request) con bloqueo exponencial tras 5 intentos.
- Sesiones con cookie
HttpOnly,Secure,SameSite=Lax. Caducidad por inactividad: 30 días en sesión recordada, 4 horas si no. - Tokens CSRF en todos los formularios con cambios de estado.
- Acceso administrativo restringido por IP allowlist + 2FA TOTP obligatorio.
Pipeline de datos: integridad y trazabilidad
- Cada acto del BORME procesado conserva la URL del PDF oficial original. Trazabilidad 100% verificable en cada ficha.
- Hash SHA-256 del PDF descargado se compara con el publicado por la AEBOE para detectar manipulación en tránsito.
- Pipeline reproducible: el cron diario es idempotente, re-procesar el mismo día produce el mismo resultado.
- Migraciones de schema versionadas en
schema/migrations/(0001..0028 actualmente). Rollback documentado para cada una.
Divulgación responsable de vulnerabilidades
Si descubres una vulnerabilidad, escribe de forma responsable a [email protected] con asunto «Security disclosure». Acuse de recibo en menos de 72 h. Plan de mitigación según severidad CVSS:
- Crítica (CVSS 9-10): mitigación temporal en menos de 24 h, parche definitivo en 7 días.
- Alta (7-8.9): parche definitivo en 14 días.
- Media (4-6.9): incluida en próximo ciclo de releases (mensual).
- Baja (<4): documentada y planificada según prioridad.
No publiques el problema antes de que confirmemos la corrección — preferimos resolverlo de buen rollo y reconocemos públicamente al investigador en el changelog si lo desea.
Cumplimiento normativo
- RGPD (Reglamento UE 2016/679): base legal del tratamiento, derechos del interesado, evaluación de impacto cuando procede.
- LOPDGDD (LO 3/2018): adaptación nacional del RGPD, derechos digitales y régimen sancionador.
- Ley 37/2007 sobre reutilización de información del sector público (transposición Directiva UE 2019/1024). Es la base legal que ampara la reutilización del BORME.
- LSSI-CE (Ley 34/2002): información societaria identificada en el Aviso Legal y obligaciones de los servicios de la sociedad de la información.
- Política de cookies ajustada a la Guía de la AEPD (2024) y al Real Decreto 13/2012.
Lo que conscientemente NO hacemos
- No usamos servicios de tracking de terceros más allá de GA4 con consentimiento.
- No tenemos modelos de IA que procesen datos personales para inferir características no declaradas.
- No vendemos ni cedemos a terceros listados de empresas ni de personas físicas.
- No almacenamos datos de tarjetas de crédito en ningún momento.
- No utilizamos dark patterns en consentimientos de cookies ni en upgrades de plan.