Comment c'est construit

Sécurité et vos données

Dernière mise à jour : 28 août 2026 · Cette page décrit le fonctionnement actuel du produit, pas nos intentions

Vous confiez votre historique d'investissement à un site web, vous avez donc le droit de savoir ce qu'il en advient. Cette page dit ce que nous stockons, ce que nous ne voyons jamais, comment votre compte est protégé et où tout cela tourne. Là où quelque chose est plus faible que vous ne le supposeriez, c'est écrit ici aussi.

Nous ne touchons jamais à votre compte courtier

Il n'existe aucune connexion au courtier dans le produit. Vous téléchargez vous-même un export chez votre courtier et vous envoyez ce fichier. Nous ne demandons jamais de mot de passe de courtier, nous ne détenons ni jeton ni clé d'API pour votre compte, et aucune partie du code ne peut passer un ordre, déplacer de l'argent ou lire votre solde chez le courtier. C'est une propriété de la construction du produit, pas une promesse sur notre comportement : la connexion n'existe pas.

Ce que nous gardons d'un export

Un export de courtier est un large tableau. Nous lisons un ensemble fixe de colonnes et enregistrons une ligne par transaction, avec ces champs : la date et l'heure, le type, l'ISIN, le symbole boursier, le nom du produit, la quantité, le cours, la devise, le montant, le montant converti en euros, les frais, le taux de change utilisé et un champ de texte libre. Ce dernier champ est la ligne de description que votre courtier inscrit sur la ligne, par exemple une note de dividende ou des opérations sur titres, et il est coupé à 500 caractères.

Chaque ligne passe une validation avant d'être enregistrée. Un ISIN qui n'a pas la forme d'un ISIN n'est pas conservé comme texte mais remplacé par une clé dérivée du symbole. Un code de devise qui n'est pas un code ISO 4217 valable est vidé au lieu d'être stocké. Les noms et les notes sont raccourcis et débarrassés des caractères de contrôle. Les dates hors d'une fenêtre raisonnable sont ramenées à l'intérieur. Cette étape empêche un export étrange de casser le calcul, et elle a pour effet secondaire qu'un contenu inhabituel dans une colonne n'arrive pas intact dans la base de données.

Si vous envoyez aussi un relevé de portefeuille, l'instantané de ce que vous détenez aujourd'hui, nous gardons cinq choses par ligne : la clé de l'instrument, le nom, la quantité, le cours et la valeur. Toute autre colonne de ce fichier est ignorée.

Le fichier lui-même n'est pas conservé. Il est lu en mémoire puis abandonné ; ce qui reste, c'est le nom du fichier, le courtier reconnu, le nombre de lignes et les avertissements éventuels, pour que votre historique d'envois reste lisible.

Ce que nous ne recevons jamais

Nous ne recevons jamais de mot de passe ni d'identifiants de courtier. Les données de carte vont chez Stripe et n'atteignent jamais nos serveurs. Le produit ne demande jamais votre nom, votre adresse, votre date de naissance ni un numéro de compte bancaire, et les importateurs ne lisent pas ces colonnes, même quand un courtier les inscrit dans le fichier. La seule donnée personnelle dont le compte a besoin est une adresse e-mail, avec votre préférence de langue et de devise.

Une exception mérite d'être nommée. Pour un format que nous ne reconnaissons pas, vous associez les colonnes vous-même, une fois. Cet outil enregistre exactement les colonnes que vous désignez : si vous désignez une colonne contenant quelque chose de personnel, c'est cela qui est enregistré.

Mots de passe et sessions

Vous pouvez vous connecter de trois façons : avec Google, avec une adresse e-mail et un mot de passe, ou avec un lien de connexion que nous vous envoyons par e-mail, et là il n'y a pas de mot de passe du tout. Si vous en définissez un, il est stocké sous forme d'empreinte PBKDF2-HMAC-SHA256 avec 480 000 itérations et un sel aléatoire propre à chaque mot de passe. Le mot de passe lui-même n'est écrit nulle part. Le nombre d'itérations figure dans l'empreinte, il peut donc être augmenté plus tard sans exclure personne : une ancienne empreinte est remplacée en silence à la connexion suivante. La longueur minimale est de 10 caractères, et une adresse IP dispose de 25 tentatives de mot de passe par heure.

Une session est un cookie signé. Il est HttpOnly, aucun script ne peut donc le lire, il est SameSite=Lax, et il est marqué Secure dès que le site tourne en https, ce qui est toujours le cas en production. Il dure 180 jours et se rafraîchit tant que vous utilisez l'application. Le cookie porte aussi un compteur qui appartient à votre compte, et la déconnexion incrémente ce compteur : se déconnecter met donc fin à toutes vos sessions, où qu'elles soient, et pas seulement à celle qui est devant vous.

En transit et dans le navigateur

Le site est servi en https. Il envoie Strict-Transport-Security avec un max-age d'un an incluant les sous-domaines : un navigateur qui a vu le site une fois ne réessaiera pas en http simple. La politique de sécurité du contenu n'autorise que les scripts de notre propre domaine, ce qui explique qu'il n'y ait aucun script tiers sur le site ni dans le tableau de bord. L'affichage en cadre est refusé à la fois par X-Frame-Options et par frame-ancestors, la détection automatique du type de contenu est désactivée, le référent est tronqué lors d'une navigation vers un autre site, et la géolocalisation, le microphone et la caméra sont refusés. Deux choses quittent la page vers un tiers. La police de caractères est chargée depuis Google Fonts, et les erreurs du navigateur partent vers Sentry dans sa région européenne, si bien qu'une page qui casse chez vous nous est visible. Sentry est nommé dans la politique de confidentialité avec les autres sous-traitants.

Où tout cela tourne

L'API, les deux tâches planifiées et la base de données avec son volume tournent sur Railway à EU West Metal, Amsterdam (europe-west4-drams3a), et ce depuis le 28 août 2026. Le site est servi par Vercel, le réseau passe par Cloudflare, les paiements par Stripe et les e-mails par Resend. Le rôle de chacun est détaillé dans la politique de confidentialité.

Ce qu'un lien de partage montre, et ce qu'il ne montre pas

Un lien de partage est facultatif et reste éteint tant que vous ne l'activez pas. Quand vous l'activez, un jeton aléatoire devient l'adresse d'une page en lecture seule ; quand vous l'éteignez, cette adresse devient immédiatement invalide.

Les visiteurs voient vos positions et leur performance, pas votre solde en espèces ni vos versements. Il vaut la peine d'être précis sur ce que cette phrase couvre. La page cache votre solde en espèces, elle cache chaque versement que vous avez fait, et elle cache les totaux qui en découlent. Ce qu'elle ne cache pas, c'est la valeur de chaque position : chaque position est partagée avec son montant en euros, donc quiconque a le lien peut additionner ces montants et arriver à la valeur de votre portefeuille investi. Si ce chiffre est quelque chose que vous préférez ne pas publier, n'activez pas le lien.

L'image d'aperçu que les messageries et les réseaux sociaux affichent pour un lien de partage ne contient que des pourcentages.

Emporter vos données, et les supprimer

L'export est un bouton dans les paramètres du compte. Il vous rend tout en JSON : votre fiche de compte, chaque transaction enregistrée avec tous ses champs, votre historique d'envois et vos réglages.

La suppression est un bouton également, avec une confirmation à taper. Elle retire vos transactions, vos envois, vos correspondances de colonnes enregistrées, vos instantanés de portefeuille, vos positions d'ouverture, vos réglages et le compte lui-même. Deux petits registres subsistent volontairement, et tous deux ne contiennent qu'une empreinte salée irréversible de votre adresse e-mail et la date de début d'un essai gratuit. L'un est nettoyé au bout d'un an ; l'autre est conservé, parce qu'un registre qui expire offrirait à la même personne une série illimitée d'essais gratuits. Aucun des deux ne peut être retransformé en adresse.

Inscriptions et abus

L'inscription avec un domaine d'e-mail jetable est refusée, sur la base d'une liste de blocage de 8 335 domaines. Les services de redirection et d'alias sont vérifiés en premier et explicitement autorisés : Apple Hide My Email, Firefox Relay, DuckDuckGo, SimpleLogin et addy.io fonctionnent, parce que les personnes qui les utilisent sont exactement celles pour qui cette page est écrite.

Ce que nous ne faisons pas de vos données

Il n'y a pas de publicité et nous ne vendons pas de données. Il n'y a nulle part sur le site de service d'analyse tiers, de pixel de suivi ni de cookie publicitaire ; la politique de sécurité du contenu ci-dessus en bloquerait un s'il était ajouté par accident. Sentry reçoit des rapports d'erreur, jamais des pages vues. Ce que nous mesurons, ce sont six étapes par compte, par exemple qu'un premier fichier a été envoyé et que la comparaison a été affichée, enregistrées sur nos propres serveurs sous la forme d'une étape et d'une date. C'est votre abonnement qui finance tout cela.

Signaler un problème de sécurité

Écrivez à security@bullbenchmark.com en indiquant ce que vous avez trouvé et comment le reproduire. Cette adresse est lue par une personne et vous recevrez une réponse. Deux demandes : ne lancez pas de scans automatisés contre le service en production, et n'utilisez pas le compte ou les données d'une autre personne pour démontrer une trouvaille. Une description nous suffit pour la reproduire nous-mêmes.

Les questions qui ne sont pas des signalements de sécurité vont à support@bullbenchmark.com. Ce que nous faisons juridiquement des données personnelles est dans la politique de confidentialité ; l'accord lui-même est dans les conditions d'utilisation.