Créer un SaaS : de l’idée au MVP en 7 étapes
Créer un SaaS étape par étape : problème, périmètre de la V1, parcours, choix techniques, sécurité, paiement et lancement, avec l’exemple réel de Docalio.
8 min de lectureLire le guideSécuriser une application web : l’OWASP Top 10 2025 expliqué simplement, puis la checklist minimale (accès, mots de passe, en-têtes, sauvegardes, RGPD).

Une application web n’a pas besoin d’une attaque sophistiquée pour être compromise. Un contrôle d’accès oublié sur une page, une clé d’API publiée par erreur, une dépendance jamais mise à jour ou une sauvegarde jamais restaurée suffisent. Ces failles sont connues, documentées, et se préviennent avec une liste de contrôles courte.
Ce guide part de la liste de référence, l’OWASP Top 10 dans son édition 2025, puis la traduit en une checklist minimale à vérifier avant chaque mise en ligne, complétée par les recommandations de l’ANSSI et de la CNIL. Ce sont les réflexes acquis pendant mon cursus cybersécurité chez Guardia, que j’entretiens sur TryHackMe (sécurité web OWASP, réseaux, cryptographie) et que j’applique sur ce site comme sur Docalio.
L’OWASP (Open Worldwide Application Security Project) est une fondation à but non lucratif qui travaille à améliorer la sécurité des logiciels. Son Top 10 est un document de sensibilisation qui classe les risques les plus critiques des applications web. L’édition en vigueur, l’OWASP Top 10:2025, a été présentée en novembre 2025 et remplace celle de 2021.
| Rang | Catégorie | En clair |
|---|---|---|
| A01 | Broken Access Control (contrôle d’accès défaillant) | Un utilisateur lit ou modifie ce qui ne lui appartient pas. Inclut désormais la falsification de requêtes côté serveur (SSRF). |
| A02 | Security Misconfiguration (mauvaise configuration) | Comptes par défaut, messages d’erreur trop bavards, en-têtes de sécurité absents, stockage cloud trop ouvert. |
| A03 | Software Supply Chain Failures (chaîne d’approvisionnement logicielle) | Une dépendance, un outil de build ou un pipeline vulnérable ou compromis. Nouvelle catégorie, élargie à partir des « composants vulnérables et obsolètes » de 2021. |
| A04 | Cryptographic Failures (défaillances cryptographiques) | Données sensibles transmises ou stockées sans protection suffisante, algorithmes faibles, clés mal gérées. |
| A05 | Injection | Une donnée saisie est exécutée comme une commande : injection SQL, et aussi cross-site scripting (XSS). |
| A06 | Insecure Design (conception non sécurisée) | La faille est dans la logique même du produit : une implémentation parfaite ne la corrige pas. |
| A07 | Authentication Failures (défaillances d’authentification) | Mots de passe faibles, tentatives illimitées, sessions mal gérées. |
| A08 | Software or Data Integrity Failures (intégrité des logiciels et des données) | Du code ou des données non vérifiés traités comme fiables : mise à jour, extension, données sérialisées. |
| A09 | Security Logging and Alerting Failures (journalisation et alerte) | Une attaque passe inaperçue, faute de journaux ou d’alertes. |
| A10 | Mishandling of Exceptional Conditions (conditions exceptionnelles) | Une erreur imprévue laisse l’application dans un état incohérent, voire ouvert. Nouvelle catégorie. |
Ce qui change par rapport à 2021, d’après l’introduction de l’édition 2025 : le contrôle d’accès reste premier, la mauvaise configuration passe de la 5e à la 2e place, deux catégories apparaissent (A03 et A10), et l’authentification comme la journalisation changent de nom.
Le principe posé par l’OWASP tient en une phrase : « sauf pour les ressources publiques, refuser par défaut ». Trois règles en découlent.
/factures/1042 s’affiche, l’utilisateur essaie /factures/1043. Si l’application ne vérifie pas que cette facture lui appartient, il lit celle d’un autre client.Sur Docalio, un portail client B2B, elles se traduisent par des données isolées par organisation, un stockage privé des documents et des liens d’accès temporaires.
Côté technique, une base PostgreSQL permet d’écrire l’isolement dans la base elle-même. Supabase, par exemple, documente la sécurité au niveau des lignes (RLS) : une fois activée sur une table, une requête envoyée avec la clé publique n’accède qu’aux lignes autorisées par des règles explicites.
Dans une première version, mieux vaut s’appuyer sur un service d’authentification éprouvé que tout réécrire soi-même, puis vérifier ces points un à un dans sa configuration.
L’OWASP résume la prévention en une règle : garder les données séparées des commandes et des requêtes. En pratique :
Le XSS fait partie de la catégorie Injection : un script injecté dans une page s’exécute chez vos utilisateurs, avec leurs droits. La conception compte autant que le code (OWASP A06) : pour chaque parcours sensible, écrivez à côté des cas d’usage les « cas d’abus », ce qu’un utilisateur malveillant essaierait de faire.
Un serveur peut demander au navigateur d’activer des protections par de simples en-têtes HTTP. L’ANSSI y consacre un guide, « Maîtriser les standards de sécurité côté navigateur », et l’OWASP range leur absence dans la mauvaise configuration (A02). Voici les principaux en-têtes que renvoie ce site, statique et sans dépendance :
| En-tête | Valeur sur ce site | Ce qu’il protège |
|---|---|---|
Strict-Transport-Security | max-age=31536000 | Le navigateur n’utilise plus que HTTPS pour ce site, pendant un an. |
Content-Security-Policy | default-src 'self'; script-src 'self'; frame-ancestors 'none'; object-src 'none' (extrait) | Seuls les scripts du site s’exécutent, aucun script en ligne ni externe. Le site ne peut pas être intégré dans une autre page. |
X-Content-Type-Options | nosniff | Le navigateur respecte le type déclaré des fichiers au lieu de le deviner. |
X-Frame-Options | DENY | L’ancienne méthode anti-intégration, en doublon de frame-ancestors. |
Referrer-Policy | strict-origin-when-cross-origin | Les autres sites ne reçoivent que le domaine d’origine, pas l’adresse complète de la page. |
Permissions-Policy | camera=(), microphone=(), geolocation=(), payment=(), usb=() | Caméra, micro, géolocalisation, paiement et USB désactivés : le site n’en a pas besoin. |
Une précision honnête : les styles en ligne restent autorisés (style-src 'self' 'unsafe-inline'). C’est un compromis assumé, car le risque principal, l’exécution de scripts injectés, est fermé. Le guide CSP de MDN rappelle que la CSP sert d’abord de défense contre le XSS et contre le détournement de clic ; la page Strict-Transport-Security détaille HSTS.
Pour vérifier votre propre site, la commande curl -sI https://votre-site.fr affiche les en-têtes renvoyés, et l’HTTP Observatory de Mozilla les analyse et propose des corrections. Côté cookies, la CNIL demande d’activer les options HttpOnly et Secure sur tous les cookies.
Chaque dépendance ajoutée est du code que vous n’avez pas écrit, mais dont vous répondez. La nouvelle catégorie A03 de l’OWASP recommande de tenir l’inventaire des dépendances, de supprimer celles qui ne servent plus, de ne les obtenir que depuis des sources officielles et de surveiller les vulnérabilités publiées (CVE). La CNIL le dit plus simplement dans sa fiche sur les sites web : limiter le nombre de composants, en assurer la veille et les mettre à jour. Ce site pousse la logique au bout : il ne repose sur aucune dépendance npm, donc sur aucune bibliothèque tierce à surveiller.
Pour les secrets (clés d’API, accès à la base de données, secrets de webhooks) :
Une sauvegarde jamais restaurée n’est qu’une hypothèse. Dans ses fondamentaux de la sauvegarde, l’ANSSI recommande la règle « 3-2-1 » : trois copies des données (la production et deux sauvegardes) sur deux supports différents, dont une hors ligne. Elle demande aussi de tester régulièrement les sauvegardes et d’écrire une procédure de restauration. La CNIL va dans le même sens.
Les journaux permettent de comprendre ce qui s’est passé. Pour les traces applicatives, la CNIL recommande d’enregistrer les créations, consultations, partages, modifications et suppressions, avec l’auteur et la date, et de conserver ces événements sur une période glissante de six mois à un an. L’OWASP y ajoute l’alerte (A09) : un journal que personne ne lit ne détecte rien.
Prévoyez enfin l’échec (A10). Quand une opération échoue en cours de route, l’application doit tout annuler et revenir à un état sûr, ce que l’OWASP appelle « échouer de façon fermée », sans afficher de détail technique à l’utilisateur. Et si une violation de données personnelles présente un risque pour les personnes, le RGPD impose de la notifier à la CNIL dans les meilleurs délais, si possible sous 72 heures ; toute violation doit en outre être documentée en interne.
Pour une application qui traite des données personnelles, l’article 32 du RGPD impose une sécurité adaptée au risque, et le guide de la sécurité des données personnelles de la CNIL (édition 2024, 25 fiches) en détaille les mesures. Voici le minimum que je vérifie avant une mise en ligne.
frame-ancestors définiHttpOnly et SecureLa sécurité d’une application web ne s’ajoute pas à la fin, pendant la recette : elle se décide quand on dessine les rôles, les données et les parcours. Commencez par le contrôle d’accès, appuyez-vous sur des briques éprouvées pour l’authentification et le paiement, verrouillez le navigateur avec quelques en-têtes, puis faites des sauvegardes et des journaux une routine. Et relisez cette liste à chaque nouvelle fonctionnalité, pas seulement au lancement.
Vous lancez un SaaS ou un espace client et voulez un socle de sécurité solide dès la première version ? C’est le principe de mon accompagnement en création de SaaS et d’application web. Pour la méthode produit, voir aussi créer un SaaS, de l’idée au MVP.
C’est un document de sensibilisation publié par l’OWASP, une fondation à but non lucratif, qui classe les dix risques les plus critiques pour la sécurité des applications web. Il sert de référence commune aux développeurs, aux auditeurs et aux chefs de projet. Ce n’est pas une certification, mais un bon point de départ pour bâtir une checklist.
C’est l’édition 2025, présentée en novembre 2025, qui remplace celle de 2021. Le contrôle d’accès défaillant reste en tête, la mauvaise configuration monte à la deuxième place, et deux catégories apparaissent : les défaillances de la chaîne d’approvisionnement logicielle et la mauvaise gestion des conditions exceptionnelles.
Au minimum Strict-Transport-Security pour imposer HTTPS, Content-Security-Policy pour limiter les scripts autorisés et interdire l’intégration dans d’autres pages, X-Content-Type-Options (nosniff), Referrer-Policy et Permissions-Policy. Partez d’une CSP stricte, puis ouvrez-la seulement aux services tiers réellement nécessaires.
Oui, dès qu’elle traite des données personnelles : l’article 32 du RGPD impose des mesures techniques et organisationnelles adaptées au risque. La CNIL les détaille dans son guide de la sécurité des données personnelles. En cas de violation présentant un risque, la CNIL doit être notifiée dans les meilleurs délais, si possible sous 72 heures.
Commencez par les en-têtes : la commande curl -sI ou l’HTTP Observatory de Mozilla montrent ce que votre serveur renvoie. Testez ensuite le contrôle d’accès à la main : connecté avec un compte, essayez d’ouvrir une ressource d’un autre compte en changeant son identifiant dans l’adresse. Pour une application qui traite des données sensibles, un audit ou un test d’intrusion par un professionnel reste nécessaire.
Créer un SaaS étape par étape : problème, périmètre de la V1, parcours, choix techniques, sécurité, paiement et lancement, avec l’exemple réel de Docalio.
8 min de lectureLire le guide
LCP, INP, CLS : les seuils officiels de Google, comment les mesurer avec PageSpeed Insights et la Search Console, et les leviers concrets pour un site rapide.
9 min de lectureLire le guide
Cahier de recette, parcours, formulaires, paiements, mobile, accessibilité, SEO, retour arrière : la checklist pour mettre un site en ligne sans surprise.
8 min de lectureLire le guide