Express.js est une solution performante pour la création d’applications web backend, mais elle n’est pas assez sécurisée. Lorsque vous créez une application web, vous avez besoin de mesures de sécurité adéquates pour protéger les données de vos utilisateurs.



Heureusement, il existe des méthodes pour améliorer la sécurité de vos applications Express.js. Ces conseils vous aideront à renforcer la sécurité de vos applications en utilisant différentes approches.


Configurer une application Express.js

Commencez par configurer un serveur web Express.js de démonstration à l’aide de npm, le gestionnaire de paquets Node. Créez un dossier de projet localement et changez de répertoire sur votre terminal.

 mkdir express-project
cd express-project

Ensuite, créez un fichier package.json dans le répertoire racine.

 npm init -y 

Allez-y et installez Express.js.

 npm install express 

Enfin, créez un fichier server.js dans le répertoire racine de votre dossier de projet, et ajoutez le code suivant pour mettre en place un serveur web de base.

 const express = require("express")
const app = express()
const PORT = process.env.PORT || 5000

app.get("https://www.makeuseof.com/", (req, res) => {
    res.json("Hello, World!")
})

app.listen(PORT, () => {
    console.log(`Starting server on http://localhost:${PORT}`)
})

Démarrez le serveur avec cette commande :

 node server.js 

Vous êtes maintenant prêt à explorer certaines des mesures que vous pouvez utiliser pour sécuriser votre application Express.js.


1. Sécuriser les applications Express.js avec Helmet

Helmet est un intergiciel Node.js qui aide à sécuriser les applications côté serveur en définissant divers en-têtes de sécurité HTTP. Ces en-têtes fournissent des mécanismes de défense essentiels contre les vulnérabilités de sécurité backend courantes, telles que le cross-site scripting (XSS), le cross-site request forgery (CSRF), et bien d’autres encore.

Un homme assis à un bureau tapant sur un ordinateur portable avec du code à l'écran.

Express.js ne configure pas les en-têtes de sécurité HTTP par défaut, ce qui laisse une faille de sécurité potentielle qui expose des en-têtes potentiellement sensibles. En utilisant ces informations, des acteurs malveillants peuvent être en mesure d’obtenir un accès non autorisé ou de perturber votre application.

Helmet agit comme un bouclier vital, en s’assurant que les réponses HTTP de l’application adoptent les mesures de sécurité nécessaires, réduisant ainsi de manière significative la surface d’attaque potentielle.

Explorer la sécurité des applications Express.js sans Helmet

Lorsque le serveur fonctionne, examinez les en-têtes de l’application. Allez-y et faites des requêtes HTTP à l’API en utilisant Postman ou tout autre client qui affiche les en-têtes de réponse. La plupart des navigateurs incluent un ensemble d’outils de développement qui vous permettront de le faire.

Lorsque vous envoyez des requêtes au point de terminaison home, vous devriez observer des résultats similaires dans la fenêtre En-têtes de la réponse dans Postman.

Données des en-têtes par défaut de la réponse HTTP API sur le client API Postman.

Remarquez que l’en-tête X-Powered-By . En général, les technologies dorsales utilisent cet en-tête pour indiquer le cadre ou autre logiciel qui alimente l’application web. Vous devez généralement supprimer l’en-tête X-Powered-By dans un environnement de production.

Ce faisant, vous empêcherez les attaquants potentiels d’obtenir des informations précieuses qu’ils pourraient utiliser pour exploiter les vulnérabilités connues associées à votre pile technologique.

Tester la configuration de sécurité du serveur Express.js

Pour évaluer l’état de sécurité de vos applications, nous allons utiliser l’outil en ligne Security Headers. Cette application est spécialement conçue pour évaluer la configuration de sécurité des en-têtes HTTP pour les applications côté client et côté serveur.

Tout d’abord, vous devez rendre votre serveur Express.js local accessible sur Internet. Il existe deux approches possibles pour y parvenir : déployer votre application Express.js sur un serveur cloud ou utiliser ngrok.

Pour l’utiliser, téléchargez le fichier zip ngrok, extrayez l’exécutable et lancez l’application. Ensuite, exécutez la commande suivante pour héberger votre serveur Express.js local avec ngrok.

 ngrok http 5000 

ngrok affichera de brèves informations qui ressemblent à ceci :

informations sur le serveur web ngrok dans une fenêtre de terminal.

Copier le fichier URL de transfert et la coller dans le champ En-têtes de sécuritéet cliquez sur le bouton Scan bouton.

en-têtes de sécurité outil en ligne redirection champ de saisie URL

Une fois l’évaluation de la sécurité terminée, vous devriez recevoir un rapport similaire.

Échec d'un en-tête de sécurité Rapport d'évaluation des en-têtes de sécurité HTTP

D’après ce rapport, il est évident que le serveur Express.js a reçu un mauvais F grade. Cette mauvaise note est due à l’absence d’en-têtes de sécurité HTTP essentiels dans la configuration du serveur – leur absence rend le serveur vulnérable à des risques de sécurité potentiels.

Intégrer Helmet dans l’application Express.js

Maintenant, allez-y et intégrez Helmet dans votre application Express.js. Exécutez la commande ci-dessous pour installer la dépendance.

 npm install helmet 

Mettez à jour votre fichier server.js et importez Helmet.

 const helmet = require("helmet") 

Maintenant, ajoutez Helmet à votre application Express.js.

 app.use(helmet()) 

Enfin, démarrez le serveur de développement, copiez le lien de redirection de de ngrok et le coller dans le fichier de l’en-tête de sécurité pour analyser à nouveau le serveur local. Une fois le rescan terminé, vous devriez obtenir des résultats similaires à ceux-ci :

Rapport d'évaluation des en-têtes de sécurité HTTP réussi

Après l’intégration de Helmet, Express.js inclut plusieurs en-têtes de sécurité essentiels dans la réponse HTTP. Cette amélioration substantielle a permis à l’application Express.js de passer à un mode de fonctionnement à base d’en-têtes de sécurité. A grade.

Bien que Helmet ne soit pas une solution infaillible, il améliore considérablement la sécurité globale de votre application Express.js.


2. Sécuriser les applications Express.js en utilisant Joi, une bibliothèque de validation d’entrée

Joi est une bibliothèque de validation d’entrée qui aide à sécuriser les applications Express.js en fournissant un moyen pratique de valider et d’assainir les entrées des utilisateurs. En définissant des schémas de validation avec Joi, vous pouvez spécifier la structure attendue, les types de données et les contraintes pour les données entrantes.

Joi valide l’entrée par rapport au schéma défini, en s’assurant qu’elle répond aux critères spécifiés. Cela permet d’éviter les failles de sécurité courantes telles que l’injection de données, les scripts intersites (XSS) et d’autres attaques de manipulation de données.

Suivez ces étapes pour intégrer Joi dans votre application.

  1. Installer Joi.
     npm install joi 
  2. Importez Joi dans votre fichier server.js.
     const Joi = require('joi'); 
  3. Créez un schéma de validation des données Joi qui définit la structure attendue et les contraintes éventuelles pour les données d’entrée.
     const schema = Joi.object({
      email: Joi.string().email().required(),
      password: Joi.string().min(5).max(16).required()
    });
  4. Valider toutes les données entrantes à l’aide du schéma défini.
     const { error, value } = schema.validate(req.body);

    if (error) {
      // Handle validation error
      // For example, return an error response
      return res.status(400).json({ error: error.details[0].message });
    }

En mettant en œuvre ces étapes, vous pouvez exploiter les capacités de validation des entrées de Joi pour sécuriser vos applications Express.js. Cela permettra de s’assurer que les données entrantes respectent les contraintes définies, empêchant ainsi les menaces potentielles de sécurité liées à la manipulation des données.


3. Sécuriser les applications Express.js en utilisant le mécanisme CORS

Le partage des ressources entre origines (CORS) est un mécanisme que les serveurs web utilisent pour gérer les origines – clients ou autres applications côté serveur – qui peuvent accéder à leurs ressources protégées. Ce mécanisme permet de se protéger contre les requêtes inter-origines non autorisées, en évitant des problèmes tels que les attaques de type cross-site scripting (XSS).

Pour sécuriser les applications Express.js à l’aide de CORS, procédez comme suit :

  1. Installez le paquet CORS.
     npm install cors 
  2. Exiger et utiliser le middleware CORS dans le fichier server.js.
     const cors = require('cors');
    app.use(cors());

En intégrant l’intergiciel CORS dans votre application Express.js, vous activez le partage de ressources inter-origines. Cela vous permet d’atténuer les risques de sécurité potentiels liés aux requêtes inter-origines.


Sécuriser les applications côté serveur en toute simplicité

Vous pouvez utiliser une ou plusieurs de ces mesures essentielles pour améliorer la sécurité de vos applications Express.js.

Bien qu’il existe de nombreuses mesures et approches pour protéger vos applications côté serveur, l’essentiel est de donner la priorité à la sécurité tout au long du cycle de développement. Cette tâche commence dès la phase de conception et doit se poursuivre jusqu’au déploiement.