2023-11-10 17:00 Temps de lecture : 15 min

19 meilleures pratiques de sécurité des API à mettre en œuvre et à rester en sécurité

La protection des interfaces de programmation applicative (API) constitue un impératif majeur pour la quasi-totalité des applications contemporaines.

Les API sont aujourd'hui le vecteur privilégié pour intégrer une application avec d'autres. Elles représentent une porte d'entrée vers votre application et, par conséquent, leur sécurité doit être irréprochable pour éviter toute intrusion indésirable.

Examinons certaines failles de sécurité qui peuvent menacer vos API.

Vulnérabilités courantes des API

#1. Attaques par scripts intersites (XSS)

Les attaques XSS, bien que fréquentes sur les applications web, peuvent également se produire via les API si les données saisies par l'utilisateur ne sont pas correctement filtrées. Des individus malveillants peuvent ainsi exécuter des scripts dommageables sur le serveur et accéder à des informations sensibles.

#2. Dépassement des limites de débit

Un dépassement des limites de débit de l'API peut permettre à des attaquants de submerger votre serveur par un volume excessif de requêtes. À terme, cela pourrait entraîner une panne du serveur et rendre votre service inaccessible pour vos utilisateurs.

#3. Défaut d'authentification adéquate

Si votre API ne repose pas sur une méthode d'authentification robuste, n'importe quelle entité tierce peut y accéder. L'autorisation est également essentielle pour contrôler les ressources accessibles à chaque utilisateur et pendant combien de temps.

#4. Transmission de données non protégée

Les données transmises aux utilisateurs de votre API doivent être chiffrées pendant leur transit. Sans chiffrement, un attaquant peut intercepter et dérober ces informations via une attaque de l'homme du milieu. Il est donc vivement recommandé d'utiliser un protocole sécurisé tel que HTTPS pour la transmission de données.

#5. Dépendances obsolètes

Les API dépendent souvent de bibliothèques externes pour exécuter des fonctions complexes. Si ces dépendances comportent des vulnérabilités, votre API devient elle aussi vulnérable. Il est donc impératif de maintenir vos dépendances à jour.

Maintenant que nous avons identifié les principales vulnérabilités des API, explorons les bonnes pratiques pour les sécuriser.

À lire également : Les meilleures alternatives à Postman pour tester les API.

Sécurité des API : Les meilleures pratiques

Gestion des versions de l'API

Il est primordial de contrôler et mettre à jour régulièrement vos API ainsi que leurs dépendances, car ces dernières peuvent être sources de vulnérabilités importantes. Il est conseillé d'informer les utilisateurs de l'API de toute mise à jour en publiant une nouvelle version, en suivant les principes du versionnage sémantique.

Maintenir votre API à jour est une précaution élémentaire pour éviter son exploitation par des individus malveillants.

Authentification

Diverses méthodes existent pour authentifier un utilisateur d'API. L'approche la plus simple, par nom d'utilisateur/mot de passe, est souvent insuffisante car elle repose entièrement sur la robustesse du mot de passe.

Une autre méthode consiste à utiliser des clés API uniques pour chaque utilisateur.

L'authentification JWT (JSON Web Token) consiste à convertir les informations d'identification de l'utilisateur en un jeton signé numériquement, qui est ensuite envoyé à l'utilisateur. L'utilisateur renvoie ce jeton à chaque requête au serveur pour validation. Ces jetons JWT ont également une durée de validité limitée.

La solution la plus efficace est OAuth, qui permet à des tiers d'accéder à l'API avec des informations d'identification préexistantes. Par exemple, si vous êtes déjà connecté à Google, une application peut utiliser ces informations pour vous connecter à votre compte sans mot de passe. Votre compte Google devient votre mot de passe.

Autorisation

L'autorisation diffère de l'authentification. L'autorisation détermine les ressources d'API auxquelles un utilisateur authentifié peut accéder.

Par exemple, un professeur d'université peut avoir accès aux informations de tous les étudiants, alors qu'un étudiant n'aura accès qu'à ses propres données. Dans ce cas, le professeur et l'étudiant sont authentifiés sur le même système, mais leurs actions sont limitées.

Une autorisation API bien configurée prévient tout accès non autorisé à une ressource.

Rédaction de données

La rédaction de données consiste à ne révéler que les informations nécessaires aux utilisateurs, protégeant ainsi les informations sensibles. Une autorisation adéquate permet une meilleure rédaction des données. Les réglementations sur la protection des données, telles que le RGPD, exigent également la suppression des données non indispensables. Il est crucial d'empêcher l'accès non autorisé à toute donnée personnelle ou sensible.

Vous pouvez mettre en place la rédaction de données en utilisant un middleware ou un gestionnaire de passerelle.

Chiffrement

Le chiffrement est devenu une mesure de sécurité incontournable, notamment lors du traitement d'informations sensibles. L'utilisation du protocole HTTPS, basé sur TLS (Transport Layer Security) et SSL (Secure Socket Layer), est un minimum.

Le chiffrement de bout en bout renforce la sécurité des données en transit. Les données stockées dans la base de données doivent aussi être chiffrées en cas d'intrusion.

Gestion des erreurs

Des messages d'erreur trop détaillés peuvent divulguer des informations sur l'infrastructure de l'application aux attaquants. Il est donc conseillé d'utiliser des messages d'erreur génériques et d'implémenter une gestion des erreurs personnalisée, en veillant à ne pas inclure d'informations sensibles dans les détails de l'erreur.

Validation des entrées et nettoyage des données

La validation des entrées est essentielle pour les API, car vous ne pouvez pas prévoir les données entrantes.

Le nettoyage des données consiste à supprimer tout code exécutable indésirable des données reçues. Un attaquant pourrait injecter un script JavaScript qui, s'il n'est pas nettoyé avant d'être transmis au code HTML, pourrait être exécuté et compromettre les données.

Un nettoyage inadéquat des données peut mener à des attaques de type Cross-Site Scripting (XSS).

Systèmes de détection d'intrusion

Les systèmes de détection d'intrusion (IDS) surveillent le trafic réseau de l'API. S'ils détectent un comportement inhabituel, ils enregistrent l'événement et alertent les autorités compétentes.

Il existe deux types d'IDS : les systèmes basés sur le réseau et ceux basés sur l'hôte. Les systèmes basés sur le réseau sont répartis à différents points de contrôle, tandis que les systèmes basés sur l'hôte sont déployés sur un seul hôte.

Ces systèmes permettent d'identifier les tentatives d'accès non autorisées avant qu'elles ne compromettent les données.

Liste blanche IP

La liste blanche IP permet de n'autoriser l'accès à l'API qu'à certaines adresses IP. Cette méthode peut être difficile à mettre en œuvre pour les API publiques, car elle nécessite une liste exhaustive de toutes les adresses IP autorisées.

Elle est toutefois avantageuse lorsque vous savez que seules certaines applications accèderont à votre API.

Jetons Web JSON

Les JWT sont couramment utilisés pour l'authentification. Un jeton signé numériquement est généré à partir des informations d'identification de l'utilisateur. Cela masque les informations d'identification réelles et évite de les stocker côté client ou dans une base de données.

Un JWT se compose de trois sections : l'en-tête, la charge utile et la signature. La charge utile contient les informations d'identification de l'utilisateur, et l'en-tête contient des informations telles que l'algorithme utilisé. La signature est générée par le serveur et le client pour chaque requête ultérieure.

Les JWT ont généralement une date d'expiration, après laquelle un nouveau jeton doit être généré par le serveur et envoyé à l'utilisateur.

Journalisation et surveillance

La surveillance du trafic vers votre API peut aider à détecter et identifier les visiteurs indésirables. Chaque requête peut être surveillée, mais il faut veiller à ce que les journaux ne contiennent pas d'informations sensibles.

Limitation du débit

Une API sans limitation de débit est vulnérable aux attaques DDoS (déni de service distribué), qui consistent à inonder le système de requêtes pour le rendre indisponible. La limitation de débit permet de prévenir ces attaques en contrôlant le flux du trafic de l'API.

Dépendances sécurisées

Les vulnérabilités peuvent provenir non seulement de votre propre code, mais aussi de toute dépendance tierce que vous utilisez dans votre API. Il est donc essentiel de contrôler et analyser régulièrement vos dépendances à la recherche de toute vulnérabilité.

Vous pouvez programmer des analyses régulières de vos dépendances et effectuer des mises à jour si des correctifs de sécurité sont disponibles. Choisissez des dépendances réputées pour leur sécurité et la fréquence de leurs mises à jour.

Des en-têtes de sécurité doivent accompagner les réponses de l'API pour informer le navigateur de la sécurité de l'API et de la manière dont il doit agir. Voici quelques en-têtes importants pour renforcer la sécurité :

  • Cache-Control : définissez-le sur no-store pour éviter le stockage d'informations sensibles dans le navigateur.
  • Content-Security-Policy : définissez-le sur frame-ancestors 'none' pour empêcher l'intégration de la réponse de l'API dans une iframe.
  • Content-Type : cet en-tête est important. Sans lui, le navigateur tente de deviner le type de réponse, ce qui peut conduire à des attaques de reniflage. Pour une réponse JSON, définissez-le sur application/json.
  • X-Content-Type-Options : définissez-le sur nosniff pour demander au navigateur de ne pas deviner le type MIME de la réponse et de se fier uniquement à l'en-tête Content-Type.

Normes et cadres de sécurité

Concevez votre API en vous basant sur des normes et des cadres de sécurité préétablis afin qu'elle bénéficie des dernières mesures de sécurité.

Expiration du jeton

Si vous utilisez des jetons d'accès, il est conseillé de les faire expirer rapidement, car cela implique une ré-authentification de l'utilisateur, ce qui est une bonne chose. Les JWT utilisent généralement deux types de jetons : les jetons d'accès, qui ont une durée de vie courte, et les jetons d'actualisation, qui ont une durée de vie plus longue. Dans tous les cas, vos jetons doivent avoir une date d'expiration.

Pare-feu d'applications web

Un WAF, ou pare-feu d'applications web, est une passerelle qui surveille, filtre et bloque tout trafic réseau malveillant. C'est un moyen efficace de prévenir les attaques basées sur le protocole HTTP.

Utilisation de passerelles API

Pour configurer facilement la sécurité des API, gérer les routes et leurs accès, l'utilisation de passerelles API est une option judicieuse. Elles fournissent également des outils de surveillance, de journalisation et d'analyse qui peuvent être utiles.

Confiance zéro

Le principe de la stratégie Zero Trust est de ne faire confiance à aucune source centralisée. La sécurité doit être mise en place à plusieurs niveaux.

En d'autres termes, il ne faut faire confiance à personne, pas même aux développeurs qui travaillent sur l'API. Chaque point d'accès doit être surveillé et analysé pour éviter les failles de sécurité.

L'automatisation est précieuse dans ce contexte. Des outils automatisés peuvent surveiller et bloquer les activités inhabituelles ou suspectes.

Derniers mots

Il est impossible d'assurer une sécurité absolue pour vos API, car des failles peuvent toujours exister. Ces failles peuvent engendrer des vulnérabilités Zero Day. Par conséquent, pour protéger vos API, vous devez au minimum les maintenir à jour avec les dernières normes de sécurité.

N'hésitez pas à consulter les meilleurs outils de tests de sécurité des applications dynamiques.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.