La sécurisation des SPA est un travail d’équipe

Écosystème F5 | 05 août 2019

L’une des choses intéressantes — et plus frustrantes encore — que j’ai constatées au fil des ans est la différence entre la façon dont les ingénieurs réseau et les développeurs d’applications perçoivent les applications. Cela se manifeste dans la manière dont les applications sont représentées sur les schémas réseau et, inversement, dans la façon dont les réseaux apparaissent sur les schémas d’architecture applicative.

Point de vue des développeurs vs celui des ingénieurs réseau

Il va sans dire que chacun a une vision très simpliste de l’autre.

Cela vaut également pour la sécurité, dont le rôle dans la protection non seulement des réseaux et des applications, mais aussi de l’entreprise elle-même, est devenu primordial. Il est important que les équipes de sécurité aillent au-delà des cases figurant sur les schémas d’architecture classiques afin de véritablement comprendre les applications. Une part importante des attaques réussies est menée au niveau de la couche applicative. Plus nous tardons à reconnaître les caractéristiques propres aux différents types d’applications, plus celles-ci restent vulnérables.

La discussion d’aujourd’hui portera sur les SPA, c’est-à-dire les « applications monopages », pour ceux qui se demandent ce que signifie cet acronyme.

Introduction aux applications monopages (SPA)

Une application monopage est exactement cela : une page web unique qui sert de cadre à toutes les tâches liées à l’application. Cette architecture remonte à l’époque du Web 2.0 et à l’émergence d’AJAX comme méthode permettant d’« actualiser » individuellement des éléments du DOM (Document Object Model, ou modèle objet de document), plutôt que de recharger la page entière. Cette technique a considérablement amélioré les performances et constitue le précurseur des applications monopages modernes.

Ces applications se rapprochent davantage du fonctionnement d’une application mobile : l’interface utilisateur côté client est chargée lors de la première ouverture, et les échanges avec le serveur ne portent que sur des données. Cela signifie que chaque appel au serveur ne contient rien d’autre que des données et que toute modification de l’interface utilisateur s’effectue côté client. La quantité de données échangées s’en trouve considérablement réduite, ce qui, comme vous pouvez l’imaginer, améliore les performances. Ces types d’applications utilisent des API pour échanger des données.

En règle générale, nous sommes partis du principe que la plupart de ces API sont mises en œuvre selon les principes REST. Cela signifie que chaque objet (généralement considéré comme associé à un seul élément de l’interface utilisateur) dispose de sa propre API, qui peut être appelée pour effectuer des opérations CRUD (création, lecture, mise à jour et suppression). Du point de vue de la sécurité, cela simplifie quelque peu les choses, car les données d’un appel d’API (URI) donné sont censées respecter des formats précis. Les données envoyées à "/update/product/123" correspondront toujours au même objet sérialisé, tandis que celles envoyées à "/delete/order/4433" correspondront à un autre objet sérialisé. Il est donc possible de sécuriser cette API en appliquant les pratiques traditionnelles qui consistent à associer des politiques spécifiques à des URI précises.

Le modèle d’URI unique

Les applications monopages (SPA) peuvent ou non suivre ce modèle. Les pratiques émergentes en matière de SPA permettent effectivement d’utiliser la même API pour effectuer des transactions, ainsi qu’un mappage plus traditionnel entre fonctions et URI. Dans une SPA reposant sur un modèle à URI unique, l’URI ne change pas, contrairement aux objets sérialisés échangés entre le serveur et l’application.

Cela rappelle les transactions SOA/XML, dans lesquelles un point de terminaison unique (URI) était utilisé pour invoquer plusieurs fonctions. La fonction (le point de terminaison) ciblée était indiquée dans les données XML sérialisées ou parfois insérée dans un en-tête HTTP personnalisé. Ce modèle a rendu nécessaires des passerelles SOA/XML chargées de recevoir la requête et de déterminer quelle fonction était invoquée avant de l’acheminer vers le point de terminaison (serveur) approprié.

Avec les applications monopages (SPA), vous pouvez avoir affaire à de nombreux appels d’API ou seulement à quelques-uns. Dans tous les cas, vous devrez probablement sécuriser des données dans un format donné (peut-être XML, mais plus vraisemblablement JSON). Vous devez donc garder à l’esprit que le contenu lui-même présente un risque. Certaines données pouvant servir à générer dynamiquement des éléments d’interface utilisateur (ou à manipuler le DOM côté client d’une autre manière), il est important de détecter et d’éliminer tout code potentiellement malveillant à chaque envoi.

Le décalage en matière de sécurité

Malheureusement, si un même URI est utilisé pour échanger des données dans le cadre de différentes fonctions, la pratique traditionnelle consistant à associer des politiques aux URI ne fonctionnera pas. En réalité, cela peut compromettre la sécurité, car ces politiques sont souvent configurées pour traiter des formats de charge utile spécifiques. Les passerelles API associent elles aussi fréquemment des politiques (routage, mesure de l’utilisation, accès) à un URI précis. Ainsi, le fait de n’utiliser que quelques URI (appels d’API) pour gérer un nombre bien plus important de fonctions aux formats de données variés peut compromettre les dispositifs de sécurité existants.

Cet exemple montre pourquoi il est de plus en plus important que les équipes de sécurité et les développeurs (et non les équipes DevOps) collaborent plus étroitement, dès la première ligne de code et jusqu’au déploiement. Les développeurs peuvent prendre certaines mesures en amont pour faciliter la mise en place de protections appropriées par les équipes de sécurité, par exemple en ajoutant un en-tête HTTP contenant un indicateur permettant d’appliquer la bonne politique. Un élément aussi simple que « X-Code: 'order' » permettrait d’enrichir les requêtes afin que les solutions de sécurité puissent identifier les données, puis les analyser à la recherche d’éventuelles tentatives d’exploitation.

Sur le plan architectural, cela peut nécessiter un proxy L7 intelligent capable d’extraire le code et de réécrire l’URI avant d’acheminer la requête vers la solution de sécurité appropriée (WAF, passerelle API, etc.). Cette approche fonctionne également si le proxy L7 intelligent sait interpréter le format des données, tel que JSON, et si les développeurs incluent dans chaque échange un code ou un nom de point de terminaison permettant de réécrire la requête et de l’acheminer vers la destination appropriée.

Architecture sécurisée d’une SPA

Dans l’idéal, intégrer la sécurité de la couche applicative directement dans l’application offrirait le meilleur équilibre entre performances et sécurité. Toutefois, ce n’est pas toujours possible, et des solutions architecturales créatives sont parfois nécessaires pour atteindre l’objectif de sécurité.

La sécurité est un sport d’équipe

De manière générale, les changements apportés à la répartition des différentes responsabilités entre le client et le serveur par les développeurs ont une incidence considérable sur la façon dont l’infrastructure des services applicatifs interagit avec les requêtes et réponses qui en découlent. Il est important que les équipes chargées de la sécurité, du développement et de l’infrastructure des services applicatifs participent à l’ensemble du cycle de vie du développement logiciel (SDLC). La mise en œuvre d’une solution architecturale prend également du temps. Si elle est repoussée « à la fin », vous ajoutez des jours, des semaines, voire des mois au délai de mise sur le marché. Sinon, vous commercialisez votre produit sans services de sécurité, ce qui comporte son propre lot de risques (et de conséquences).

Collaborer dès le premier jour du développement est le meilleur moyen — et le plus rapide — de garantir que les applications soient disponibles, rapides et sécurisées lors de leur mise en production.

Partager
Mots-clés : 2019

À propos de l’auteur

Lori Mac Vittie
Lori Mac VittieIngénieur émérite et évangéliste en chef | F5

Lori MacVittie est ingénieure émérite et évangéliste en chef au sein du bureau du directeur technique de F5. Elle possède une expertise approfondie dans la fourniture d’applications, les stratégies d’automatisation et les infrastructures. Elle est réputée pour sa capacité à rendre la complexité intelligible, qu’elle définisse des garde-fous pour les agents d’IA, analyse des architectures multicloud fragiles ou explore les limites des systèmes évolutifs. Elle cumule plus de trente ans d’expérience dans le secteur, couvrant le développement d’applications, l’architecture informatique ainsi que l’exploitation des réseaux et des systèmes. Avant de rejoindre F5, elle a été rédactrice spécialisée dans les technologies et a reçu plusieurs distinctions. MacVittie est titulaire d’un master en informatique et est une autrice prolifique dont les publications couvrent la sécurité, le cloud et l’architecture d’entreprise. Elle est également une passionnée de jeux de société et de jeux vidéo, et assume pleinement ses avis bien tranchés sur le fromage.

Autres articles de Lori Mac Vittie

Articles de blog associés

F5 NGINXaaS pour Google Cloud : des applications résilientes et évolutives
Écosystème F5 | 08/09/2025

F5 NGINXaaS pour Google Cloud : des applications résilientes et évolutives

Découvrez comment NGINXaaS s’intègre à Google Cloud pour renforcer les performances et la sécurité, et préparer vos applications critiques à un avenir propulsé par l’IA.

L’intégration de F5 Web Application Firewall (WAF) à AWS est disponible dès aujourd’hui
Écosystème F5 | 24/04/2023

L’intégration de F5 Web Application Firewall (WAF) à AWS est disponible dès aujourd’hui

En faisant appel à un partenaire de déploiement AWS WAF tel que F5, vous pouvez renforcer la sécurité de vos applications web grâce à des règles personnalisées qui bloquent les schémas d’attaque courants, comme les injections SQL ou les attaques par scripts intersites (XSS).

Appliquer le principe de Peter Parker à l’inspection TLS
Écosystème F5 | 09/12/2019

Appliquer le principe de Peter Parker à l’inspection TLS

« Un grand pouvoir implique de grandes responsabilités. » Si l’on en trouve des échos chez Voltaire et Churchill, cette citation est surtout connue grâce aux bandes dessinées Spider-Man, où elle est attribuée à l’oncle Ben. Bien entendu, si cette phrase est si répandue dans la culture populaire, c’est notamment parce qu’elle peut s’appliquer à une multitude de situations et de sujets, y compris à l’inspection TLS.

Le NetOps a besoin de défenseurs, pas d’adversaires
Écosystème F5 | 13/12/2018

Le NetOps a besoin de défenseurs, pas d’adversaires

Il est important de reconnaître que les équipes NetOps ne sont pas toujours celles qui font obstacle au déploiement de la dernière nouveauté, application ou service. Les freins à la rapidité sont souvent dus au fait que les organisations n’adoptent pas tous les principes du DevOps lorsqu’elles cherchent à transformer leurs opérations informatiques.

Mise à jour des services applicatifs : sécurité, rapidité et visiteurs suspects
Écosystème F5 | 01/03/2018

Mise à jour des services applicatifs : sécurité, rapidité et visiteurs suspects

Il est de nouveau temps de nous pencher sur les services applicatifs que les entreprises utilisent réellement pour rendre leurs applications plus rapides et plus sûres. On constate notamment une hausse du recours aux services de protection contre les bots, ainsi que la progression lente mais régulière de HTTP/2. Bien qu’il ne s’agisse pas d’une application…

Les templates prennent le contrôle du cloud
Écosystème F5 | 02/02/2017

Les templates prennent le contrôle du cloud

Les modèles s’imposent dans le cloud. Lisez le blog de F5 pour découvrir comment l’infrastructure en tant que code et les API déclaratives automatisent la mise à disposition des applications.