Sécurité

Vous allez nous confier votre facturation, les données de vos hôtes et l’adresse de vos clients. Cette page dit ce qui est fait et, à la fin, ce qui manque — parce que la deuxième liste en dit plus sur nous que la première.

15
Choses que nous prouvons
01
Choses qui manquent

Isolation

La frontière, c’est la base de données, pas une condition dans le code.

La plupart des plateformes mettent tous les clients dans les mêmes tables et les séparent par une colonne. Il suffit d’une requête écrite à la hâte, sans le filtre, pour qu’un client voie les données d’un autre. Ici, cette requête n’a rien à voir.

L’habitude

WHERE tenant_id = ?

Tous les clients dans les mêmes tables. La séparation est un filtre que quelqu’un doit penser à écrire, dans chaque requête, pour toujours. Un seul oubli suffit.

Ici

USE ajja_tenant_…

Chaque client dans sa propre base de données. La requête sans filtre ne renvoie quand même que ce qui est à vous, parce que la connexion a déjà été dirigée de votre côté avant que la requête n’existe.

ajja_tenant_<slug>

Une base de données par client
Elle s’appelle ajja_tenant_<votre-nom> et ne contient que vos 140 tables. La connexion est basculée à chaque requête vers celle qui vous appartient.

DROP DATABASE

Supprimer, c’est supprimer
Quand un client part, sa base de données est supprimée en entier. Aucun enregistrement marqué comme supprimé n’attend que quelqu’un le remarque.

qui vous êtes · ce que vous souscrivez · quels modules

La base centrale n’en sait que le minimum
La base de données centrale conserve qui vous êtes, ce que vous souscrivez et quels modules vous avez. Le travail au quotidien n’y passe jamais.

Comptes et accès

Qui entre, comment il entre, et jusqu’où il va.

Chacune de ces vérifications s’exécute sur le serveur. Aucune ne dépend de ce que le navigateur décide d’afficher ou de masquer.

  1. 01 TOTP · 8 codes · secret chiffré

    Deux facteurs, si vous le souhaitez

    Authentification à deux facteurs avec l’application que vous utilisez déjà. Le secret ne devient valable qu’après que vous avez confirmé un code généré avec lui, pour que personne ne se retrouve bloqué à cause d’un QR code mal lu. Vous recevez 8 codes de récupération, et eux comme le secret sont chiffrés dans la base de données.

  2. 02 5 minutes

    Le deuxième facteur a une échéance

    Entre le bon mot de passe et le code du téléphone, il y a un ticket temporaire qui dure cinq minutes. Passé ce délai, on repart du début — aucune demi-connexion ne reste ouverte en attente.

  3. 03 connexion 5/min · 2FA 10/min · inscription 3/heure · API 120/min

    Tentatives plafonnées

    La connexion est plafonnée à la fois par e-mail et par adresse : cinq tentatives par minute pour la même paire, vingt par minute pour la même adresse. Ne compter que l’e-mail permettrait à un inconnu de verrouiller votre compte en échouant exprès. La vérification à deux facteurs, l’inscription et les formulaires publics d’enregistrement et de réservation sont aussi plafonnés. L’API déjà authentifiée est limitée à 120 requêtes par minute et par utilisateur, et non par adresse — deux collègues dans le même bureau ne partagent pas le budget l’un de l’autre.

  4. 04 module + rôle · 403

    Permissions vérifiées sur le serveur

    Masquer un élément du menu n’est pas de la sécurité. Chaque adresse passe par deux vérifications distinctes — le module est actif pour ce client, et votre rôle voit ce module — et répond 403 même à qui saisit l’adresse à la main.

  5. 05 404, pas 403

    Un jeton ne sert que chez lui

    Un jeton valide, dirigé vers le nom d’un autre client, ne lit rien. Et la réponse est 404, pas 403 : celui qui essaie des noms de clients ne découvre pas lesquels existent.

  6. 06 une ressource par lien

    Portails sans compte

    L’hôte et le propriétaire entrent par un lien avec sa propre clé, qui n’ouvre qu’une seule chose et peut avoir une date de validité. Il n’y a pas de compte à leur voler ni de mot de passe à réutiliser ailleurs.

Une requête, du début à la fin

Sept questions avant que quiconque voie une ligne à vous.

Voici ce qui se passe entre le moment où vous cliquez sur un bouton et celui où le résultat apparaît. L’ordre est fixé au démarrage de l’application, pas laissé au hasard de la façon dont chaque route a été écrite — parce qu’une vérification qui s’exécute trop tard a déjà laissé la requête commencer à travailler.

  1. 01 404

    À qui est cette maison ?

    Le domaine propre, le sous-domaine ou l’en-tête de la requête indiquent à quel client elle appartient. Nom inconnu, cela s’arrête ici.

  2. 02 402

    L’abonnement est-il actif ?

    Un espace de travail suspendu n’est pas servi, pas même en lecture.

  3. 03 →

    Diriger la connexion

    La connexion à la base de données est dirigée vers celle de ce client. Tout ce qui vient ensuite, erreurs comprises, n’atteint que ce côté.

  4. 04 401

    Qui demande ?

    Le jeton est vérifié. Sans jeton valide, il n’y a pas d’étape cinq.

  5. 05 429

    Combien de requêtes avez-vous déjà faites ?

    120 par minute, comptées par utilisateur. Au-delà, le serveur dit que cela suffit.

  6. 06 404

    Appartenez-vous à ce client ?

    L’utilisateur du jeton et le client de la requête doivent être les mêmes. C’est cette jointure qui empêche un jeton légitime de lire la maison d’à côté.

  7. 07 403

    Pouvez-vous voir ce module ?

    Le module doit être actif chez le client et visible pour votre rôle. Deux vérifications, pas une.

Ce n’est qu’après ces sept étapes que les numéros dans l’adresse se transforment en enregistrements — et toujours à partir de la base de données choisie à l’étape trois.

Ce qui est enregistré

Qui a fait quoi, nous compris.

Un système qui n’enregistre rien vous oblige à croire sur parole. Nous préférons que vous puissiez vérifier.

Les données sont à vous

La porte de sortie est ouverte et signalée.

Une plateforme qui rend la sortie difficile avoue qu’elle ne peut pas vous retenir autrement.

une demande, un fichier

Export complet
Une demande renvoie tout ce qui vous appartient, de la base centrale et de votre base de données, avec la date à laquelle il a été extrait. Les mots de passe de votre équipe restent exclus, comme il se doit.

sans pénalité

Pas de frais de sortie
Vous résiliez quand vous voulez. Ce que vous avez exporté est à vous et se lit dans n’importe quel outil — ce n’est pas un format à nous que nous seuls ouvrons.

Ce qui en sort

  • Clients
  • Projets
  • Factures
  • Rendez-vous
  • Galeries
  • Photographies
  • Réservations
  • Ordres de service
  • Articles
  • Itinéraires
  • Documents
  • Propositions
  • Équipe
  • Abonnement
  • Demandes de support

Ce que nous n’avons pas encore

La liste courte, avant que vous la découvriez vous-même.

Rien de tout cela n’est promis ni contractualisé. C’est ici pour que vous sachiez ce que vous achetez aujourd’hui.

Des questions auxquelles cette page n’a pas répondu ?

Si vous allez nous confier des données de tiers, vous avez droit à des réponses concrètes avant de signer. Créez le compte et posez la question, ou posez-la d’abord.

14 jours gratuits, avec la carte validée sans prélèvement. Vous résiliez avant le 15e jour après la souscription et vous ne payez rien.