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.
Isolation
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>
DROP DATABASE
qui vous êtes · ce que vous souscrivez · quels modules
Comptes et accès
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.
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.
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.
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.
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.
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.
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
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.
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.
Un espace de travail suspendu n’est pas servi, pas même en lecture.
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é.
Le jeton est vérifié. Sans jeton valide, il n’y a pas d’étape cinq.
120 par minute, comptées par utilisateur. Au-delà, le serveur dit que cela suffit.
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é.
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é
Un système qui n’enregistre rien vous oblige à croire sur parole. Nous préférons que vous puissiez vérifier.
auteur · action · cible · avant/après
Les actions d’administration d’importance — suspendre un client, modifier le prix d’une formule, désactiver un coupon — enregistrent qui les a faites, sur quoi, et la valeur avant et la valeur après. C’est écrit à chaque utilisation, exprès : ce qu’une machine fait toute seule, comme un paiement qui se confirme, n’est l’action de personne et ne figure pas dans cette liste.
tenant.impersonated
Le support peut entrer dans votre compte pour résoudre un problème. Cela est enregistré avec un nom et une heure, et tant que cela dure, une barre en haut de l’écran indique que cela se produit. Ce n’est pas silencieux.
type · contenu · statut · erreur
Chaque événement de paiement reçu conserve le type, le contenu, le statut et le message d’erreur en cas d’échec. Le même événement répété est reconnu et n’est pas compté deux fois.
sans corps de requête
Quand quelque chose plante, nous conservons le message, le fichier, la ligne et l’adresse qui a échoué. Le corps de la requête n’est pas conservé — pour enquêter sur une erreur, il n’est pas nécessaire de garder la facture que vous alliez enregistrer.
Les données sont à vous
Une plateforme qui rend la sortie difficile avoue qu’elle ne peut pas vous retenir autrement.
une demande, un fichier
sans pénalité
Ce qui en sort
Ce que nous n’avons pas encore
Rien de tout cela n’est promis ni contractualisé. C’est ici pour que vous sachiez ce que vous achetez aujourd’hui.
L’export est fait. Supprimer les données d’un seul individu en gardant le reste reste un travail manuel — la seule suppression automatique est celle du client entier.
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.