Sécurité et confidentialité dans Badgr

Cette page s'adresse aux DPO, RSSI et responsables IT qui évaluent Badgr dans le cadre d'un cycle d'achat ou d'un audit de conformité. Elle décrit les mesures techniques et organisationnelles en place, telles qu'elles sont implémentées dans le code de production.

Chiffrement des données sensibles

Badgr distingue deux types de données sensibles, traités différemment selon leur usage :

Mots de passe et codes PIN

Les mots de passe des utilisateurs et les codes PIN des employés sont stockés via bcrypt (fonction password_hash PHP avec PASSWORD_DEFAULT). Il s'agit d'un hachage à sens unique — Badgr ne peut pas retrouver un mot de passe en clair. La vérification s'effectue par comparaison de hachage (password_verify).

Secrets d'intégration

Les credentials qui doivent être déchiffrables par l'application (mot de passe de bind LDAP, client secret Azure AD) sont chiffrés en AES-256-CBC avec un IV aléatoire de 128 bits généré à chaque opération de chiffrement. Le chiffré est encodé en base64 avant stockage.

La clé de chiffrement est dérivée de la variable d'environnement APP_SECRET (minimum 32 caractères exigés au démarrage) via SHA-256. Cette variable n'est jamais présente dans le code source ni dans le dépôt — elle est injectée uniquement au niveau du serveur.

ℹ️
Source : api/lib/encryptor.php

La classe Encryptor lève une exception si APP_SECRET est absent ou trop court, ce qui bloque le démarrage de l'application plutôt que de chiffrer avec une clé faible.

Transport sécurisé

HTTPS sur badgr.be

Toute communication avec badgr.be est chiffrée en TLS 1.2 minimum. Les requêtes HTTP sont redirigées vers HTTPS au niveau du serveur web. Il n'existe pas d'endpoint actif en clair sur le domaine de production.

Appels sortants vers Microsoft et OAuth

Les appels vers l'API Microsoft Graph et les endpoints d'authentification OAuth utilisent un contexte de flux PHP avec validation stricte du certificat serveur : verify_peer = true, verify_peer_name = true, allow_self_signed = false, et un timeout de 10 secondes. Un certificat auto-signé côté Microsoft provoquerait une erreur de connexion, pas un fallback silencieux.

Connexions LDAP

Les connexions vers un annuaire LDAP utilisent le schéma ldaps:// lorsque l'option SSL est activée. Lors des opérations d'importation et de recherche, Badgr impose LDAP_OPT_X_TLS_REQUIRE_CERT = LDAP_OPT_X_TLS_DEMAND — la connexion est refusée si le certificat serveur ne peut pas être validé. Un timeout réseau de 5 secondes est également appliqué.

Isolation multi-tenant

Badgr est une application multi-tenant : plusieurs organisations (tenants) cohabitent sur la même infrastructure, chacune isolée des autres.

L'isolation est appliquée côté serveur à chaque requête :

Cette isolation ne repose pas uniquement sur l'interface utilisateur : elle est vérifiée à chaque endpoint API indépendamment de ce que l'interface affiche.

Authentification renforcée

Hébergement et RGPD

Aspect Détail
Infrastructure Hetzner Online GmbH, datacenter en Allemagne (UE)
Localisation des données Stockées exclusivement en UE
Transferts hors-UE Stripe (paiements, siège US — sous-traitant documenté, clauses contractuelles types) et Resend (emails transactionnels). Aucun autre transfert hors-UE.
Droits RGPD Accès, rectification, effacement sur demande à support@badgr.be. Politique complète sur badgr.be/privacy.html.

Données stockées vs non stockées

Catégorie Stocké ? Détail
Nom et email des utilisateurs Oui Propriétaires, admins, managers, employés.
Pointages, horaires, absences Oui Base légale : obligation de registre (loi belge du 5 mars 2017).
Données de facturation Chez Stripe uniquement Badgr ne stocke pas les coordonnées bancaires — elles sont gérées directement par Stripe et ne transitent jamais par nos serveurs.
Mots de passe en clair Non bcrypt uniquement. Irrécupérable.
Codes PIN en clair Non bcrypt uniquement.
Secrets LDAP / Azure en clair Non AES-256-CBC avec IV aléatoire. Jamais en clair en base.

Rétention et suppression

Donnée Durée de conservation Base légale
Pointages, plannings, absences 7 ans Loi belge du 5 mars 2017 sur le registre de présence + droit social belge
Données de facturation (factures) 7 ans Obligation comptable belge
Données personnelles (noms, emails…) Jusqu'à suppression du compte RGPD Art. 5(1)(e)

Suppression de compte : lorsque l'owner supprime son organisation, les données personnelles identifiables (noms, emails, PINs, tokens, signatures) sont anonymisées immédiatement. Les pointages, plannings et absences sont conservés sous forme anonymisée pendant 5 ans conformément à la loi belge, sans aucun lien permettant de les rattacher à une personne réelle.

Résilience réseau (mode hors ligne)

En mode hors ligne (plans Essentiel et supérieurs), le kiosque stocke une copie chiffrée des données nécessaires au pointage dans l'IndexedDB du navigateur. Ce cache local est chiffré en AES-256-GCM avec une clé dérivée du token kiosque — il ne peut pas être lu sans connaître le token.

En cas de perte ou de vol de la tablette :

Les pointages enregistrés hors ligne sont chiffrés avant mise en file d'attente et ne transitent vers le serveur qu'une fois la connexion rétablie, via HTTPS. Voir la page dédiée au mode hors ligne pour les détails techniques.

Audit et journaux

Un journal des pointages est accessible depuis Pointages → Journal (et admin/logs.html pour les owners). Il enregistre chaque événement de pointage avec son horodatage, l'identifiant de l'employé, et le statut de modification éventuelle. Les managers y accèdent avec un périmètre limité à leur service.

Les actions administratives critiques (activation/désactivation du MFA, changements de plan, suppressions) sont tracées dans une table audit_log interne, non encore exposée dans l'interface — cette fonctionnalité est prévue dans une version future.

Documentation à jour au 13 mai 2026. Données vérifiées dans api/lib/encryptor.php, api/lib/totp.php, api/admin/ldap_config.php, api/admin/ldap_search.php, api/admin/mfa_setup.php et api/admin/delete_account.php. Si vous remarquez une incohérence, écrivez-nous.

Besoin d'aide ? Contactez le support Badgr

Notre équipe répond en moins de 24h en jours ouvrés.

Réponse sous 24h en jours ouvrés.