Un fichier d'adhérents de club de tirn'est pas un fichier client.
Il porte des identités, des dates de naissance, des adresses et des numéros de licence. Rapprochés, ces champs disent qu'une personne pratique le tir et où elle habite. C'est ce rapprochement, bien plus que chaque champ pris isolément, qui rend ce fichier sensible — et c'est la contrainte de départ de Cibléo, pas une case cochée à la fin.
Cette page décrit les mécanismes réellement en place, ce qu'ils couvrent, et ce qu'ils ne couvrent pas encore. Rien n'y est écrit au futur.
- Hébergement en Union européenne
- Chiffrement au repos des données sensibles
- Isolation entre clubs garantie par la base
- Double authentification obligatoire
- Aucun traceur, aucune publicité
Ce qui est en jeu
Trois raisons de traiter ces données à part
Une fuite ne se répare pas
Un mot de passe se change en une minute. Une date de naissance, une adresse, un numéro de licence : jamais. Ce qui sort d'une base d'adhérents reste dehors, définitivement — c'est pourquoi la protection se joue avant l'incident, pas après.
La donnée la plus sensible n'est dans aucune colonne
Elle naît du rapprochement : « licencié » plus « adresse » est une information sur un domicile. Aucun champ n'est marqué comme tel, et c'est justement pour ça que la minimisation compte : ce qui n'est pas collecté ne peut pas fuiter.
Le registre de présence a valeur probante
C'est lui que l'autorité consulte, lui qui fonde l'assiduité — donc le renouvellement d'une autorisation de détention — et toute procédure disciplinaire. Il doit être exact, et il doit être impossible à réécrire après coup.
Protéger la donnée
Ce que contient réellement la base
Les protections qui tiennent même si l'application se trompe : elles sont posées dans la base de données, ou dans le chiffrement lui-même.
L'isolation entre clubs est dans la base, pas dans l'application
Chaque club ne voit que ses propres données. Cette frontière n'est pas un filtre ajouté aux écrans : elle est posée dans PostgreSQL, sur chaque table. Une erreur de développement, un identifiant modifié dans une URL, un cookie forgé ne la traversent pas — la base refuse de rendre la ligne.
Comment · Row Level Security sur toutes les tables scopées, doublée d'une suite de tests de non-régression rejouée sur une base jetable dès qu'une migration ou le modèle de droits bouge.
Les données les plus sensibles sont chiffrées au repos
Nom, prénom, e-mail, téléphone, nom et date de naissance, adresse, numéro de licence, coordonnées bancaires d'une note de frais, signatures manuscrites, motifs de sanction, notes administratives : pour ces champs, la base ne contient que du texte chiffré. La copie de pièce d'identité d'un invité et la photo de sa fiche signée sont, elles, chiffrées jusque dans le fichier stocké.
Comment · AES-256-GCM, clé détenue par l'application et jamais par la base. Un inventaire des colonnes chiffrées est tenu par un test qui relit le code : une rotation de clé ne peut pas en oublier une.
Chercher un licencié sans jamais déchiffrer la base
Le numéro de licence sert d'identifiant de connexion et relie les fiches d'un même tireur entre plusieurs clubs. Il reste chiffré : ce qui est comparé à la connexion est une empreinte, pas le numéro. La base ne peut ni la recalculer, ni remonter au numéro d'origine.
Comment · Index HMAC dérivé d'une sous-clé de domaine détenue par le serveur ; la base ne détient pas la clé. Une clé, un usage : chaque dérivation a son domaine, aucune n'emprunte celui d'une autre.
Contrôler qui fait quoi
Les accès, et ce qu'ils coûtent à obtenir
Un droit n'est pas un interrupteur. Il porte un niveau, il s'arrête au seuil du geste demandé, et il expire.
Chaque pôle du bureau s'arrête à ce qui le concerne
La trésorerie est réservée au trésorier, le secrétariat au secrétaire. Les droits portent un niveau ordonné — consulter, créer, modifier, supprimer — et chaque opération est gardée au seuil qui lui correspond : pouvoir consulter une fiche ne donne jamais le droit de l'effacer.
Comment · Le même seuil est contrôlé deux fois, dans l'application et dans les policies SQL. C'est la base qui tranche en dernier ressort.
Rédiger n'est pas diffuser
Écrire une lettre ou une convocation et l'envoyer à tous les adhérents sont deux droits distincts. Un envoi groupé ou un SMS exige en plus une confirmation émise par le serveur, valable une fois, liée à son auteur et à sa cible — et il ne part que d'un travail terminé : pas de feuille de permanences en brouillon, pas de convocation sans ordre du jour.
Comment · Une modale se contourne, une confirmation à usage unique délivrée puis brûlée côté serveur, non. Un test relit les actions d'envoi et échoue si l'une d'elles part sans garde.
Deux facteurs pour entrer, et des espaces qui se ferment seuls
La double authentification est obligatoire pour tout compte du bureau — elle ne se désactive pas, et le second facteur est demandé à chaque connexion, sur tout appareil. Un compte n'ouvre qu'un espace par type d'appareil (un ordinateur, un mobile), fermé après une heure sans geste de la personne — un écran resté allumé ne compte pas — et 24 h après son ouverture. Reprendre la main sur un appareil déjà connecté exige de présenter à nouveau le second facteur : le seul mot de passe ne suffit jamais à évincer quelqu'un.
Comment · La fermeture d'un espace est évaluée par la base elle-même : un espace périmé retombe à zéro droit, quel que soit le chemin emprunté. Devant le mot de passe, une vérification anti-robot (Cloudflare Turnstile), jugée par le serveur d'authentification et non par la page, écarte les essais automatisés.
Des registres qui font foi
Le tir contrôlé et les présences
Ce sont les pages qu'un contrôle vient lire. Elles sont construites pour résister à la contestation — y compris venant du club lui-même.
Le registre de présence ne se supprime pas
Aucune ligne ne peut être effacée, par personne, tant que dure sa conservation. Une erreur de pointage se corrige par une annulation motivée : la ligne reste au registre, marquée comme annulée, et sort de l'assiduité et des comptages. Les éléments de preuve — qui, par quel moyen, à quelle borne — sont gelés : une correction rectifie un horaire, elle ne requalifie pas un pointage après coup.
Comment · Un journal en ajout seul, chaîné par empreintes : modifier ou retirer un maillon casse tous les suivants, et une vérification nomme le rang en défaut. Le journal ne contient ni nom, ni licence, ni coordonnée.
On ne pointe pas sans scanner
La géolocalisation seule ne prouve rien : un rayon de 200 m couvre le parking et la route d'en face, et une position se falsifie sans matériel. Le QR est donc exigé. Le code tournant d'une borne suffit seul ; un QR imprimé, lui, demande en plus d'être dans le rayon du stand — sinon une photo partagée vaudrait présence à vie.
Comment · Un code de borne valide accompagné d'une position précise hors du rayon est refusé : c'est la signature d'un code relayé par message.
Montrer le registre à un contrôle sans ouvrir le club
Exporter un CSV et l'envoyer par courriel fait partir un fichier qui ne revient jamais ; ouvrir une session du bureau devant un agent donne accès aux adhérents, à la comptabilité et aux licences. Le lien de contrôle ne montre que le registre — identité, licence, horaires, pas de tir — pour une période figée, pendant 24 h, en lecture seule.
Comment · Durée calculée par la base, jeton haché, aucun chemin d'écriture. Chaque consultation dépose une trace : un partage qui ne laisse pas de trace n'est pas un partage. Le registre porte un certificat d'intégrité, dont l'empreinte se vérifie sans compte sur la page « Vérifier un registre ».
Si vous êtes licencié
Ce que votre club voit, ce que nous ne regardons pas
L'espace tireur sert à pointer, consulter sa pratique et ses documents. Il est tenu par votre club, qui reste responsable de vos données ; nous en sommes l'hébergeur technique.
Votre position n'est lue qu'au moment du pointage
Seulement quand vous validez votre arrivée — et votre départ — en scannant une affiche imprimée ; jamais avec le code de la borne du stand. Aucun suivi en arrière-plan, aucun historique de déplacements, et vos coordonnées exactes ne sont pas conservées : seules une distance approximative et la précision du signal sont enregistrées, pour attester que le pointage a eu lieu sur place.
Votre code personnel n'est stocké nulle part
Ni en clair, ni sous une forme que quelqu'un pourrait essayer hors ligne : même en cas de vol de la base, les codes ne peuvent pas être retrouvés. En ligne, cinq essais manqués verrouillent l'accès un quart d'heure, puis une heure, puis vingt-quatre heures si les échecs se répètent. Devant le code, une vérification anti-robot (Cloudflare Turnstile), jugée par notre serveur et non par la page, écarte les essais automatisés.
Un seul appareil connecté à la fois
Vous connecter quelque part ferme l'espace ouvert ailleurs, et les deux appareils l'apprennent. Si un accès est repris plusieurs fois en 24 h, le bureau reçoit une alerte neutre : un code prêté fait pointer quelqu'un d'autre sur un registre qui a valeur légale.
Vous emportez vos données quand vous voulez
Une copie de vos données se télécharge depuis votre espace, sans demande préalable ni délai (droit à la portabilité). L'accès, la rectification et l'effacement s'exercent auprès du bureau de votre club, qui en est le responsable.
Aucun dossier médical
Pas de certificat médical stocké, pas de mention d'aptitude, pas de restriction de santé : votre club ne note que les dates de votre certificat, pour vous prévenir avant l'échéance. Ce que vous choisissez d'écrire vous-même — une allergie en vous inscrivant au repas du club, votre forme du jour dans votre carnet d'entraînement — est chiffré, et ne sert qu'à cela.
Votre identité est chiffrée
Nom, prénom, e-mail, téléphone, nom et date de naissance, adresse et numéro de licence ne sont pas lisibles dans la base. Votre lieu de naissance et votre nationalité, eux, ne sont pas demandés du tout.
Par construction
Ce que Cibléo ne fait pas
Une liste de renoncements est plus vérifiable qu'une liste de promesses : il suffit d'un contre-exemple pour la démentir.
Aucune revente, aucune publicité, aucun profilage
Les données d'un club servent à faire fonctionner ce club. Elles ne sont ni cédées, ni louées, ni agrégées pour un tiers, et ne nourrissent aucun ciblage.
Aucun traceur, donc aucune bannière cookies
Pas de mesure d'audience, pas de pixel publicitaire, pas de réseau social embarqué. Les seuls cookies déposés sont nécessaires au service — session, club actif, second facteur, marqueur d'activité du bureau, langue choisie dans l'espace tireur. C'est pourquoi aucune bannière ne vous demande rien. Seule exception, les vidéos de sécurité de la Fédération, hébergées par YouTube : elles ne se chargent qu'au clic, en mode « confidentialité renforcée ».
Aucun enregistrement de vos sessions
Les outils qui rejouent l'écran d'un utilisateur ne sont pas installés — pas « désactivés » : un rejeu filmerait l'état civil, l'adresse et le numéro de licence tels qu'ils s'affichent.
Aucune donnée personnelle chez l'outil de supervision
L'outil qui nous signale les pannes ne reçoit ni identité, ni adresse IP, ni contenu de requête : les jetons des liens publics sont remplacés dans les URL et les paramètres de recherche sont retirés avant l'envoi. Ce tri est du code, pas une consigne de vigilance.
Aucun traitement par intelligence artificielle à votre insu
Les fonctions d'aide à la rédaction ne se déclenchent que si quelqu'un le demande explicitement, geste par geste. Rien ne part en arrière-plan, et aucun modèle n'est entraîné sur vos données.
Aucune clé d'administration dans votre navigateur
La clé technique qui contournerait l'isolation entre clubs n'existe que côté serveur. Elle n'est jamais envoyée au navigateur, jamais incluse dans le code de l'application.
Vérification
Comment nous savons que c'est encore vrai demain
Une protection non testée est une intention. Les quatre premiers contrôles tournent dans le dépôt — un changement qui les casse ne passe pas ; le dernier relève de l'exploitation.
Les règles d'isolation sont rejouées sur une base réelle
Pas sur des simulacres : une base jetable est montée, les règles y sont attaquées comme le ferait un compte d'un autre club, et le résultat doit rester un refus. Ce test est exigé dès qu'une migration, une policy ou le modèle de droits bouge.
L'inventaire des données chiffrées est tenu par un test
Un test relit le code source et échoue si une colonne chiffrée quelque part manque à l'inventaire, ou si l'inventaire cite une colonne qui n'existe pas. C'est ce qui permet à une rotation de clé de se terminer — sinon l'ancienne clé continuerait indéfiniment de déchiffrer la base.
Un garde-fou anti-fuite avant chaque commit
Un contrôle installé dans le dépôt inspecte les lignes ajoutées avant enregistrement et bloque les formes connues de clés et de jetons. Les secrets vivent en variables d'environnement, jamais dans le code.
Les envois et les liens publics sont relus par des tests
Un test échoue si une action d'envoi aux adhérents oublie sa garde de permission ; un autre échoue si une nouvelle page à jeton public échappe au nettoyage des URL transmises à la supervision.
Une politique de sauvegarde, et son test de restauration
L'objectif est de perdre au plus une journée de saisie et de remettre le service en état en quelques heures. Chaque nuit, une copie chiffrée part hors de l'hébergeur, dans l'Union européenne : inaltérable pendant 30 jours, effacée au plus tard au bout de douze mois. Elle est relue automatiquement chaque mois, et restaurée en entier deux fois par an sur un projet jetable : une sauvegarde jamais restaurée n'est pas une sauvegarde, c'est une hypothèse.
Franchise
Ce que nous ne promettons pas
La seule chose pire que de ne rien dire est de dire faux. Voici les limites que nous connaissons.
Cibléo est en version alpha
Le produit est en développement actif : des fonctionnalités sont en construction et des anomalies restent possibles. Cela ne dispense d'aucune des protections décrites plus haut — mais cela veut dire que ce site décrit un produit qui bouge.
Aucun test d'intrusion externe à ce jour
Nos audits de sécurité sont des revues du code et du modèle de droits : aucune vulnérabilité exploitable n'y a été identifiée, mais rien n'a été attaqué par un tiers. Nous n'écrirons jamais « sécurisé à 100 % » — la formule honnête est celle-ci.
L'éditeur dispose d'un accès technique à l'infrastructure
C'est inhérent à tout logiciel hébergé, et nous préférons l'écrire que le taire. Trois limites l'encadrent : cet accès est contractuellement réservé à l'exploitation et au support ; l'interface d'administration ne désigne un adhérent que par une référence, et son identité n'y est déchiffrée qu'au cas par cas, pour le support, sur un motif écrit — une consultation que le club voit dans son propre journal d'activité ; et toute intervention exige un motif et une double authentification, en laissant une trace que l'éditeur lui-même ne peut pas effacer.
Tout n'est pas chiffré, et voici quoi
Quelques champs restent en clair parce qu'ils sont lus par la base elle-même — une fonction SQL ne détient pas la clé, donc ne peut pas déchiffrer — ou par une page publique à jeton : l'adresse et l'e-mail du bénévole qui dépose une note de frais, et l'IBAN de collecte de l'association imprimé sur les factures. (L'identité et les coordonnées des adhérents — nom, prénom, e-mail, téléphone, adresse — sont, elles, chiffrées.) Les chiffrer suppose d'abord de déplacer ces lectures hors de la base : c'est un chantier identifié, pas un oubli.
La sécurité de votre club dépend aussi de votre club
Des droits distribués trop largement, un code personnel prêté, un poste partagé laissé ouvert : aucun mécanisme ne rattrape cela. Cibléo donne les outils — droits fins, journaux, alertes sur les accès repris — et le bureau reste responsable de l'usage qui en est fait.
Signalement
Vous pensez avoir trouvé une faille ?
Écrivez-nous avant de la publier, et n'allez pas plus loin que nécessaire pour la démontrer : n'accédez pas aux données d'un club, n'en modifiez aucune, n'en conservez aucune copie. Un signalement de bonne foi est traité en priorité, et nous vous disons ce qui a été corrigé.
Contact sécurité et données : contact@cibléo.fr
Documents