Sites & SaaS

Sécurité d’une application web : la checklist minimale (OWASP)

Sé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).

L’essentiel

  • Sécuriser une application web, c’est d’abord contrôler qui accède à quoi : le contrôle d’accès défaillant reste le premier risque de l’OWASP Top 10, en 2025 comme en 2021.
  • L’OWASP Top 10:2025, présenté en novembre 2025, est l’édition en vigueur : il fait entrer la chaîne d’approvisionnement logicielle et la mauvaise gestion des conditions exceptionnelles.
  • Le socle minimal : droits vérifiés côté serveur, authentification robuste, requêtes paramétrées, secrets hors du code, en-têtes de sécurité (CSP, HSTS), dépendances suivies, sauvegardes testées et journaux.
  • En France, la CNIL et l’ANSSI publient des recommandations gratuites qui précisent ces mesures ; dès qu’il y a des données personnelles, l’article 32 du RGPD impose une sécurité adaptée au risque.
Sommaire10 parties
  1. L’OWASP Top 10 2025 : les 10 risques à connaître
  2. Contrôle d’accès : le premier chantier, et le plus sous-estimé
  3. Authentification : ce que recommandent la CNIL, l’ANSSI et l’OWASP
  4. Injection et XSS : ne jamais mélanger données et commandes
  5. En-têtes de sécurité : ce que j’applique sur ce site
  6. Secrets et dépendances : surveiller le code que vous n’avez pas écrit
  7. Sauvegardes, journaux et incidents : prévoir le jour où ça casse
  8. La checklist minimale avant la mise en ligne
  9. En résumé : la sécurité se décide à la conception
  10. Questions fréquentes

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 Top 10 2025 : les 10 risques à connaître

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.

RangCatégorieEn clair
A01Broken 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).
A02Security Misconfiguration (mauvaise configuration)Comptes par défaut, messages d’erreur trop bavards, en-têtes de sécurité absents, stockage cloud trop ouvert.
A03Software 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.
A04Cryptographic Failures (défaillances cryptographiques)Données sensibles transmises ou stockées sans protection suffisante, algorithmes faibles, clés mal gérées.
A05InjectionUne donnée saisie est exécutée comme une commande : injection SQL, et aussi cross-site scripting (XSS).
A06Insecure Design (conception non sécurisée)La faille est dans la logique même du produit : une implémentation parfaite ne la corrige pas.
A07Authentication Failures (défaillances d’authentification)Mots de passe faibles, tentatives illimitées, sessions mal gérées.
A08Software 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.
A09Security Logging and Alerting Failures (journalisation et alerte)Une attaque passe inaperçue, faute de journaux ou d’alertes.
A10Mishandling 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.

Contrôle d’accès : le premier chantier, et le plus sous-estimé

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.

  • Vérifier côté serveur, à chaque requête. Masquer un bouton dans l’interface ne protège rien : la requête peut être envoyée directement.
  • Vérifier la propriété de chaque enregistrement. Exemple type : la facture /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.
  • Donner le moindre privilège. La CNIL recommande de définir des profils d’habilitation, de retirer les droits dès qu’ils ne sont plus justifiés et de les revoir chaque année.

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.

Authentification : ce que recommandent la CNIL, l’ANSSI et l’OWASP

  • Ne stocker que l’empreinte des mots de passe, calculée avec une fonction conçue pour cet usage et un sel, jamais avec MD5 ou SHA-1 (CNIL, fiche authentification).
  • Exiger des mots de passe robustes. La CNIL retient par défaut une entropie de 80 bits, par exemple 12 caractères mêlant majuscules, minuscules, chiffres et caractères spéciaux. L’OWASP conseille aussi de refuser les mots de passe présents dans les listes de fuites connues.
  • Limiter les tentatives de connexion, en bloquant le compte temporairement ou en ralentissant les essais.
  • Proposer l’authentification multifacteur, au moins pour les administrateurs et les accès depuis l’extérieur. L’ANSSI y consacre ses recommandations relatives à l’authentification multifacteur et aux mots de passe.
  • Gérer les sessions côté serveur : nouvel identifiant après la connexion, jamais dans l’adresse, invalidé à la déconnexion et après inactivité (OWASP A07).
  • Ne pas révéler si un compte existe lors de l’inscription ou de la réinitialisation du mot de passe, comme le demande la CNIL dans sa fiche sur la sécurité des sites web.

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.

Injection et XSS : ne jamais mélanger données et commandes

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 :

  • utiliser des requêtes paramétrées, jamais de texte saisi collé dans une requête SQL ;
  • valider les entrées côté serveur, en listant ce qui est autorisé plutôt que ce qui est interdit ;
  • échapper les caractères spéciaux selon l’endroit où la donnée est réutilisée ;
  • ajouter une politique de sécurité du contenu (CSP), seconde barrière contre le XSS.

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.

En-têtes de sécurité : ce que j’applique sur ce site

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êteValeur sur ce siteCe qu’il protège
Strict-Transport-Securitymax-age=31536000Le navigateur n’utilise plus que HTTPS pour ce site, pendant un an.
Content-Security-Policydefault-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-OptionsnosniffLe navigateur respecte le type déclaré des fichiers au lieu de le deviner.
X-Frame-OptionsDENYL’ancienne méthode anti-intégration, en doublon de frame-ancestors.
Referrer-Policystrict-origin-when-cross-originLes autres sites ne reçoivent que le domaine d’origine, pas l’adresse complète de la page.
Permissions-Policycamera=(), 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.

Secrets et dépendances : surveiller le code que vous n’avez pas écrit

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) :

  • jamais dans le code source ni dans le dépôt, mais dans des variables d’environnement ;
  • jamais dans le code envoyé au navigateur : chez Supabase, par exemple, la clé secrète contourne toutes les règles d’accès ;
  • un renouvellement en cas de doute : Stripe recommande de changer les secrets de webhook régulièrement, ou dès qu’une fuite est suspectée.

Sauvegardes, journaux et incidents : prévoir le jour où ça casse

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.

La checklist minimale avant la mise en ligne

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.

Accès et comptes

  • Chaque page et chaque API vérifie les droits côté serveur
  • Chaque enregistrement a un propriétaire, vérifié à chaque lecture
  • Comptes par défaut et comptes de test supprimés
  • Interfaces d’administration réservées aux personnes habilitées

Authentification

  • Mots de passe stockés sous forme d’empreinte salée, avec une fonction dédiée
  • Tentatives de connexion limitées
  • Authentification multifacteur pour les administrateurs
  • Messages neutres à l’inscription et à la réinitialisation

Code et données

  • Requêtes paramétrées partout
  • Aucun secret dans le dépôt ni dans le navigateur
  • Dépendances inventoriées, à jour, sans composant inutile
  • Aucune donnée personnelle dans les adresses (URL)

Serveur et navigateur

  • HTTPS partout, HSTS activé
  • CSP sans script en ligne, frame-ancestors défini
  • Cookies en HttpOnly et Secure
  • Messages d’erreur sans détail technique

Exploitation

  • Sauvegardes automatiques, dont une hors ligne, et restauration testée
  • Journaux des opérations sensibles, conservés et relus
  • Procédure écrite en cas d’incident, notification à la CNIL comprise

En résumé : la sécurité se décide à la conception

La 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.

Questions fréquentes

Qu’est-ce que l’OWASP Top 10 ?

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.

Quelle est la dernière version de l’OWASP Top 10 ?

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.

Quels en-têtes de sécurité ajouter à un site web ?

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.

Le RGPD oblige-t-il à sécuriser une application web ?

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.

Comment vérifier rapidement la sécurité de son site ?

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.

Sources

  1. OWASP Top 10:2025OWASP, 2025
  2. Introduction : what’s new in 2025OWASP Top 10:2025, 2025
  3. OWASP Top Ten (page du projet)OWASP
  4. About the OWASP FoundationOWASP
  5. Broken access control still tops list of app sec top 10The Register, 11 novembre 2025
  6. A01:2025 Broken Access ControlOWASP Top 10:2025, 2025
  7. A02:2025 Security MisconfigurationOWASP Top 10:2025, 2025
  8. A03:2025 Software Supply Chain FailuresOWASP Top 10:2025, 2025
  9. A05:2025 InjectionOWASP Top 10:2025, 2025
  10. A06:2025 Insecure DesignOWASP Top 10:2025, 2025
  11. A07:2025 Authentication FailuresOWASP Top 10:2025, 2025
  12. A10:2025 Mishandling of Exceptional ConditionsOWASP Top 10:2025, 2025
  13. Guide de la sécurité des données personnelles : nouvelle édition 2024CNIL, 26 mars 2024
  14. Sécurité : gérer les habilitationsCNIL, 13 mars 2024
  15. Sécurité : authentifier les utilisateursCNIL, 14 mars 2024
  16. Sécurité : sécuriser les sites webCNIL, 14 mars 2024
  17. Sécurité : sauvegarder et prévoir la continuité d’activitéCNIL, 14 mars 2024
  18. Sécurité : tracer les opérationsCNIL, 14 mars 2024
  19. Notifier une violation de données personnellesCNIL
  20. Recommandations relatives à l’authentification multifacteur et aux mots de passeANSSI, 8 octobre 2021
  21. Recommandations pour la mise en œuvre d’un site web : maîtriser les standards de sécurité côté navigateurANSSI, 28 avril 2021
  22. Sauvegarde des systèmes d’information : les fondamentauxANSSI, 27 novembre 2025
  23. Content Security Policy (CSP)MDN
  24. En-tête Strict-Transport-SecurityMDN
  25. HTTP ObservatoryMozilla (MDN)
  26. Row Level SecuritySupabase Docs
  27. Receive Stripe events in your webhook endpointStripe Docs