Cómo está construido

Seguridad y tus datos

Última actualización: 28 de agosto de 2026 · Esta página describe cómo funciona el producto hoy, no cómo nos gustaría que funcionara

Le estás dando a una web tu historial de inversión, así que tienes derecho a saber qué pasa con él. Esta página cuenta qué guardamos, qué no vemos nunca, cómo se protege tu cuenta y dónde se ejecuta todo. Donde algo es más débil de lo que supondrías, también está escrito aquí.

Nunca tocamos tu cuenta del bróker

No hay acceso al bróker en ninguna parte del producto. Tú mismo descargas la exportación de tu bróker y subes ese archivo. Nunca pedimos una contraseña del bróker, no tenemos ningún token ni clave de API de tu cuenta, y ninguna parte del código puede lanzar una orden, mover dinero ni leer tu saldo en el bróker. Es una propiedad de cómo está construido el producto, no una promesa sobre nuestro comportamiento: la conexión no existe.

Qué guardamos de una exportación

Una exportación de bróker es una tabla ancha. Leemos un conjunto fijo de columnas y guardamos una fila por operación con estos campos: la fecha y la hora, el tipo, el ISIN, el símbolo, el nombre del producto, la cantidad, el precio, la divisa, el importe, el importe convertido a euros, las comisiones, el tipo de cambio utilizado y un campo de texto libre. Ese último campo es la línea de descripción que tu bróker escribe en la fila, por ejemplo una nota de dividendo o de operaciones corporativas, y se corta a los 500 caracteres.

Cada fila pasa una validación antes de guardarse. Un ISIN que no tiene forma de ISIN no se guarda como texto, sino que se sustituye por una clave derivada del símbolo. Un código de divisa que no es un código ISO 4217 válido se vacía en lugar de guardarse. Los nombres y las notas se recortan y se limpian de caracteres de control. Las fechas fuera de una ventana razonable se devuelven dentro de ella. Ese paso existe para que una exportación rara no rompa el cálculo, y tiene como efecto secundario que un contenido inusual en una columna no llega intacto a la base de datos.

Si además subes un resumen de cartera, la foto de lo que tienes hoy, guardamos cinco cosas por línea: la clave del instrumento, el nombre, la cantidad, el precio y el valor. Cualquier otra columna de ese archivo se ignora.

El archivo en sí no se guarda. Se lee en memoria y se descarta; lo que queda es el nombre del archivo, el bróker reconocido, el número de filas y los avisos que haya, para que tu historial de subidas se pueda leer.

Qué no recibimos nunca

Nunca recibimos una contraseña ni un acceso de bróker. Los datos de la tarjeta van a Stripe y no llegan nunca a nuestros servidores. El producto no pide nunca tu nombre, tu dirección, tu fecha de nacimiento ni un número de cuenta bancaria, y los importadores no leen esas columnas ni siquiera cuando un bróker las escribe en el archivo. El único dato personal que necesita la cuenta es una dirección de correo, junto con tu preferencia de idioma y de divisa.

Hay una excepción que conviene nombrar. Para un formato que no reconocemos, asignas las columnas tú mismo una vez. Ese asignador guarda exactamente las columnas que le señalas, así que si señalas una columna con algo personal dentro, eso es lo que se guarda.

Contraseñas y sesiones

Puedes entrar de tres maneras: con Google, con una dirección de correo y una contraseña, o con un enlace de acceso que te enviamos por correo, y entonces no hay contraseña ninguna. Si sí pones una, se guarda como un hash PBKDF2-HMAC-SHA256 con 480.000 iteraciones y una sal aleatoria propia por contraseña. La contraseña en sí no se escribe en ningún sitio. El número de iteraciones va dentro del hash, así que puede subirse más adelante sin dejar a nadie fuera: un hash antiguo se sustituye en silencio la próxima vez que esa persona entra. La longitud mínima son 10 caracteres, y una dirección IP tiene 25 intentos de contraseña por hora.

Una sesión es una cookie firmada. Es HttpOnly, así que ningún script puede leerla, es SameSite=Lax y se marca Secure siempre que el sitio va por https, que en producción es siempre. Dura 180 días y se renueva mientras sigas usando la aplicación. La cookie lleva además un contador que pertenece a tu cuenta, y cerrar sesión sube ese contador, así que cerrar sesión termina todas las sesiones que tengas en cualquier sitio y no solo la que tienes delante.

En tránsito y en el navegador

El sitio se sirve por https. Envía Strict-Transport-Security con un max-age de un año que incluye los subdominios, de modo que un navegador que ha visto el sitio una vez no volverá a intentar http a secas. La política de seguridad de contenido solo permite scripts de nuestro propio dominio, y por eso no hay ningún script de terceros ni en el sitio ni en el panel. El uso en marcos se rechaza tanto con X-Frame-Options como con frame-ancestors, la detección automática del tipo de contenido está desactivada, el referente se recorta en la navegación entre sitios, y la geolocalización, el micrófono y la cámara están denegados. Dos cosas salen de la página hacia un tercero. La tipografía se descarga de Google Fonts, y los errores del navegador van a Sentry en su región europea, de forma que una página que se te rompe es visible para nosotros. Sentry aparece nombrado en la política de privacidad junto con los demás encargados del tratamiento.

Dónde se ejecuta

La API, las dos tareas programadas y la base de datos con su volumen se ejecutan en Railway en EU West Metal, Ámsterdam (europe-west4-drams3a), y así es desde el 28 de agosto de 2026. La web la sirve Vercel, la red pasa por Cloudflare, los pagos van por Stripe y el correo por Resend. Qué trata cada uno está en la política de privacidad.

Qué muestra un enlace para compartir y qué no

El enlace para compartir es opcional y está apagado hasta que lo enciendes. Cuando lo haces, un token aleatorio se convierte en la dirección de una página de solo lectura; cuando lo apagas, esa dirección deja de valer al momento.

Quien la abra ve tus posiciones y cómo les ha ido, no tu saldo en efectivo ni tus aportaciones. Vale la pena ser exactos sobre lo que cubre esa frase. La página oculta tu saldo en efectivo, oculta cada aportación que has hecho y oculta los totales que se calculan a partir de ellas. Lo que no oculta es el valor de cada posición: cada posición se comparte con su importe en euros, así que quien tenga el enlace puede sumar esos importes y llegar al valor de tu cartera invertida. Si ese número es algo que prefieres no publicar, no enciendas el enlace.

La imagen de vista previa que las apps de mensajería y las redes sociales muestran para un enlace compartido lleva solo porcentajes.

Llevarte tus datos y borrarlos

Exportar es un botón en los ajustes de la cuenta. Te entrega todo en JSON: el registro de tu cuenta, cada operación guardada con todos sus campos, tu historial de subidas y tus ajustes.

Borrar es también un botón, con una confirmación escrita a mano. Quita tus operaciones, tus subidas, las asignaciones de columnas guardadas, las fotos de cartera, las posiciones de apertura, los ajustes y la cuenta misma. Dos registros pequeños se quedan a propósito, y los dos no contienen más que un hash irreversible con sal de tu dirección de correo y la fecha en que empezó una prueba gratuita. Uno se limpia al cabo de un año; el otro se conserva, porque un registro que caduca le daría a la misma persona una serie ilimitada de pruebas gratuitas. Ninguno se puede convertir de vuelta en una dirección.

Altas y abuso

El registro con un dominio de correo desechable se rechaza, contra una lista de bloqueo de 8.335 dominios. Los servicios de reenvío y de alias se comprueban primero y están permitidos de forma explícita: Apple Hide My Email, Firefox Relay, DuckDuckGo, SimpleLogin y addy.io funcionan, porque quienes los usan son exactamente las personas para las que está escrita esta página.

Qué no hacemos con tus datos

No hay publicidad y no vendemos datos. No hay ningún servicio de analítica de terceros, ni píxel de seguimiento, ni cookie publicitaria en ninguna parte del sitio; la política de seguridad de contenido de más arriba bloquearía uno si se añadiera por accidente. Sentry recibe informes de errores, nunca visitas de páginas. Lo que sí medimos son seis hitos por cuenta, como que se ha subido un primer archivo y que se ha mostrado la comparación, registrados en nuestros propios servidores como un hito y una fecha. Tu suscripción es lo que paga todo esto.

Informar de un problema de seguridad

Escribe a security@bullbenchmark.com con lo que has encontrado y cómo reproducirlo. Esa dirección la lee una persona y tendrás respuesta. Dos peticiones: no lances escaneos automáticos contra el servicio en producción, y no uses la cuenta ni los datos de otra persona para demostrar un hallazgo. Con una descripción nos basta para reproducirlo nosotros.

Las preguntas que no son avisos de seguridad van a support@bullbenchmark.com. Lo que hacemos jurídicamente con los datos personales está en la política de privacidad; el acuerdo en sí está en las condiciones del servicio.