‫- : Dans cette
‫conférence, nous allons utiliser deux autres packages pour améliorer la sécurité de notre
‫application, et cette fois pour effectuer la désinfection des données.
‫Ainsi, la désinfection des données signifie essentiellement
‫de nettoyer toutes les
‫données qui entrent dans l'application du code malveillant.
‫Donc, du code qui essaie d'attaquer notre application.
‫Dans ce cas, nous essayons de nous défendre contre deux attaques.
‫Alors, écrivons-le, et nous le
‫ferons, disons, juste ici après l'analyseur corporel.
‫Ce middleware lit ici les données
‫dans la requête. corps, et seulement après
‫cela, nous pouvons réellement nettoyer ces données, n'est-ce pas ?
‫C'est un endroit parfait pour faire la désinfection des données.
‫Ainsi, nous procéderons à la désinfection des données contre
‫l'injection de requêtes NoSQL, ainsi qu'à la désinfection des
‫données contre les attaques de scripts intersites.
‫Et maintenant, avant de faire quoi
‫que ce soit d'autre, laissez-moi vous montrer pourquoi il
‫est si important de se défendre contre ce type d'attaque.
‫Nous allons maintenant simuler une injection de requête NoSQL et j'espère
‫que vous serez aussi choqué que moi lorsque j'ai découvert pour la
‫première fois à quel point cela peut être puissant.
‫Passons maintenant à Postman ici et essayons de
‫vous connecter en tant que
‫personne, même sans connaître son adresse e-mail.
‫D'accord, donc en gros, en donnant simplement un mot de passe,
‫disons celui-ci ici, nous pourrons nous connecter, mais
‫même sans connaître l'adresse e-mail.
‫Encore une fois, nous
‫allons le faire en simulant une injection de requête NoSQL,
‫et la façon la plus simple de le faire est celle-ci.
‫Au lieu de spécifier un
‫véritable e-mail, nous spécifions cette requête, essentiellement.
‫Nous utilisons l'opérateur MongoDB supérieur à
‫et le définissons égal à rien, d'accord ?
‫Et maintenant, que se passe-t-il ?
‫En effet, nous sommes maintenant connecté en tant qu'administrateur.
‫Donc, vous voyez, nous avons même obtenu notre jeton d'accès.
‫Ouais, nous sommes vraiment maintenant connectés, et
‫ça m'épate complètement, d'accord ?
‫Encore une fois, sans connaître l'adresse
‫e-mail, seul le mot de passe, nous avons pu nous connecter.
‫Et croyez-moi, il n'est pas vraiment difficile
‫de trouver un tas de mots de passe très populaires qui
‫sont utilisés sur chaque application.
‫Donc, ce genre d'attaque est ce contre quoi nous devons nous protéger.
‫Cela fonctionne essentiellement parce que ce sera toujours vrai, donc c'est en
‫fait - vous le voyez également dans Compass.
‫Alors je le copie, ou en fait, copions tout cela.
‫Ensuite, essayez de filtrer par exactement la même chose.
‫Il ne nous manque plus que les
‫accolades, mais nous obtenons maintenant une requête valide.
‫Frappons Rechercher, et en effet, cela renvoie tous les utilisateurs.
‫Donc, fondamentalement, tous les utilisateurs correspondent à cette requête.
‫Encore une fois, c'est parce que c'est toujours vrai ici.
‫Cela sélectionnera alors tous les noms d'utilisateur.
‫Cette injection de requête malveillante nous a permis
‫de nous connecter en connaissant uniquement ce mot de passe, d'accord ?
‫Donc, pour nous protéger contre cela,
‫installons un autre
‫middleware, et celui-ci s'appelle express-mongo-sanitize, et puisque nous sommes là,
‫allons également de l'avant et installons l'autre
‫dont nous aurons besoin, mais
‫plus tard dans cette vidéo, qui s'appelle simplement XSS.
‫En fait, ce n'était pas correct ; il s'appelle XSS_clean.
‫Nous devons aller de l'avant et désinstaller l'autre.
‫NPM désinstalle XSS.
‫Jetons un coup d'œil à notre forfait. json, et effectivement c'est parti.
‫Encore une fois, XSS_clean est celui que nous voulons utiliser.
‫Quoi qu'il en soit, parlons
‫à nouveau de l'injection de requête NoSQL.
‫Tout ce que nous allons utiliser est -
‫et bien sûr, nous devons
‫d'abord l'exiger, donc const mongoSanitize est égal à exiger express-mongo-sanitize.
‫Encore une fois, VS Code ici m'aide, et puisque nous sommes
‫ici, exigeons également le suivant.
‫La variable dont j'ai besoin
‫s'appelle XSS, puis le nom du module est XSS_clean.
‫Alors, utilisons maintenant ce mongoSanitize ici - ici même.
‫MongoSanitize est une fonction que nous appellerons, qui renverra
‫ensuite une fonction middleware, que nous
‫pourrons ensuite utiliser.
‫C'est suffisant pour nous prémunir contre le
‫genre d'attaque que nous venons de voir avant.
‫Donc, ce que fait ce middleware est
‫de regarder le corps de la requête, la chaîne de requête de la
‫requête, ainsi que la requête. Params, puis
‫il filtrera essentiellement tous
‫les signes et points du dollar,
‫car c'est ainsi que les opérateurs MongoDB sont écrits.
‫En supprimant ça, eh bien, ces opérateurs
‫ne vont plus travailler.
‫Alors, essayons à nouveau.
‫Encore une fois, cela supprimera tous ces signes dollar.
‫Donc, si je le fais maintenant, alors
‫effectivement, nous obtenons cette erreur,
‫et nous ne pouvons plus utiliser cette
‫astuce ici, cette attaque par injection de requête, pour nous connecter.
‫Donc, cela résout le premier problème, mais
‫maintenant utilisons cet autre
‫middleware dont nous avions également besoin auparavant.
‫Alors, app. utiliser et XSS, d'accord ?
‫Cela nettoiera ensuite toute entrée
‫d'utilisateur du code HTML malveillant, essentiellement.
‫Imaginez qu'un attaquant essaie d'insérer du
‫code HTML malveillant auquel
‫est attaché du code JavaScript.
‫Si cela devait ensuite être injecté dans notre site HTML, cela
‫pourrait alors vraiment créer des dommages.
‫En utilisant ce middleware, nous
‫empêchons cela essentiellement en convertissant tous ces symboles HTML.
‫Comme je l'ai dit précédemment, la validation Mongoose
‫elle-même est en fait déjà une très bonne protection contre XSS, car elle
‫ne permettra pas vraiment à des
‫trucs fous d'entrer dans notre base de données,
‫tant que nous l'utilisons correctement.
‫Chaque fois que vous le pouvez, ajoutez simplement
‫une validation à vos schémas Mongoose, et
‫cela devrait principalement vous protéger des scripts intersites, du moins côté serveur.
‫Testons également très rapidement ce middleware ici.
‫Ce que je vais faire, c'est simplement créer un
‫nouvel utilisateur, et appelons-le "testeur" ici ou quelque chose comme ça.
‫Le mot de passe est correct, et
‫ici, dans le nom, ajoutons du code HTML.
‫Donc, div avec l'identifiant du mauvais code.
‫Très bien, essayons ça maintenant.
‫Vous voyez que le module XSS que nous
‫avons utilisé a en fait converti
‫ces symboles HTML ici, principalement celui-ci, en cette entité HTML ici.
‫Supprimons rapidement ce type.
‫Nous n'avons pas du tout besoin de lui. (Rires) C'est notre
‫protection rapide et facile contre certaines de ces
‫attaques en utilisant la désinfection des données.
‫N'oubliez pas non plus que la bibliothèque de fonctions de
‫validation que nous avons utilisée auparavant
‫contient également quelques fonctions de désinfection intéressantes.
‫Nous pourrions également créer manuellement des middleware à l'aide de
‫ceux-ci, mais encore une fois,
‫ce n'est pas vraiment nécessaire, car Mongoose applique déjà un schéma strict.
‫Ensuite, s'il rencontre quelque chose
‫d'étrange, il générera alors une erreur, et
‫oui, c'est déjà une assez bonne protection.
‫Donc, nous avons vraiment presque fini avec la partie sécurité.
‫Tout ce que nous devons faire
‫dans la vidéo suivante est d'empêcher la pollution des paramètres.