Nos expertises / Sécurisation d'application

Sécurisez votre application, et prouvez-le

Les attaques contre les applications web ne sont plus le fait de quelqu'un qui vous a choisi. Elles sont automatisées et permanentes, et l'intelligence artificielle a mis la recherche de failles à la portée de n'importe qui : ce qui demandait hier un spécialiste et plusieurs jours se tente aujourd'hui en quelques minutes, sur tout ce qui répond sur internet.

Nous auditons la sécurité des applications Symfony et PHP : scan de l'application en ligne, vulnérabilités connues de vos dépendances, analyse du code, configuration, et une checklist calée sur l'OWASP Top 10.

Vous repartez avec un rapport daté, la liste de ce qui reste ouvert avec un plan d'action adapté

Avis Google
5 Note Google : 5 sur 5
Avis Trustpilot
4,7 Note Trustpilot : 4,7 sur 5

Ce qui déclenche la demande

Dans quel cas êtes-vous ?

Quatre situations qui amènent à faire auditer une application. La demande ne vient pas toujours de la direction : un DSI à qui l'on réclame des garanties, un CTO qui veut un regard extérieur sur ses choix, un développeur qui préfère dire avant l'incident qu'il n'est pas à l'aise sur le sujet. Certaines de ces situations sont imposées avec une échéance à respecter ; d'autres viennent de vous, quand plusieurs signaux finissent par dire que le sujet n'a jamais été traité.

Un questionnaire sécurité arrive

Votre donneur d'ordre, son assureur ou un appel d'offres vous envoie une grille de questions portant sur la sécurité de l'application que vous exploitez. Elles sont légitimes et vous devez fournir des les preuves associées.

    Une alerte tombe sur une de vos dépendances

    Quelqu'un vous transfère un bulletin de sécurité en demandant si vous êtes exposé. Mais cela impose d'avoir un référentiel à jour de vos projets et dépendances associés pour être en mesure de répondre dans un temps raisonnable.

      Un client final annonce un audit

      Un grand compte va faire passer un prestataire sur votre application avant de signer, ou après un incident chez lui. Vous préférez savoir ce qu'il va trouver avant lui, pendant qu'il est encore temps de traiter.

        Personne n'a jamais regardé

        L'application tourne depuis des années, elle n'a jamais été audité et personne ne sait dans quel état sont son code et ses dépendances. Ce n'est pas une alerte tant qu'il n'y a pas d'incident, mais c'est un risque que vous voulez corriger.

          Notre position

          Mettre toutes les chances de votre côté

          Personne ne peut affirmer honnêtement qu'un logiciel est sécurisé à 100 %. L'informatique évolue en permanence, une faille inconnue hier est publique demain, et la chaîne compte beaucoup de maillons : votre code, les bibliothèques qu'il embarque, le serveur qui l'héberge, les accès de vos équipes. C'est pour cette raison qu'il nous est mécaniquement impossible d'affirmer que votre application ne sera jamais compromise.

          Ce que nous savons faire, en revanche, c'est ne pas vous laisser de porte grande ouverte. Les bonnes pratiques existent, elles sont connues, et l'immense majorité des incidents vient de celles qu'on n'a pas appliquées : une mise à jour repoussée, un accès trop large, un réglage laissé par défaut. Nous les passons une par une, et nous vous disons où vous en êtes.

          Ce qui a été analysé, et comment

          Le rapport ouvre sur le périmètre : les outils passés, les versions examinées, les environnements touchés, ce qui a été lu à la main. Vous savez ce qui a été regardé, donc aussi ce qui ne l'a pas été.

          Les points à corriger, avec leur impact

          Chaque constat dit ce qu'il permet concrètement à quelqu'un de mal intentionné : lire les données d'un autre client, prendre la main sur un compte, faire tomber le service. Pas un code d'erreur, une conséquence.

          Une criticité et un effort, pour arbitrer

          Deux notes par constat : la gravité si la faille était exploitée, et l'effort de correction. Le croisement des deux donne l'ordre de traitement, et vous laisse décider de ce qui passe ce trimestre et de ce qui attend.

          Une analyse qui se renouvelle

          Un audit constate un état à une date. Le rejouer à intervalle convenu montre votre progression, mesure ce qui a été traité et rattrape ce qui est apparu depuis : c'est ce qui vous garde couvert dans la durée.

          Ce que nous regardons

          Cinq analyses qui se complètent

          Un scan extérieur ne voit pas ce qui dort dans vos dépendances. Un audit de dépendances ne voit pas ce que votre code fait d'une donnée saisie. Nous structurons notre analyse en cinq étapes en nous positionnant autant à l'intérieur qu'à l'extérieur de votre application : ce sont les cinq parties du rapport que nous vous présenterons.

          Sur une application Symfony

          Notre checklist de sécurité Symfony

          Nous nous basons sur les dix risques de l'OWASP Top 10 pour structurer notre travail en complément des bonnes pratiques officielles de Symfony. Nous les avons traduits par une liste de points de contrôles que nous déroulons sur votre code.

          01

          Contrôle d'accès défaillant

          Accéder à des données ou exécuter des actions sans en avoir le droit.

          A01:2025

          Un voter par entité sensible

          Le droit se vérifie sur la fiche demandée, pas seulement sur la route qui y mène. Masquer un bouton n'est pas un contrôle.

          access_control sans trou

          Chaque chemin couvert par une règle, refus par défaut, et les routes d'API et de webhook traitées comme les autres.

          Filtrage jusqu'à la base

          Les requêtes Doctrine filtrent sur le propriétaire de la donnée, et un test qui croise deux comptes le prouve.

          Requêtes sortantes bridées

          Une URL fournie par un utilisateur ne déclenche jamais un appel serveur tel quel. Le SSRF est entré dans cette catégorie en 2025.

          02

          Mauvaise configuration de sécurité

          Le code est irréprochable, mais l'environnement laisse une porte ouverte.

          A02:2025

          Production sans mode debug

          APP_DEBUG à zéro, profileur et barre de debug absents, page d'erreur sans trace technique.

          Cookies de session réglés

          secure, httponly et samesite déclarés, session régénérée à la connexion.

          Rien d'exposé par accident

          En-têtes de sécurité présents, .env et répertoires internes injoignables depuis le web.

          Hôtes et proxies déclarés

          trusted_hosts et trusted_proxies renseignés, origines CORS limitées à celles qui existent.

          03

          Défaillances de la chaîne d'approvisionnement logicielle

          La faille s'infiltre par une dépendance ou le processus de build.

          A03:2025

          composer audit bloquant

          Il tourne à chaque merge request, avec npm audit côté interface, et arrête la chaîne sur une vulnérabilité connue.

          Socle dans sa zone de support

          PHP, Symfony et les dépendances majeures reçoivent encore les correctifs de leur éditeur. Sinon aucun délai n'est tenable.

          Verrous versionnés

          composer.lock et package-lock.json sont commités : ce qui est installé est reproductible et inventoriable.

          Dépendances abandonnées repérées

          Un paquet sans mainteneur est signalé et remplacé, au lieu d'être gardé jusqu'au jour où une faille n'a plus de correctif.

          04

          Défaillances cryptographiques

          Exposer des données sensibles en transit ou stockées sans protection suffisante.

          A04:2025

          Mots de passe hachés en auto

          Symfony choisit l'algorithme et réencode au fil des connexions. Aucun choix d'algorithme figé à la main dans la configuration.

          HTTPS imposé partout

          Redirection systématique et HSTS. Aucun formulaire, aucune API servie en clair.

          Secrets hors du dépôt

          Coffre secrets de Symfony ou variables d'environnement de l'hébergeur, et l'historique git balayé pour ce qui y serait resté.

          05

          Injection

          Transformer une simple saisie utilisateur en instruction exécutable.

          A05:2025

          Requêtes Doctrine paramétrées

          setParameter systématique, aucune entrée concaténée dans un DQL ni dans du SQL natif.

          Analyse de teinte en intégration continue

          Le trajet d'une donnée saisie jusqu'à la requête est suivi par l'outil, pas confié à la vigilance du relecteur.

          Échappement des sorties vérifié

          Twig échappe par défaut : chaque |raw est justifié, gabarits d'e-mail et documents PDF compris.

          Commandes système sans chaîne assemblée

          Process reçoit un tableau d'arguments, jamais une ligne construite.

          06

          Conception non sécurisée

          Une fonctionnalité bancale dès sa conception, indépendamment du code.

          A06:2025

          Règles métier tenues côté serveur

          Plafonds, quotas et transitions d'état ne dépendent jamais de ce que l'écran a bien voulu envoyer.

          Limiteur sur les points sensibles

          Connexion, mot de passe oublié et API publiques passent par le rate limiter.

          Cas limites et erreurs couverts par les tests

          Les tests automatisés ne vérifient pas que le chemin normal fonctionne : ils vérifient ce que fait l'application quand la valeur est vide, négative, trop longue ou absente.

          Champs de formulaire validés côté serveur

          Type, format, longueur et valeurs admises déclarés en contraintes Symfony. Une validation faite dans le navigateur se contourne en dix secondes.

          07

          Défaillances d'authentification

          Vérifier la véritable identité d'un utilisateur et gérer ses sessions.

          A07:2025

          Connexion protégée contre l'essai en masse

          Limiteur d'essais, temporisation progressive, et échecs journalisés.

          Réinitialisation sans fuite

          Le message ne dit pas si le compte existe, le jeton est à usage unique et de durée courte.

          Session maîtrisée

          Régénération à la connexion, invalidation à la déconnexion, durée décidée plutôt que laissée par défaut.

          Second facteur sur les accès d'administration

          Les comptes qui peuvent tout faire ne tiennent pas au seul mot de passe.

          08

          Défauts d'intégrité des logiciels et des données

          Injecter du code ou des données non vérifiés au cœur de l'application.

          A08:2025

          Aucune désérialisation d'entrée non fiable

          Pas d'unserialize sur une donnée reçue, ni d'objet reconstruit depuis l'extérieur.

          Déploiement par la chaîne, pas à la main

          Ce qui part en production est l'artefact que l'intégration continue a produit et testé.

          Correctif passé en recette

          Une mise à jour de sécurité suit le même chemin que le reste : intégration, recette, production. C'est ce qui rend un délai tenable.

          09

          Défaillances de journalisation et d'alerte

          L'incident se produit sans que personne n'en soit averti.

          A09:2025

          Événements de sécurité journalisés

          Connexions, échecs, actions d'administration : un canal Monolog dédié les conserve sur une durée décidée.

          Journaux sans donnée sensible

          Ni mot de passe, ni jeton, ni donnée personnelle dans un fichier de log ou dans un message d'erreur remonté.

          Une alerte reçue par quelqu'un

          L'erreur applicative déclenche une notification qu'une personne lit. Une ligne écrite que personne n'ouvre ne détecte rien.

          10

          Mauvaise gestion des conditions exceptionnelles

          Une erreur ou un cas limite ouvre une brèche au lieu de bloquer.

          A10:2025

          Aucune exception avalée

          Pas de catch vide : une erreur est journalisée puis transformée en réponse propre.

          Appels externes avec délai et repli

          Un service tiers lent ou absent ne bloque pas un écran : délai d'expiration, file d'attente, reprise possible.

          Message d'erreur muet

          Ce que voit l'utilisateur ne révèle ni chemin de fichier, ni requête, ni version de composant.

          Le déroulé d'un audit

          4 étapes, 2 à 10 jours

          Nos audit sont structurés en quatre phases et nous aurons besoin de travailler avec vous particulièrement lors du cadrage et de la restitution. Le coeur de l'audit sera réalisé en interne où nous auront besoin d'un point de contact pour d'éventuelles questionns complémentaires en fonction de nos découvertes.

          1
          Étape 1

          Cadrage

          Nous devons comprendre le contexte de l'application : ce qu'elle fait, qui l'utilise, comment elle a été construite et ce qui motive l'audit aujourd'hui.

          • Ce qui déclenche la demande
          • Accès au dépôt et aux environnements
          • Documentation projet
          • Vos objectifs à moyen terme
          • Périmètre validé ensemble
          2
          Étape 2

          Collecte

          Nous réalisons les scans en premier, cela nous donne directement un état des lieux exploitable et peut nous amener à vous faire un premier retour en fonction de la criticité des failles remontées.

          • Scans DAST et CVE
          • Analyse statique et teinte
          • Taux de couverture des tests
          • Résultats rejouables à l'identique
          3
          Étape 3

          Analyse

          Un ou plusieurs développeurs expérimentés prennent le temps de comprendre et d'analyser votre code, sur ce que les outils ne savent pas juger : la faille est-elle réelle et atteignable, le contrôle d'accès tient-il sur la donnée, la checklist Symfony passe-t-elle. C'est l'étape qui fait la différence entre un scan et un audit.

          • Tri par exposition réelle
          • Checklist Symfony passée
          • Faux positifs écartés, avec le motif
          4
          Étape 4

          Restitution

          Le rapport en cinq parties, chaque constat classé par criticité avec ce qu'il permet à un attaquant, le correctif et l'effort estimé. Il vous sera présenté à l'oral, pour répondre en direct à vos questions et valider un plan d'action adapté.

          • Rapport daté et transmissible
          • Plan de traitement priorité par priorité
          • Restitution orale

          La fourchette n'est pas un tarif : le cadre exact se définit avec vous. La criticité de l'application, sa taille, le nombre d'interconnexions avec d'autres systèmes et son ancienneté font varier le périmètre comme la durée. Un outil interne de trente écrans sans API ne s'analyse pas de la même manière qu'une plateforme saas complexe ouverte à vos clients.

          Un questionnaire à remplir, un audit qui arrive ?

          Dites-nous ce qu'on vous demande

          Nicolas regarde votre situation et vous dit ce qu'un état des lieux remonterait, ce qui se ferme vite et ce qui demande un chantier. Premier échange gratuit, sans engagement.

          Appel de 30 min → État des lieux → Constats triés et délais

          Après le rapport

          Trier, traiter, prouver

          Un rapport ne sécurise rien tout seul. Le travail réel commence après, celui qui sépare une liste de constats d'une application dont l'état en production s'est amélioré.

          01

          Trier : par exposition, pas par score

          Un scanner remonte parfois des dizaines de lignes, et les traiter dans l'ordre du score de gravité est la meilleure façon de perdre du temps. La méthode qui fonde un ordre de traitement croise la gravité, l'exploitation réellement observée et l'atteignabilité du code concerné dans votre projet.

          Atteignable ou non

          La fonction vulnérable est-elle appelée par votre application, et depuis l'extérieur ?

          Exploitée ou théorique

          Une faille utilisée dans la nature ne se traite pas comme une faille jamais vue.

          Corrigeable ou compensable

          Quand aucun correctif n'est publié, on ferme l'accès, on restreint, et on communique.

          02

          Traiter : sans casser la production

          Un correctif de sécurité modifie un comportement, parfois. Il passe donc par la chaîne habituelle, intégration puis recette puis production, avec les tests du projet. Les constats de configuration, souvent les plus rentables, se ferment en quelques heures : un header absent, un profileur resté actif, un compte de test oublié.

          La configuration

          En-tête absent, profileur resté actif, compte de test oublié : fermé en quelques heures.

          Les dépendances

          Montée de version, recette, mise en production, comme une évolution ordinaire.

          Les chantiers de fond

          Un contrôle d'accès à reprendre se planifie en lot, estimé et livré séparément.

          03

          Prouver : les pièces que vous fournissez

          Le rapport de scan repassé au vert, l'état avant et après, l'inventaire des composants et les délais d'intervention écrits dans le contrat. Ce sont les quatre pièces qu'un questionnaire fournisseur réclame, et elles se produisent en même temps que le travail plutôt qu'après coup.

          Le rapport avant et après

          Produit par l'outil, daté, lisible par quelqu'un qui ne lit pas de code.

          L'inventaire des composants

          Ce que votre application embarque réellement, versions comprises.

          Les délais écrits

          La grille de votre donneur d'ordre si vous en avez une, la nôtre sinon.

          Trois façons de s'en servir

          Nous le faisons, ou vous le faites

          Toutes les équipes n'ont pas le même besoin. Certaines veulent un regard extérieur une fois, d'autres savent corriger mais veulent quelqu'un derrière, d'autres encore préfèrent ne plus y penser.

          Sur la sécurité, le troisième format prend une forme particulière : des audits planifiés à intervalle convenu, et un contrat de maintenance qui engage le traitement des constats sous délai. C'est ce que réclame un donneur d'ordre : la preuve d'un processus, pas un rapport daté d'il y a huit mois.

          Audit seul : le one-shot

          Vous attendez de nous une prestation unique. Vous repartez avec un plan d'action chiffré en effort, que vous exécutez avec votre équipe ou votre prestataire, sans nous. C'est le format d'une due diligence ou d'un arbitrage entre refonte et évolution.

          Audit et contre-audit pour vérifier

          Votre équipe corrige, nous repassons. Le second passage rejoue les mêmes outils sur le même périmètre et mesure ce qui a été traité, ce qui reste, et ce qui est apparu entre-temps. Vous obtenez un état daté, à remettre à un donneur d'ordre, un repreneur ou un investisseur qui l'exige.

          Audit et accompagnement

          Le rapport dit quoi faire, mais avez-vous les ressources et le temps disponible pour l'appliquer ?Selon ce que votre équipe peut absorber : prise en charge de certaines parties du plan, celles qu'elle n'a pas le temps ou l'expérience de traiter ; co-développement, en binôme et en revue de code, pour qu'elle sache refaire seule ; ou pilotage du plan d'action, que nous ordonnons et arbitrons pendant qu'elle le réalise. Nous saurons construire le format qui vous conviendra.

          Pour comprendre

          Les notions derrière un constat de sécurité

          Un rapport de scan ne se lit pas sans vocabulaire : ce qu'est une CVE, ce que vaut un score, ce que le DAST couvre et ce qu'il ne verra jamais. Ces pages sont publié sur notre site pour servir d'outil pédagogiques.

          Notre position

          Ce que nous ne faisons pas

          Nous sommes des spécialistes du code de vos logiciels.

          Le thème de la sécurité est vaste et nous souhaitons être transparent sur notre zone de maîtrise et d'intervention pour vous permettre de faire des choix éclairés.

          1

          Le test d'intrusion certifié

          Nous ne sommes pas un cabinet PASSI et nous ne délivrons aucune certification. Quand votre client ou votre assureur exige un test d'intrusion qualifié, vous passerez par un cabinet spécialisé. Notre audit vient utilement avant : un pentest se paie cher, et il serait dommage d'y découvrir des en-têtes mal réglés ou une dépendance périmée, que n'importe quel scan relève. Arriver avec ce niveau déjà traité, c'est s'assurer que son rapport porte sur ce que seul un humain sait trouver.

          2

          La conformité clé en main

          Une obligation réglementaire s'applique à votre entreprise et à son organisation, pas seulement à votre logiciel. Nous ne sommes ni organisme de certification, ni juristes : nous ne délivrons aucune attestation et nous ne vous dirons pas ce que le droit exige de vous. Nous couvrons la part qui se code et qui s'exploite, et nous l'écrivons assez précisément pour que votre conseil puisse s'appuyer dessus.

          Nos engagements

          Ce que vous pouvez exiger de nous

          Propriété totale du code source

          Vous êtes pleinement propriétaire du code que nous développons pour vous et pouvez maîtrisez son évolution.

          Développement 100 % en France

          Équipe est basée en France, communication simplifié sans décalage horaire pour une bonne compréhension.

          Hébergement cloud souverain

          Déploiement sur une infrastructure française avec support réactif. Vos données restent en France.

          « Tout au long de notre collaboration, Nicolas a toujours su être un professionnel exemplaire. En tant que project manager, il sait prendre tous les sujets à bras-le-corps et les prioriser avec intelligence.

          Il sait aussi donner la visibilité suffisante et rassurante sur les avancées de ses équipes. Nicolas se révèle être un interlocuteur crédible et efficace autant sur le plan technique que sur le plan de la gestion projet. »

          Benoît Mariaux
          Benoît Mariaux
          Responsable du développement chez Saint-Gobain

          « Les préconisations de Nicolas sur la mise en oeuvre d'une stack de développement Gitlab et sa parfaite connaissance du Framework Symfony m'ont fait gagner un temps précieux.

          Toujours pro et dynamique, c'est un plaisir de travailler avec Nicolas. »

          Vincent Depeyre
          Vincent Depeyre
          Directeur de projet | Gérant | Web | Data | Innovations

          Pour aller plus loin

          Approfondir votre réflexion

          FAQ

          Les réponses à vos questions

          Et si vous ne trouvez pas ce que vous cherchez, nous serons ravis de vous répondre en direct lors d'un rendez-vous entre humains !

          Par l'état des lieux : les scans extérieurs et l'audit des dépendances se lancent sans rien modifier chez vous, et ils remontent en quelques heures ce qui est visible depuis internet et ce que vos dépendances traînent. L'analyse statique suppose un accès au code. À la sortie, vous avez une liste de constats triés, et vous décidez de ce que vous traitez.

          Non, et aucune fenêtre de maintenance n'est nécessaire. Le scan parcourt l'application comme le ferait un visiteur : il ouvre les pages, relit les réponses et les en-têtes, sans modifier ni supprimer quoi que ce soit dans vos données. Il tourne donc sur la production sans effet de bord, et vos utilisateurs ne voient rien passer.

          Non, et c'est une séparation nette. Nous couvrons le code applicatif, ses dépendances et sa configuration. La couche d'hébergement, système et services managés, relève de votre hébergeur. Promettre un périmètre que nous ne maîtrisons pas serait le meilleur moyen de décevoir au pire moment.

          Les trois premiers angles ne dépendent pas du framework : le scan extérieur regarde une application web, l'audit des dépendances lit un fichier de verrouillage, l'analyse statique lit du PHP. Sur un socle ancien ou fait maison, l'analyse statique remonte davantage de bruit et demande un réglage préalable, ce qui se dit avant de commencer.

          Elles sont dans le périmètre, et c'est aujourd'hui le terrain le plus agité : les compromissions de paquets populaires y sont plus fréquentes et se propagent plus vite que côté PHP. L'inventaire est confronté aux mêmes bases publiques, et la règle est la même : une dépendance de développement ne se traite pas comme une dépendance livrée aux utilisateurs.

          Vous êtes prévenu avant la fin de l'état des lieux, sans attendre le rapport, avec ce qu'elle permet concrètement et ce qui la ferme le plus vite. Quand la fermeture immédiate est possible sans effet de bord, nous proposons de la traiter tout de suite. Une faille critique qui attend la réunion de restitution est une faille critique que personne ne prend au sérieux.

          Les deux existent, et ils ne se vendent pas pareil. Un état des lieux est un travail ponctuel avec un livrable daté. Le suivi dans la durée, veille sur les vulnérabilités publiées, qualification et correction sous délai, fait partie du contrat de maintenance : c'est lui qui rend un engagement de délai tenable, parce qu'il suppose de pouvoir mettre à jour et déployer.

          Nous travaillons avec et pour nos clients

          Ces 10 dernières années, nous avons développé des dizaines de logiciels sur mesure pour nos clients.

          SmartBooster est une entreprise qui place la relation client au cœur de son activité. Nous travaillons en étroite collaboration avec nos clients pour comprendre et répondre à leurs besoins.

          Notre expertise ne se limite pas au développement technique. Nous accompagnons nos clients dans la réflexion et la mise en place de solutions sur mesure qui s'adaptent parfaitement à leurs processus métiers.

          En choisissant SmartBooster, vous bénéficiez d'un partenaire qui s'engage à vos côtés pour concevoir et développer les fonctionnalités dont vous avez besoin.

          Point de travail

          Équipe française

          Vous pourrez communiquer avec nous en français et sans décalage horaire, c'est l'idéal pour être sûr de se comprendre !

          Socle technique moderne

          Nous travaillons avec des outils professionnels implémentant les meilleurs standards de qualité et de sécurité.

          Personnalisation

          Le sur mesure vous offre toutes les possibilités de personnalisation qu'il vous faut pour adapter votre logiciel à votre vocabulaire et à vos usages.

          Vous avez un projet ?

          Contactez-nous pour savoir comment nous pouvons vous aider.