Sécurité des API : comment protéger les single-page apps contre les bots malveillants
Voici la deuxième partie de notre série sur la protection des API contre les bots malveillants. Consultez aussi la partie 1/2 : Sécurité des API mobiles : comment protéger les API des applications mobiles contre les bots.
Les single-page apps – ou applications web monopages – sont l’une des tendances d’architecture web les plus populaires aujourd’hui, et ce pour de bonnes raisons. Elles sont rapides, car elles ne nécessitent pas de rechargement de ressources comme le HTML, le CSS et les scripts à chaque interaction utilisateur. Elles sont faciles à déployer, et peuvent être déboguées avec Chrome. Et enfin, le code peut être réutilisé pour une application mobile.
L’implémentation typique d’une single-page app envoie au navigateur une « coquille » de page HTML, sans contenu significatif. Le contenu est ensuite chargé dynamiquement à la demande via des requêtes AJAX, et présenté côté client via un framework JavaScript comme Angular, React ou Vue.
Bien qu’une architecture centrée sur les API présente de nombreux avantages, elle ouvre aussi la porte aux abus et aux attaques de bots malveillants.

L’APIfication du contenu en ligne
Tout le monde aime les API. En permettant à toutes sortes d’appareils et d’applications d’échanger des informations, via une variété de protocoles de communication, les API aident les développeurs à créer des expériences utilisateur plus riches, plus facilement et plus efficacement.
Et les bénéfices business sont bien réels : selon CapGemini, les entreprises qui adoptent l’« APIfication » voient leur chiffre d’affaires croître 5 % plus vite, créent des offres marketing intégrées avec leurs partenaires 15 % plus souvent, et lancent de nouveaux produits et services 21 % plus vite que leurs concurrents.
Malheureusement, les pirates informatiques, les voleurs de contenu et autres opérateurs de bots malveillants apprécient également les API et leur accès facile à des informations stables et structurées. Grâce aux API, les bots (tout comme les applications et appareils légitimes) peuvent facilement trouver les informations qu’ils recherchent au même endroit et dans le même format, à chaque fois.
Pour se protéger efficacement contre les menaces du trafic automatisé, il est donc essentiel de sécuriser vos API tout autant que vos pages HTML traditionnelles.
Pourquoi la protection contre les bots est-elle complexe sur les single-page apps ?
Comme elles s’appuient fortement sur des appels AJAX, les single-page apps sont plus difficiles à défendre contre les bots que les sites multi-pages.
Prenons l’exemple d’un visiteur qui essaie d’accéder à votre catalogue produit. Votre solution de protection contre les bots identifie ce visiteur comme un bot. Elle renvoie alors un code 403 au lieu du catalogue, et affiche un CAPTCHA pour permettre au visiteur, s’il est humain, de résoudre le CAPTCHA et d’accéder au contenu.
Sur un site multi-pages, ce processus est transparent. Chaque interaction charge une nouvelle page, le navigateur n’a donc aucun problème à afficher soit le catalogue, soit le CAPTCHA : ce sont juste deux pages différentes.
Avec les single-page apps, c’est beaucoup plus compliqué. Lorsqu’une application monopage effectue un appel AJAX, le framework JavaScript attend une réponse très spécifique de l’API. Cette réponse sera différente pour chaque implémentation, il n’existe pas de norme.
Quand une requête est bloquée, l’API ne renvoie pas la réponse attendue, et l’application est incapable d’interpréter correctement cette réponse inattendue.
Notre solution : une balise JavaScript
La plupart des solutions de protection contre les bots contournent ce problème en bloquant systématiquement toute requête suspecte provenant d’une application monopage vers l’API. Elles ne présentent pas de CAPTCHA ; les visiteurs douteux se voient simplement refuser l’accès.
Le problème avec cette approche est qu’elle vous laisse complètement dans le noir. Il n’y a pas de boucle de rétroaction ; vous n’avez aucun moyen d’évaluer les faux positifs, ni de savoir si des utilisateurs légitimes sont bloqués.
Chez DataDome, nous n’avons pas trouvé cela satisfaisant. Nous avons donc développé une solution : une balise JavaScript qui surveille chaque appel AJAX vers n’importe quelle URL, et affiche un CAPTCHA au-dessus de la single-page app chaque fois qu’un appel API est bloqué par notre module serveur.
Cette balise JavaScript a été testée et déployée sur les principaux frameworks JavaScript, notamment Angular, React et Vue.
Pour commencer
Intéressé ? Vous pouvez lancer votre essai gratuit de 30 jours en moins de 15 minutes.
Commencez par installer le module serveur de votre choix. Cela prend généralement moins de 10 minutes, et ne nécessite pas de carte bancaire.
Ensuite, installez la balise JavaScript en suivant ces instructions, et vérifiez que votre single-page app prend en charge le cookie de session DataDome pour chaque appel API.
C’est tout ! Vous pouvez désormais accéder au tableau de bord DataDome et voir quels bots exécutent du JavaScript sur votre single-page app.