Sécurité et limites
Authentification
- Code à usage unique par email (Better Auth) : expiration en 5 minutes, 3 essais, codes stockés hachés, limitation des envois.
- SSO OIDC par domaine. Seuls les administrateurs de la plateforme déclarent un fournisseur, après avoir vérifié que l’organisation possède le domaine : sinon un fournisseur pourrait émettre des emails d’un domaine qui n’est pas le sien. Les routes d’enregistrement de Better Auth ne sont pas exposées.
- Sessions web de 7 jours en cookies
HttpOnly. Aucun en-tête ne suffit à se faire passer pour quelqu’un. - Connexion VS Code par approbation dans le navigateur, avec comparaison d’un code affiché des deux côtés. Le jeton reste chiffré dans le stockage secret de VS Code ; le serveur n’en garde que l’empreinte SHA-256. Sessions de 30 jours, révocables.
Données
| Donnée | Où | Remarque |
|---|---|---|
| Organisations, membres, invitations, groupes, thèmes, versions, rapports de validation, préférences, sessions hachées, fournisseurs SSO, journal | Base SQLite (Cloudflare D1) | Versions publiées immuables (contrainte SQL) |
| CSS publiés | Stockage de la plateforme (Cloudflare R2) ou de l’organisation (S3 compatible, Azure Blob) | Jamais public : le serveur renvoie le CSS après contrôle des droits |
| Identifiants de stockage | Base, chiffrés (AES-GCM) | Jamais renvoyés ; adresses de stockage en HTTPS uniquement |
| CSS envoyé à l’assistant IA | API Claude (Anthropic) | Seulement si l’organisation l’active ; images et polices incorporées retirées avant l’envoi |
| Présentations Markdown et leurs images | Nulle part | Elles restent sur les postes |
Contrôles sur les thèmes
Chaque thème passe par le validateur des thèmes, le même dans l’éditeur, sur le serveur et dans l’extension :
- CSS lu par un vrai analyseur : les contrôles portent sur les valeurs décodées, un échappement ne peut pas masquer une URL ;
- aucune ressource externe : seules des images et polices incorporées en
data:base64, dont les premiers octets correspondent au type annoncé ; - pas de SVG, pas d’
@importhors thèmes intégrés à Marp, pas de</style, pas d’anciens mécanismes de script ; - toutes les classes du Core v1 doivent avoir un effet, et la géométrie des slides de contrôle est vérifiée dans un navigateur.
Il n’y a pas de limite de taille comme règle : les images incorporées font grossir le CSS. Seule subsiste la limite technique d’une requête (64 Mo).
L’aperçu est affiché dans une iframe isolée, sans scripts ni réseau. Côté extension, l’organisation, le nom, la version et l’empreinte SHA-256 du CSS sont vérifiés avant installation, puis le validateur est appliqué.
Ce que les permissions ne font pas
- Une révocation n’efface pas les copies déjà téléchargées et n’empêche pas leur utilisation hors ligne. Les permissions régissent la distribution.
- La géométrie (étape 6 du validateur) est mesurée par le navigateur de l’éditeur : une personne qui forgerait son rapport ne publierait que dans sa propre organisation. La sécurité (étapes 1 à 3) est toujours contrôlée par le serveur.
Hors périmètre actuel
Stockage ou édition collaborative des présentations, rendu PDF/PPTX distant, éditeur visuel de thème, incorporation automatique d’images et de polices (le CSS importé doit déjà être autonome), invitations par lien, suppression d’organisation, synchronisation d’annuaire (SCIM), facturation.
Avant une mise en production
Points ouverts, à traiter avec le compte et le domaine définitifs : domaine expéditeur des emails, limites de requêtes, sauvegardes de la base, nettoyage des fichiers orphelins (brouillons remplacés) dans les stockages, relecture des traductions ukrainienne et arabe.