Aceeași platformă. Date separate.
Toți clienții rulează pe același cod și pe aceeași infrastructură, dar nu se pot vedea unul pe altul. Separarea nu depinde de o condiție uitată în cod: e impusă în trei straturi independente.
Trei straturi, fiecare suficient singur.
Proprietar pe fiecare rând
Fiecare tabel cu date de client poartă identificatorul clientului, iar relațiile dintre tabele îl includ. O legătură către datele altui client nu se poate scrie.
Row-level security forțat
Aplicația se conectează cu un rol care nu poate ocoli politicile de securitate PostgreSQL. Fără contextul clientului, o interogare nu întoarce niciun rând.
Chei de semnare per client
Fiecare client are cheile lui Ed25519. Un token emis pentru un client e respins de toți ceilalți, iar fiecare suprafață (Workspace, Portal, aplicație) are audiența ei.
Înainte de lansare am încercat sistematic să citim și să scriem date între doi clienți: rute, liste, exporturi, fișiere, notificări în timp real, cache, joburi. N-am găsit nicio scurgere. Aceeași listă de verificare se rulează înainte de fiecare release.
Ce e în spate.
| Arie | Ce facem |
|---|---|
| Conturi | Parole cu argon2id, sesiuni per dispozitiv revocabile, refresh tokens rotite, cu detectarea reutilizării. Conturile sunt per client: același e-mail la doi clienți înseamnă două conturi. |
| Doi factori | TOTP obligatoriu pentru administratori și proprietarul contului. Limită de încercări la autentificare și blocarea contului. |
| Drepturi | Fiecare acțiune cere o capabilitate; matricea rol × capabilitate se configurează per client. Accesul la nivel de bloc pentru administratori. |
| Operatori | Consola platformei are un sistem de autentificare separat, TOTP și Cloudflare Access în față. Accesul în contul unui client e doar în citire și auditat. |
| Edge | Tot traficul trece prin Cloudflare. Serverele refuză cererile care nu vin prin edge, iar aplicațiile web au Content Security Policy. |
| Fișiere | Stocate sub prefixul clientului. Documentele private se servesc doar prin link-uri semnate, cu durată scurtă. Încărcările periculoase sunt refuzate. |
| Secrete | Cheile clienților (de exemplu pentru integrări) se păstrează criptate cu AES-GCM, cu rotire. |
| Căutare | Filtrele sunt compilate în interogări parametrizate, cu limite de complexitate și de durată. |
| Operare | Loguri și limite de trafic per client, audit al acțiunilor, backup zilnic al bazei de date. |
Datele personale, delimitate
Persoanele (cumpărători, locatari) sunt separate de conturile de utilizator. Câmpurile marcate ca date personale sunt mascate pentru cine n-are dreptul să le vadă, nu apar în loguri și sunt incluse în export și ștergere.
Exportul și ștergerea se fac atât pentru un utilizator, cât și pentru un client întreg. Consimțămintele se păstrează cu versiunea textelor tale.
DPA și subprocesatori
Fiecare client semnează un acord de prelucrare a datelor. Lista subprocesatorilor (găzduire, edge, e-mail, notificări push) o primești odată cu oferta.
Ai întrebări de securitate pentru evaluarea furnizorului? Scrie-ne.