Comment sécuriser votre backend Nodejs ?

 sécuriser votre backend Nodejs

Comme vous le savez ces jours-ci, la sécurité devient de plus en plus importante pour toutes sortes de startups. En tant que propriétaire d’une startup, vous devez faire attention à la sécurité de votre application Web en premier lieu. N’oubliez pas que les utilisateurs vous font confiance pour leurs informations et que vous devez vous soucier de leurs données de manière professionnelle, sinon si quelqu’un pirate votre application Web et vole les données, vous échouerez et perdrez vos clients. Peu importe que vous construisiez une entreprise SAAS ou une plateforme de crowdsourcing. Peu importe le type de données que vous collectez. Vous devez vous soucier de la sécurité de votre plateforme. 

1. Injections: L’une des attaques les plus populaires est l’injection SQL. L’injection SQL est une technique d’injection de code qui pourrait détruire votre base de données. Le pirate peut simplement envoyer n’importe lequel de ces extraits et planter votre base de données.

' ; DROP TABLE customers; --

cette ligne supprimera le tableau complet de vos clients.

' OR 1=1 --

Cette ligne peut être soumise via le champ de mot de passe et accéder aux données utilisateur. Alors, comment pouvez-vous surmonter les attaques par injection SQL dans Node.js ?
Il est recommandé d’utiliser ORM dans votre back-end pour travailler avec les bases de données, par exemple, Knex.js . Cependant, gardez à l’esprit que l’injection SQL n’est pas le seul type d’injection que les pirates peuvent utiliser. L’injection signifie mélanger le code externe par votre code en soumettant ces mauvaises lignes de code dans les formulaires de votre site. La meilleure façon de surmonter toute attaque par injection est de suivre ces étapes.

  1. Validez chaque champ de votre base de données.
  2. Utilisez Express Validator dans vos contrôleurs Node.js pour valider chaque champ soumis.
  3. Validez chaque formulaire du front-end avant d’autoriser les utilisateurs à envoyer ces données au back-end. Peu importe que vous utilisiez Angular, React ou Vue.js. Ils ont une solution fantastique et bien expliquée pour cela.

2. Vérification attentive des bibliothèques tierces N’oubliez pas que toutes les bibliothèques tierces sont open source et sont téléchargées par d’autres développeurs. Que se passe-t-il si quelqu’un crée ce package avec une vulnérabilité ? Il est recommandé de vérifier chaque paquet pour les vulnérabilités disponibles. Nous avons utilisé un package appelé NSP mais NPM l’a acquis en 2018 alors maintenant il fait partie de NPM. Vous pouvez également utiliser Snyk 

npm install -g snyk

Une fois installé, vous devrez vous authentifier avec votre compte Snyk puis tester. Vous pouvez également remarquer que lorsque vous installez des packages npm, il vous informe des vulnérabilités. Ne les ignorez pas! 

npm audit fix

3. Enregistrement La journalisation est l’occasion de suivre les visiteurs de votre site pour voir quelles sont leurs actions. Comment les visiteurs interagissent-ils avec votre site ? Il fournit également des détails supplémentaires sur chaque visiteur. En d’autres termes, si quelqu’un essaie de faire une chose d’étrange dans votre site Web, vous pouvez obtenir plus d’informations sur cette personne en consultant les journaux. Heureusement pour nous, il existe 2 excellents packages qui aident à résoudre ce problème dans Node.js si facilement. Vous pouvez utiliser Winston ou Morgan . J’adore Morgan plus et je l’ai utilisé plusieurs fois dans des projets précédents. Voyons comment cela fonctionne !

npm install morgan

C’est juste un middleware et nous devons inclure cette ligne dans index.js :

app.use(morgan('combined'));

Il existe d’autres options qui fonctionnent bien aussi, mais l’option combinée vous fournit beaucoup d’informations.

4. Protégez vos variables d’environnement: Vous pouvez utiliser des services de messagerie comme Sendgrid, vous pouvez accepter des paiements en utilisant Stripe ou Paypal. Vous pouvez utiliser Twillio pour les vérifications par SMS. Pour chacun de ces fournisseurs de services, vous utilisez une clé API qui doit être conservée en lieu sûr. La meilleure pratique consiste à conserver toutes ces valeurs de clé API dans un fichier distinct appelé  .env . Vous pouvez affecter ces valeurs en variables, puis les utiliser dans les fonctions de contrôleur nécessaires. Je recommanderai d’utiliser la bibliothèque dotenv .

npm install dotenv

Ensuite, lorsque vous utilisez une variable d’environnement à partir d’un fichier .env, supposons qu’elle s’appelle stripe_key, il vous suffit de l’utiliser dans votre contrôleur comme ceci:

process.env.stripe_key

Une dernière remarque : n’oubliez pas d’inclure le fichier .env à l’intérieur de .gitignore si vous allez pousser ce code dans le Github publiquement et également écrire dans la documentation quel type d’API sont nécessaires pour exécuter le projet afin que d’autres utilisateurs puissent créer des comptes sur ces plateformes et obtenir leurs propres clés.

5. Configuration d’en-têtes sécurisés: Il est également très important d’avoir des en-têtes sécurisés. Il vous aide à protéger votre API contre les attaques XSS. (exemple : Helmet). C’est un autre middleware que vous devez installer et inclure dans les index.js de votre projet.

6. Configuration du contrôle d’accès pour votre API Il est très important de contrôler l’accès à votre API, sinon tout le monde peut y accéder et faire ce qu’il veut. C’est pourquoi vous devez utiliser la bibliothèque Cors pour protéger votre API. Voici comment cela fonctionne: En tant que middleware, vous devez le configurer dans index.js . Il ressemblera à ceci:

const whitelist = ['http://example1.com', 'http://example2.com']
const corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

app.use(cors(corsOptions));

Comme vous le voyez, vous pouvez stocker des noms de domaines. Vous pouvez consulter la documentation officielle pour sa mise en œuvre complète.

7. Gestion de la base de données: Une autre chose importante est le hachage des mots de passe dans votre base de données afin que personne ne puisse obtenir les valeurs réelles des mots de passe stockés. Bien sûr, il peut y avoir un autre champ que vous voudriez peut-être hacher, mais le champ le plus courant est un champ de mot de passe. Les bibliothèques les plus populaires sont les 2 suivantes :

8. Gestion de l’authentification: La gestion de l’authentification est l’un des facteurs les plus importants pour assurer la sécurité de votre site. Il vous aide à gérer les sessions des utilisateurs et à comprendre quel type de données et quel type de pages leur donnent accès? De nos jours, la solution la plus populaire utilise JWT (JSON Web Tokens) . Comme il s’agit d’un sujet vaste et différent, nous ne couvrirons pas son intégration ici, mais il existe de nombreux tuto sur la mise en œuvre de JWT que vous pouvez trouver sur Internet.

9. Utilisez HTTPS : De nos jours, les certificats SSL deviennent une chose très populaire et essentielle pour gérer une entreprise en ligne. De nombreuses autorités de certification ont vendu ces certificats, mais vous pouvez utiliser 2 options gratuites:

Cloudflare est bien connu sous le nom de CDN, mais il convertit également votre site en HTTPS et le protège des attaques DDoS.

Conclusion : La sécurisation de votre site Web est un processus régulier et vous devriez vous en soucier régulièrement pour trouver de nouvelles vulnérabilités et les corriger.

Share Button