Être développeur ne se limite pas à écrire du code. Cette affirmation dérange, parce qu’elle remet en question une idée confortable que beaucoup entretiennent sans s’en rendre compte : celle que la qualité d’un projet logiciel se mesure uniquement à la propreté de son code source. Elle ne se mesure pas ainsi.

Steve McConnell le rappelle dans Code Complete : la construction du code ne représente qu’une fraction du coût réel d’un projet logiciel. Fred Brooks, dans The Mythical Man-Month, souligne quant à lui que les défis majeurs du développement se situent rarement dans la simple production de lignes de code. Dans la plupart des projets professionnels, la phase de codage représente entre 20 % et 30 % du cycle de vie global d’une application. Le reste concerne les activités qui permettent au logiciel de survivre dans le monde réel : architecture, validation, automatisation, supervision, sécurité, évolutions et maintenance.

Ce déséquilibre a des conséquences réelles et mesurables. Un code parfaitement testé, élégamment architecturé, peut être compromis en quelques secondes s’il est déployé sur un serveur mal configuré. Pas quelques heures. Pas quelques jours. Des secondes. Les outils automatisés parcourent l’intégralité de l’espace d’adressage internet en permanence, à la recherche précisément des erreurs décrites dans cet article. L’attaquant n’a pas besoin de vous cibler personnellement. Il lui suffit d’attendre que votre configuration défaillante se présente dans ses résultats.

Une application peut respecter les principes SOLID. Elle peut appliquer une architecture hexagonale exemplaire. Elle peut être couverte par des milliers de tests automatisés. Elle peut même avoir passé avec succès tous les audits qualité internes. Si son déploiement est mal conçu, elle demeure vulnérable. L’histoire récente de la cybersécurité regorge d’incidents causés non pas par des algorithmes défaillants, mais par des erreurs opérationnelles élémentaires.

Cet article n’est pas une liste de recommandations génériques. C’est un diagnostic de fautes professionnelles concrètes, évitables, et pourtant courantes. Chacun des dix points qui suivent décrit une vulnérabilité réelle, explique pourquoi elle est dangereuse dans les termes exacts du risque qu’elle représente, et détaille la posture à adopter.

 

 

1. Des Identifiants Distincts pour Chaque Environnement

Une commodité qui ouvre une passerelle

L’une des erreurs les plus fréquentes consiste à réutiliser les mêmes identifiants de connexion entre les environnements de développement, de test, de préproduction et de production. Cette pratique apparaît souvent pour des raisons de simplicité : une équipe crée un utilisateur de base de données, constate que tout fonctionne correctement, puis décide de reproduire exactement la même configuration partout.

Les environnements de test et de développement bénéficient rarement du même niveau de protection que la production. Les accès y sont plus nombreux, les contrôles moins stricts, les données parfois moins surveillées. Lorsqu’un attaquant parvient à compromettre un environnement secondaire, la réutilisation des identifiants lui offre immédiatement une passerelle vers les systèmes critiques.

Le problème devient encore plus grave lorsque l’application utilise directement un compte administrateur de base de données. Cette pratique constitue une violation flagrante des recommandations de l’OWASP et du NIST. Elle transforme la moindre vulnérabilité applicative en compromission totale du système de données. Imaginons une simple injection SQL exploitée sur une application utilisant un compte administrateur : l’attaquant n’obtient pas seulement l’accès aux données. Il acquiert la capacité de modifier la structure de la base, de créer de nouveaux utilisateurs, d’altérer les permissions existantes ou de supprimer définitivement des informations critiques.

Le cloisonnement strict des environnements

La règle est simple et absolue : chaque environnement dispose de ses propres identifiants, de son propre utilisateur dédié, connecté à sa propre base de données. Aucun credential ne traverse les frontières applicatives. L’objectif est d’assurer une isolation totale des accès. Une compromission locale doit rester locale. Si l’attaquant franchit une ligne de défense, il ne doit pas automatiquement obtenir les clés des serveurs voisins. La question n’est pas de savoir si une intrusion arrivera, mais quand.

 

2. Le Principe de Moindre Privilège

Un confort initial, une vulnérabilité considérable

Le principe de moindre privilège est l’une des règles les plus anciennes et les plus importantes de la sécurité informatique. Pourtant, il est également l’un des principes les plus fréquemment ignorés dans les projets logiciels.

Le problème apparaît généralement au début du développement. Afin d’éviter les erreurs de permission, les équipes accordent tous les droits possibles au compte utilisé par l’application. Les développeurs peuvent alors travailler sans contrainte, et l’ensemble des fonctionnalités semble fonctionner correctement. Ce confort initial crée une vulnérabilité considérable. Une application n’a généralement pas besoin de supprimer des tables, de créer des utilisateurs ou d’administrer le serveur de base de données. Pourtant, de nombreuses applications possèdent ces privilèges.

Cette situation devient dramatique lorsqu’une faille est découverte. Si le compte compromis ne possède que des droits de lecture limités, l’impact restera relativement contenu. Si ce même compte dispose de privilèges administrateur, l’attaquant peut supprimer des données, modifier des transactions financières, désactiver des mécanismes de contrôle ou installer des portes dérobées. Le danger ne réside pas uniquement dans la vulnérabilité elle-même. Il réside dans l’amplification de ses conséquences.

Restreindre au strict nécessaire

C’est précisément pour cette raison que le NIST considère le principe de moindre privilège comme un pilier fondamental de toute architecture sécurisée. Chaque composant doit disposer uniquement des autorisations nécessaires à l’accomplissement de sa mission. Rien de plus. L’utilisateur applicatif ne reçoit que ce dont l’application a strictement besoin pour fonctionner : lire, écrire, mettre à jour. Les opérations destructrices relèvent d’un utilisateur distinct, activé uniquement le temps de l’opération, puis désactivé.

La sécurité moderne repose moins sur l’idée d’empêcher toute intrusion que sur la capacité à limiter les dégâts lorsqu’un incident devient inévitable. Ce n’est pas de la paranoïa. C’est de la discipline.

 

3. L’Isolation Stricte des Ressources Tierces

Une illusion de séparation

L’isolation des environnements ne concerne pas uniquement les serveurs ou les bases de données. Elle concerne l’ensemble des ressources utilisées par le système. De nombreuses organisations pensent disposer d’environnements séparés parce qu’elles exécutent leurs applications sur plusieurs machines distinctes. Pourtant, elles continuent à partager les mêmes services de stockage, les mêmes comptes de messagerie, les mêmes plateformes de paiement ou les mêmes clés d’API. Cette pratique crée une illusion de sécurité.

Prenons l’exemple d’une entreprise qui utilise le même compte de stockage pour ses plateformes de test et de production. Si un développeur expose accidentellement des identifiants dans un dépôt, ou si un serveur de test est compromis, l’attaquant obtient immédiatement un accès aux ressources critiques. Lorsqu’une clé est partagée entre plusieurs environnements, la frontière de sécurité disparaît. Une fuite sur l’environnement le moins protégé devient automatiquement une fuite sur l’environnement le plus sensible.

Un développeur qui déclenche un envoi depuis son environnement de test avec le compte de production envoie de vrais messages à de vrais destinataires. Une opération de nettoyage sur un espace partagé peut effacer des fichiers de production sans aucune possibilité de récupération. Ces scénarios ne sont pas théoriques. Ils se produisent, et ils se produisent précisément parce que personne n’a pris le temps de séparer les ressources.

Une règle simple pour évaluer la qualité d’une architecture

Chaque ressource externe dispose de ses propres identifiants, isolés par environnement, sans exception. Cette stratégie peut sembler plus coûteuse à court terme. En réalité, elle constitue l’un des investissements les plus rentables qu’une organisation puisse réaliser. Le coût d’une isolation correcte est presque toujours inférieur au coût d’un incident de sécurité majeur. Une règle simple permet d’évaluer la qualité d’une architecture : si la compromission complète de l’environnement de test permet d’accéder à la production, alors les environnements ne sont pas réellement isolés. Ils sont seulement séparés en apparence.

 

4. Le Mode Production, Sans Compromis

Un rapport de vulnérabilité offert gratuitement

La plupart des frameworks modernes proposent un mode de développement destiné à faciliter le travail des développeurs. Lorsqu’une erreur survient, l’application affiche une page détaillée contenant la pile d’exécution complète, les fichiers concernés, les variables utilisées et parfois même les paramètres de configuration du système. Dans un environnement local, cette fonctionnalité est précieuse. En production, elle devient une source d’information extrêmement dangereuse.

Chaque message d’erreur détaillé constitue un renseignement offert gratuitement à un attaquant. Une simple exception non gérée peut révéler la structure interne de l’application, les chemins physiques des fichiers sur le serveur, les versions des bibliothèques utilisées, les informations relatives à la base de données, les variables d’environnement ou les clés mal protégées.

L’OWASP considère d’ailleurs l’exposition d’informations sensibles comme l’une des causes récurrentes des compromissions applicatives. Un mode débogage actif en production est un rapport de vulnérabilité que vous rédigez vous-même et que vous offrez à qui veut le lire.

Forcer la configuration de production, sans exception

La règle professionnelle est simple : toute application exposée doit fonctionner en mode production. Les messages d’erreur présentés aux utilisateurs doivent être génériques et dépourvus de détails techniques. Les informations nécessaires au diagnostic doivent être enregistrées dans des systèmes de journalisation sécurisés accessibles uniquement aux équipes autorisées.

La configuration de production désactive l’exposition des détails d’erreur, restreint les interfaces de supervision aux seules informations nécessaires aux équipes opérationnelles, et s’assure que les builds livrés sont des builds optimisés, et non des versions de développement embarquées par erreur. Cette vérification doit être automatisée dans le pipeline : un déploiement doit échouer si une configuration non conforme est détectée avant d’atteindre la production.

 

5. La Gestion Centralisée et Chiffrée des Secrets

Un secret dans le code n’est plus un secret

Chaque application moderne repose sur un ensemble de secrets : mots de passe de bases de données, clés d’API, certificats, jetons d’authentification, secrets OAuth, clés de chiffrement ou identifiants de services tiers. Pourtant, la gestion de ces informations reste l’un des domaines les plus négligés du développement logiciel.

Il est encore fréquent de découvrir des clés sensibles directement écrites dans le code source, stockées dans des fichiers de configuration versionnés, ou copiées manuellement sur les serveurs via des procédures informelles. Un secret inscrit dans le code source n’est plus un secret. C’est une information exposée à toute personne ayant accès au dépôt, présente ou passée, et potentiellement indexée par des outils automatisés qui parcourent les plateformes de gestion de code en permanence. Une clé d’API commise dans un dépôt peut être compromise en moins d’une minute. Les dépôts privés ne sont pas immunisés : une fuite d’accès, un ancien collaborateur, un token partagé par erreur suffisent.

Lorsqu’un secret est intégré au code source, sa diffusion devient extrêmement difficile à contrôler. Chaque clone du dépôt représente une nouvelle copie. Chaque sauvegarde, chaque export ou chaque poste de développement augmente la surface d’exposition. Le problème est encore plus grave lorsqu’une clé compromise ne peut pas être remplacée rapidement. Dans certaines organisations, la rotation d’un secret nécessite plusieurs jours d’intervention manuelle. Pendant ce temps, l’attaquant conserve son accès.

La centralisation comme seule réponse sérieuse

Les secrets ne doivent pas être stockés dans le code. Ils ne doivent pas être stockés dans les images de conteneurs. Ils ne doivent pas être distribués manuellement. Ils doivent être gérés par des plateformes spécialisées de gestion de secrets, conçues pour stocker, chiffrer, contrôler l’accès et auditer l’utilisation de chaque credential. L’application demande dynamiquement le secret dont elle a besoin au moment de son exécution. Le secret est fourni de manière sécurisée, utilisé, puis renouvelé automatiquement selon une politique définie.

La capacité d’auditer qui a accédé à quel secret et à quel moment n’est pas un luxe : c’est une exigence de sécurité de base. La question n’est pas de savoir si un secret sera exposé un jour. La question est de savoir à quelle vitesse il pourra être révoqué et remplacé lorsque cela arrivera. Les organisations matures construisent leurs systèmes en partant du principe que cette situation finira par se produire.

 

6. Le Chiffrement de Bout en Bout, Sans Exception

La fin du modèle périmétrique

Pendant longtemps, la sécurité réseau reposait sur une hypothèse simple : le réseau interne était considéré comme fiable tandis qu’Internet était considéré comme hostile. Cette hypothèse n’est plus valable. Les architectures modernes sont distribuées. Les applications communiquent avec des microservices, des plateformes cloud, des fournisseurs externes et des systèmes tiers répartis dans plusieurs régions du monde.

Un attaquant qui pénètre le réseau interne par latéralisation depuis un service compromis, par une erreur de configuration, ou par un accès physique, voit l’intégralité du trafic non chiffré en clair. C’est précisément le scénario des grandes violations de données qui font régulièrement la une. L’intrusion initiale n’est souvent qu’un point d’entrée. Ce qui permet à l’attaquant de progresser et d’extraire des données massives, c’est l’absence de chiffrement interne. Le périmètre est protégé, mais tout ce qui est à l’intérieur est lisible sans effort.

Zero Trust : aucun échange n’est fiable par défaut

Le modèle Zero Trust repose sur une idée simple : aucune communication ne doit être considérée comme fiable par défaut. Chaque échange doit être authentifié, autorisé et chiffré. Le protocole TLS est aujourd’hui un prérequis fondamental de toute architecture sérieuse. Les communications entre navigateurs, API, services internes et plateformes externes doivent être protégées systématiquement.

Les sessions utilisateurs méritent également une attention particulière. Les cookies de session représentent souvent l’équivalent d’une identité numérique temporaire. Si un attaquant parvient à les voler, il peut parfois accéder directement au compte de la victime sans connaître son mot de passe. Trois attributs sont obligatoires : l’interdiction d’accès au cookie depuis le code JavaScript, la transmission exclusive sur des connexions chiffrées, et la protection contre les attaques de type Cross-Site Request Forgery. Ces mécanismes sont simples à mettre en oeuvre. Pourtant, leur absence continue de provoquer des incidents majeurs.

L’architecte prudent ne cherche pas à savoir si quelqu’un écoute le réseau. Il agit comme si quelqu’un l’écoutait déjà.

 

7. Des Journaux Sans Fuite de Données Sensibles

Vos logs sont peut-être votre pire vulnérabilité

La journalisation est l’un des outils les plus puissants dont disposent les équipes techniques. Lorsqu’un incident survient en production, les journaux constituent souvent la seule source d’information permettant de comprendre ce qui s’est réellement passé. Sans eux, diagnostiquer une panne complexe ou reconstituer une attaque devient presque impossible.

Malheureusement, de nombreuses équipes tombent dans un excès inverse. Dans leur volonté de tout enregistrer, elles finissent par transformer leurs systèmes de logs en bases de données de données sensibles non chiffrées. Il n’est pas rare de découvrir dans des journaux de production des mots de passe transmis lors d’une authentification, des numéros de téléphone, des informations bancaires, des jetons JWT complets ou encore des numéros de pièces d’identité. Dans certains cas, les journaux contiennent davantage d’informations sensibles que la base de données elle-même.

Cette situation est particulièrement dangereuse parce que les journaux sont souvent copiés, sauvegardés, exportés et consultés par un nombre important de personnes. Une donnée sensible présente dans un système de logs se propage généralement beaucoup plus vite qu’une donnée stockée dans une table métier classique. Les conséquences dépassent largement le cadre technique : une fuite de journaux peut entraîner des sanctions réglementaires, des poursuites judiciaires et une perte durable de confiance des utilisateurs.

Une politique de journalisation explicite et contraignante

Les recommandations de l’OWASP sont très claires sur ce sujet. Les données sensibles doivent être filtrées, masquées ou supprimées avant leur enregistrement. Un mot de passe ne doit jamais apparaître dans un journal. Un numéro de carte bancaire ne doit jamais être enregistré intégralement. Un jeton d’accès ne doit jamais être stocké en clair.

La politique de journalisation doit être explicite et contraignante : ce qui peut être enregistré est défini, et ce qui ne le sera jamais l’est tout autant. Le niveau de verbosité en production est strictement limité aux anomalies et aux erreurs. Un journal de production n’est pas un outil de débogage. C’est un outil de supervision opérationnelle. Si la publication accidentelle d’un fichier de logs provoquerait une crise de sécurité, alors votre stratégie de journalisation doit être revue.

 

8. La Sécurité de la Chaîne Logistique Logicielle

Chaque dépendance est une surface d’attaque que vous n’avez pas écrite

L’industrie du logiciel moderne repose massivement sur la réutilisation. Très peu d’applications sont écrites entièrement à partir de zéro. Chaque projet s’appuie sur des dizaines, parfois des centaines de bibliothèques tierces. Cette réalité constitue à la fois une force et une faiblesse. Lorsqu’un développeur ajoute une bibliothèque à son application, il n’intègre pas seulement une fonctionnalité. Il intègre aussi l’ensemble des défauts de sécurité présents dans cette bibliothèque, ainsi que ceux de ses dépendances transitives.

L’incident Log4Shell constitue probablement l’exemple le plus célèbre de ces dernières années. Une vulnérabilité présente dans une bibliothèque de journalisation extrêmement répandue a exposé des millions de systèmes à travers le monde. De nombreuses organisations ignoraient même qu’elles utilisaient indirectement cette dépendance. Le délai entre la publication de la vulnérabilité et son exploitation massive s’est compté en heures. On ne peut pas sécuriser ce que l’on ne connaît pas.

Le Software Composition Analysis comme étape bloquante

C’est précisément pour répondre à ce défi que sont apparues les pratiques de Software Composition Analysis (SCA) et les Software Bill of Materials (SBOM). L’analyse de composition logicielle consiste à inventorier automatiquement les dépendances utilisées par une application et à les comparer aux bases de vulnérabilités connues. Le SBOM fournit une liste exhaustive des composants logiciels présents dans une application, aujourd’hui encouragée par plusieurs organismes gouvernementaux et progressivement exigée dans certains secteurs réglementés.

L’analyse des dépendances doit être intégrée au pipeline de déploiement comme étape bloquante, au même titre que les tests. Chaque déploiement vérifie l’ensemble des bibliothèques embarquées contre les bases de vulnérabilités connues. Si une dépendance présente une vulnérabilité à risque élevé ou critique, le déploiement est arrêté. Cette discipline s’applique à toutes les technologies, sans exception de calendrier ni de priorité commerciale.

L’une des erreurs les plus dangereuses consiste à considérer qu’une application sécurisée aujourd’hui restera sécurisée demain. Dans le monde moderne, la chaîne logistique logicielle est devenue une surface d’attaque à part entière. L’ignorer revient à laisser une porte ouverte dont personne ne surveille l’accès.

 

9. La Maîtrise des Ressources Exposées

Une invitation ouverte aux attaques automatisées

Lorsqu’un développeur construit une API ou un formulaire de connexion, son premier objectif est généralement de permettre aux utilisateurs légitimes d’accéder rapidement au service. Cette préoccupation est parfaitement normale. Ce qui l’est moins, c’est d’oublier que les utilisateurs légitimes ne sont pas les seuls à interagir avec l’application. Internet est un environnement hostile. Chaque service exposé publiquement sera tôt ou tard analysé, testé ou attaqué de manière automatisée.

Les formulaires d’authentification constituent des cibles particulièrement attractives. Sans mécanisme de limitation, un attaquant peut effectuer des milliers, voire des millions de tentatives de connexion en utilisant des dictionnaires de mots de passe ou des identifiants récupérés lors de précédentes fuites de données. Cette technique, connue sous le nom de credential stuffing, reste l’une des méthodes d’attaque les plus répandues au monde. Le problème ne se limite pas à l’authentification : toute API exposée sans limitation peut être utilisée pour générer une charge considérable sur les serveurs et provoquer des attaques par déni de service.

La disponibilité d’un service est aussi une propriété de sécurité. Un service rendu inaccessible par un abus de sollicitation subit un incident de sécurité, qu’une vulnérabilité technique soit exploitée ou non.

Une défense par couches, à plusieurs niveaux

La réponse passe par la limitation du débit de sollicitation à plusieurs niveaux : au niveau de l’infrastructure réseau, au niveau du serveur mandataire inversé, et au niveau applicatif. Ces trois niveaux se complètent et ne se substituent pas l’un à l’autre. La limitation s’accompagne d’un mécanisme de blocage progressif : au-delà d’un seuil d’échecs répétés, l’accès est temporairement restreint, une vérification supplémentaire est exigée, et l’incident est journalisé pour analyse.

La sécurité ne consiste pas uniquement à construire des murs. Elle consiste également à ralentir l’adversaire suffisamment longtemps pour pouvoir réagir. Les applications qui ne limitent pas leur trafic supposent implicitement que tous les utilisateurs se comporteront correctement. L’expérience montre malheureusement que cette hypothèse est fausse.

 

10. Des Déploiements Traçables, Reproductibles et Immuables

Les modifications en direct : l’art de créer des serveurs fantômes

S’il existe une pratique qui distingue immédiatement une organisation mature d’une organisation amateur, c’est sa manière de gérer les déploiements en production. Dans de nombreuses entreprises, il est encore courant de voir un développeur se connecter directement en SSH sur un serveur de production pour corriger un problème. Un fichier est modifié manuellement. Une configuration est ajustée à la volée. Un correctif entier est appliqué sans aucun processus formel de validation.

Cette pratique introduit progressivement un chaos opérationnel. Le premier problème concerne la traçabilité : lorsqu’une modification est effectuée directement sur un serveur, il devient extrêmement difficile de savoir précisément qui a changé quoi, à quel moment et pour quelle raison. Le second problème concerne la reproductibilité : progressivement, les environnements divergent. Le système fonctionne selon une logique dangereuse résumée par une phrase tristement célèbre dans notre industrie : « ça marche en production, mais personne ne sait pourquoi. » Cette situation est connue sous le nom de configuration drift, et elle constitue l’une des principales causes d’instabilité dans les systèmes informatiques modernes.

L’Infrastructure as Code et l’artefact immuable

Le principe des déploiements immuables est simple : ce qui a été validé en phase de test doit être exactement ce qui sera exécuté en production. Aucune modification manuelle ne doit intervenir entre ces deux étapes. L’application est construite sous forme d’un artefact unique et versionné. Une fois généré, cet artefact devient la seule unité autorisée pour le déploiement. Si une modification est nécessaire, le processus complet doit être rejoué. Le serveur n’est jamais modifié directement.

Cette philosophie est étroitement liée à l’Infrastructure as Code (IaC), qui consiste à décrire l’infrastructure sous forme de code versionné plutôt que par des manipulations manuelles. Dans une architecture mature, un serveur n’est plus considéré comme un actif unique et précieux qu’il faut réparer. Il devient une ressource remplaçable. Lorsqu’un problème survient, on détruit l’instance défaillante et on en déploie une nouvelle à partir d’une configuration connue et validée. Chaque déploiement est traçable jusqu’au commit qui l’a déclenché. Chaque retour en arrière est une opération d’une seule commande.

Les meilleures équipes d’ingénierie du monde ne modifient pas leurs serveurs de production. Elles reconstruisent leurs systèmes de manière contrôlée et reproductible.

 

La Sécurité est une Discipline, pas une Fonctionnalité

L’une des plus grandes erreurs de notre industrie consiste à considérer la sécurité comme une étape supplémentaire que l’on ajoute à la fin d’un projet. Cette vision est profondément erronée.

La sécurité n’est pas une fonctionnalité. Ce n’est pas un module. Ce n’est pas un produit que l’on installe après le développement. La sécurité est une discipline d’ingénierie.

Elle influence les décisions architecturales dès les premières phases de conception. Elle détermine la manière dont les données sont stockées, dont les accès sont accordés, dont les secrets sont gérés, dont les communications sont protégées et dont les déploiements sont réalisés.

Les dix erreurs présentées dans cet article ont un point commun fondamental : elles ne résultent généralement pas d’un manque de compétences techniques. Elles résultent d’un manque de rigueur. Utiliser les mêmes identifiants partout est plus simple. Accorder tous les privilèges est plus rapide. Partager les mêmes ressources réduit les coûts. Laisser le mode débogage actif facilite le diagnostic. Stocker des secrets dans le code paraît pratique. Modifier directement un serveur semble efficace. Toutes ces décisions procurent un gain immédiat. Toutes créent une dette de sécurité qui devra être remboursée un jour.

Et contrairement à une dette financière, une dette de sécurité peut être réclamée sans préavis.

Les organisations les plus performantes ne sont pas celles qui n’ont jamais subi d’incident. Ce sont celles qui ont construit leurs systèmes en partant du principe qu’un incident finira par arriver. Cette différence de mentalité change tout. Elle conduit à des architectures compartimentées, à des déploiements reproductibles, à des mécanismes de surveillance efficaces, et à des systèmes capables d’encaisser les erreurs humaines sans provoquer une catastrophe.

L’ingénierie logicielle mature ne consiste pas à construire des applications qui fonctionnent uniquement lorsque tout se passe bien. Elle consiste à construire des systèmes qui continuent à fonctionner lorsque les choses se passent mal. C’est précisément là que commence le véritable métier d’architecte logiciel.

 

 

Besoin d’une architecture logicielle conçue pour résister aux erreurs humaines et aux menaces modernes ? Je conçois et accompagne la réalisation d’applications métier, de plateformes SaaS, de systèmes financiers, d’ERP, de solutions e-commerce et d’applications critiques nécessitant un haut niveau d’exigence en matière d’architecture, de sécurité et de maintenabilité.

Mon approche repose sur les principes du Software Craftsmanship, de l’architecture logicielle moderne, du Domain Driven Design, de l’automatisation des déploiements et des standards de cybersécurité reconnus par l’industrie. L’objectif n’est pas simplement de livrer une application fonctionnelle. L’objectif est de construire un système robuste, évolutif et capable de soutenir durablement la croissance de votre activité.

 

Architecte Logiciel Senior  |  Aroolia Engineering  |  +237 673 602 499

Partager cet article

À propos de l’auteur: Camel DJOULAKO

Camel Djoulako est Architecte Logiciel Senior et fondateur d'Aroolia. Il accompagne les entreprises dans la conception d'applications web, mobiles et de systèmes métiers robustes, sécurisés et évolutifs. Spécialisé en architecture logicielle, cybersécurité, Clean Architecture et Domain Driven Design, il partage à travers ce blog des analyses, des retours d'expérience et des bonnes pratiques destinés aux développeurs, architectes logiciels et décideurs technologiques.

Recent Post

    Les variables et les constantes

    Les variables sont un élément fondamental de tout langage de programmation. PHP permet de manipuler des informations qui peuvent être de natures très diverses. Les informations sont également appelées des données. Elles peuvent être des nombres, des chaînes de caractères, des tableaux, des résultats mathématiques, etc. Les variables sont considérées comme des boîtes pratiques dans lesquelles nous rangeons ces données que nous pourrons ensuite utiliser ou modifier quand nous le voulons. Les variables en PHP sont écrites avec le symbole dollar $ qui permet d’identifier une variable, suivi du nom de la variable. Elles sont donc sous la forme : $nomDeLaVariable. Elles peuvent contenir des informations très variées. Par exemple, nous pouvons enregistrer dans une variable le jour de la semaine (prenons lundi). Cette variable que nous pourrions appeler $jour sera utilisable en permanence tout au long de notre script et sa valeur pourra être modifiée lorsque le jour de la semaine changera. Cette variable pourra donc contenir « lundi » ou « mardi » ou n’importe quel jour de notre choix. Nous disons que « lundi » ou « mardi » est la valeur contenue dans la variable.

    Déclarer une variable

    Une variable se déclare simplement avec le signe égal = que nous appelons l’opérateur d’assignation et qui assigne (ou affecte ou attribue) une valeur à la variable.

    Signe =

    Faites très attention, le signe égal = sert à associer une valeur. Pour tester une égalité, vous devrez utiliser un double égal ==.

    Le fait de déclarer une variable revient à :

    • créer cette variable ;
    • lui assigner une valeur.

    La syntaxe permettant la déclaration d’une variable est la suivante :

    $nomDeLaVariable = x

    Déclaration de la variable

    Cette déclaration ne doit pas être lue de la gauche vers la droite mais de la droite vers la gauche. Nous ne devons pas dire ou penser « $nomDeLaVariable égal valeur » mais nous assignons la valeur x à la variable « nomDeLaVariable ».

    Étudions cette syntaxe. Sur la même ligne, nous avons :

    • le nom que nous donnons à la variable ;
    • le signe égal qui est l’opérateur d’assignation (ou d’affectation) ;
    • la valeur que nous assignons à la variable.

    Nous utilisons de manière synonyme les verbes « assigner » ou « affecter ». Ils signifient que nous attribuons une valeur à une variable. Autrement dit, nous déclarons que la variable contient cette valeur.

    Si nous reprenons l’exemple de jour de la semaine et si nous souhaitons assigner à la variable la valeur « lundi » nous aurons le code suivant :

    1 $variable = ‘lundi’;

    Étudions cette instruction :

    • elle comporte le signe égal puis le nom que nous avons choisi pour cette variable que nous avons appelée $variable. Le choix du nom de la variable est libre, mais pour plus de cohérence avec la valeur qu’elle contient nous devrions nommer la variable « jour » ;
    • le signe égal qui permet d’assigner une valeur à la variable ;
    • la valeur que nous souhaitons attribuer à la variable. Cette valeur est ici une chaîne de caractères, il est donc nécessaire de l’entourer avec des quotes ;
    • le point-virgule est obligatoire et indique la fin de l’instruction.

    1 $jour = ‘lundi’;

    Autre exemple de création d’une variable :

    1 $saison = ‘été’;

    2 echo $saison;//affiche été

    Soulignons ici quatre points importants :

    • le signe égal n’est pas utilisé en PHP pour établir une égalité arithmétique. Le signe égal est utilisé uniquement pour assigner une valeur à une variable ;
    • assigner une valeur à une variable équivaut à créer cette variable. On dit que la variable est déclarée ;
    • choisir un nom pertinent pour la variable. Il est pertinent d’envisager un nom en rapport avec le type d’information qu’il contient. Ainsi, une variable à laquelle on attribue des prénoms aura tout intérêt à être nommée $firstnames (prénoms en anglais) et non pas $city ou $paysArray ;
    • le nom de la variable est libre. Cependant il doit respecter les règles de nommage détaillées ci-après et doit être explicite (on doit pouvoir comprendre ce qu’elle contient).

    Nommer une variable

    Les règles de nommage des variables qui suivent doivent obligatoirement être respectées :

    • un nom de variable ne contient pas d’espace ;
    • un nom de variable ne contient pas de caractères spéciaux ni accentués (e, ô, ù, *, #, etc.) ;
    • un nom de variable doit commencer par une lettre ;
    • un nom de variable doit être explicite, et de préférence en anglais (langue internationale) ;
    • un nom de variable, s’il contient plusieurs mots, doit se noter en lowerCamelCase : la première lettre du premier mot en minuscule et la première lettre des mots suivants en majuscule (exemple : $maVariableEstLongue) ;
    • le nom est sensible à la casse (majuscule/minuscule). Ainsi $abc est une variable différente de $ABC$Fruit est une variable différente de $fruit.

    Conventions de nommage

    Pour aller plus loin et en savoir plus sur les conventions de nommage, reportez-vous aux publications de l’organisation PHP-Fig https://www.php-fig.org/psr/

    Utiliser une variable

    Nous venons donc de voir comment assigner une valeur à une variable.

    L’exemple suivant nous montre :

    • la déclaration d’une variable à laquelle nous assignons un nom de saison (automne). Cette variable sera donc nommée $saison et l’affichage de ce que contient la variable avec la fonction echo ou var_dump pour le débogage ;
    • l’affectation d’une longue chaîne de caractères (plusieurs phrases) à une variable ;
    • la déclaration d’une variable contenant un nombre entier (pour stocker un nombre dans une variable, les quotes ne sont pas nécessaires) ;
    • l’affectation à une variable $saved d’une autre variable $number.
    Utiliser une variable © Fotolia

    Concaténer une variable

    Il est souvent nécessaire d’afficher un texte qui doit contenir une variable.

    Par exemple, nous pouvons afficher un texte contenant le nom d’une saison et une description de cette saison. Nous avons vu que les chaînes de caractères (en anglais : string) nécessitent des quotes pour être affichées tandis que les variables n’en ont pas besoin.

    Pour afficher en même temps une chaîne de caractères et une variable, il suffit de placer ces deux éléments l’un après l’autre en les séparant par un point.

    Le point permet de juxtaposer les deux éléments. On parle d’opérateur de concaténation. Il est recommandé de mettre un espace avant et après le point pour une meilleure lisibilité.

    Exemples :

    Concaténer une variable © Fotolia

    La concaténation est une syntaxe fondamentale de PHP et il importe de bien vérifier la succession des quotes (pour les chaînes de caractères) et des points (pour la concaténation).

    Modifier la valeur d’une variable

    Une variable se modifie aisément. Pour ce faire, il suffit de simplement lui assigner une autre valeur.

    Exemples :

    Modifier la valeur d’une variable © Fotolia

    Utilisation du signe « égal »

    Comme nous l’avons vu, le signe « égal » n’établit pas l’égalité, mais il permet d’assigner une valeur. Le résultat de l’addition $number + 1 est une valeur que nous pouvons tout à fait affecter à la variable $number.

    Définir une constante

    Les constantes sont très utiles pour manipuler une valeur qui n’est pas destinée à évoluer, ce qui permet d’optimiser votre code en prenant moins de mémoire.

    Une constante est donc une valeur définie de façon permanente, et dans certains cas, il peut être envisagé d’utiliser une constante plutôt qu’une variable, car nous venons de voir qu’une variable pouvait être aisément modifiée, ce qui n’est pas le cas d’une constante.

    Une constante aura un nom de constante et une valeur. Par convention, le nom de la constante est en lettres capitales (majuscules). Elle n’est précédée d’aucun signe.

    Pour déclarer une constante, nous utilisons la fonction PHP define :

    • nous ouvrons une parenthèse ;
    • nous écrivons le nom de la constante entre deux quotes ;
    • nous ajoutons une virgule pour séparer le nommage de la constante avec la définition de sa valeur ;
    • nous écrivons ensuite la valeur de la constante (en utilisant les quotes si cette valeur est une chaîne de caractères) ;
    • nous fermons la parenthèse ;
    • le point-virgule indique la fin de l’instruction.

    Ainsi, si nous souhaitons déclarer puis afficher une constante contenant le nom d’un pays :

    Définir une constante 1 © Fotolia

    Autre exemple

    Si nous souhaitons déclarer puis afficher une constante contenant le nom de la page d’accueil :

    Définir une constante 2 © Fotolia

    Il est à retenir que les constantes ont un rôle très spécifique et sont beaucoup moins utilisées que les variables.

    Créer une page simple

    Nous avons effectué nos premiers pas en PHP et il est temps de passer à la pratique. Nous allons donc créer un projet qui consiste à produire une page web simple permettant une mise en application des aspects étudiés jusqu’à présent dans ce cours.

    Demande (ou besoin)

    Le besoin consiste à créer une page web qui présente une saison (le printemps) en utilisant nos connaissances PHP, notamment l’affichage des chaînes de caractères et l’utilisation des variables.

    Nous souhaitons que cette page offre le contenu suivant :

    • un titre ;
    • une image ;
    • un texte court.

    Afin de réaliser cette page, nous allons récupérer le contenu provenant de la page Printemps du site Wikipédia et dont l’URL est : https://fr.wikipedia.org/wiki/Printemps.

    • le titre sera : « Le printemps » ;
    • l’image sera fournie par le fichier image que nous allons renommer : « printemps.jpg » ;
    • le texte court sera : « Le printemps est l’une des quatre saisons des zones tempérées, suivant l’hiver et précédant l’été. Le printemps se caractérise par un radoucissement du temps, la fonte des neiges, le bourgeonnement et la floraison des plantes. »

    Préparation

    Afin de traiter au mieux la demande, nous devons préparer les éléments suivants :

    • récupérer le contenu de la page (texte et image) et vérifier que nous avons l’ensemble du contenu (il est fourni ci-dessus pour être copié-collé) ;
    • préparer les outils : démarrer votre éditeur de code, démarrer votre serveur ;
    • créer un nouveau répertoire saison dans Wamp sous www ;
    • créer un nouveau fichier saison.php et l’enregistrer dans le répertoire www/saison.

    Conception

    Nous souhaitons donc produire une page web qui sera structurée en HTML.

    Le titre sera intégré avec l’élément HTML title et h1, le paragraphe avec p et l’insertion d’image avec img.

    Dans ce cours, nous ne vous présentons pas le code HTML, pensez à toujours respecter la sémantique HMTL complète pour que votre page soit correctement indexée et éviter des erreurs.

    Cette structure pourra accueillir l’information que nous allons gérer avec PHP.

    Nous notons que l’information principale est le nom de la saison et que celui-ci revient souvent dans le texte. Nous pouvons à raison penser à utiliser une variable pour afficher cette saison.

    L’utilisation d’une constante pourrait être envisagée mais il faut penser que si nous réalisons une page sur le printemps, il est fort possible que nous ayons ensuite à réaliser une page sur l’été, l’hiver ou l’automne. De manière générale, et cet exercice est une bonne occasion de le constater, l’utilisation des constantes est très spécifique et est beaucoup plus rare que l’utilisation des variables.

    Puisque nous allons gérer la saison avec une variable, et que cette saison peut changer, nous allons également gérer le paragraphe ainsi que l’image avec des variables.

    Le nommage des variables pourra être celui-ci :

    • $seasonName : le nom de la saison ;
    • $seasonDescription : le paragraphe de description de la saison ;
    • $seasonImage : le nom de l’image de la saison.

    À noter qu’en tant que développeur, nous sommes libres de gérer comme nous l’entendons cette demande. Il serait tout à fait possible par exemple de nommer différemment les variables ou de ne pas assigner le texte à une variable. Ceci est une première démonstration du fait que le développement autorise des conceptions variées.

    Mise en œuvre

    Nous commençons par déclarer nos variables :

    Intégration HTML

    Du code HTML peut être écrit dans un fichier PHP. Si le code HTML est placé en dehors des balises PHP, ce code HTML ne sera pas interprété par PHP mais son rendu sera visible dans le navigateur.

    Notons ici en outre que les balises PHP peuvent s’intégrer dans du HTML.

    La variable contenant le nom du fichier est intégrée dans l’attribut src de l’élément img. Une image devant contenir un attribut alt, nous intégrons donc la variable contenant le nom de la saison dans cet attribut.

    La variable contenant le texte est intégrée dans l’élément p.

    Code complet

    Rendu de la page (simplement stylisé)