﻿1
00:00:01,004 --> 00:00:02,610
‫- : Dans cette

2
00:00:02,610 --> 00:00:06,690
‫conférence, nous allons utiliser deux autres packages pour améliorer la sécurité de notre

3
00:00:06,690 --> 00:00:09,823
‫application, et cette fois pour effectuer la désinfection des données.

4
00:00:11,290 --> 00:00:13,630
‫Ainsi, la désinfection des données signifie essentiellement

5
00:00:13,630 --> 00:00:15,560
‫de nettoyer toutes les

6
00:00:15,560 --> 00:00:18,313
‫données qui entrent dans l'application du code malveillant.

7
00:00:19,228 --> 00:00:22,053
‫Donc, du code qui essaie d'attaquer notre application.

8
00:00:22,930 --> 00:00:26,660
‫Dans ce cas, nous essayons de nous défendre contre deux attaques.

9
00:00:26,660 --> 00:00:30,240
‫Alors, écrivons-le, et nous le

10
00:00:30,240 --> 00:00:34,073
‫ferons, disons, juste ici après l'analyseur corporel.

11
00:00:35,039 --> 00:00:37,400
‫Ce middleware lit ici les données

12
00:00:37,400 --> 00:00:40,140
‫dans la requête. corps, et seulement après

13
00:00:40,140 --> 00:00:42,890
‫cela, nous pouvons réellement nettoyer ces données, n'est-ce pas ?

14
00:00:42,890 --> 00:00:46,860
‫C'est un endroit parfait pour faire la désinfection des données.

15
00:00:46,860 --> 00:00:51,860
‫Ainsi, nous procéderons à la désinfection des données contre

16
00:00:55,190 --> 00:01:00,190
‫l'injection de requêtes NoSQL, ainsi qu'à la désinfection des

17
00:01:05,620 --> 00:01:09,560
‫données contre les attaques de scripts intersites.

18
00:01:09,560 --> 00:01:11,670
‫Et maintenant, avant de faire quoi

19
00:01:11,670 --> 00:01:14,600
‫que ce soit d'autre, laissez-moi vous montrer pourquoi il

20
00:01:14,600 --> 00:01:17,733
‫est si important de se défendre contre ce type d'attaque.

21
00:01:19,010 --> 00:01:22,200
‫Nous allons maintenant simuler une injection de requête NoSQL et j'espère

22
00:01:22,200 --> 00:01:25,620
‫que vous serez aussi choqué que moi lorsque j'ai découvert pour la

23
00:01:25,620 --> 00:01:28,263
‫première fois à quel point cela peut être puissant.

24
00:01:29,820 --> 00:01:32,570
‫Passons maintenant à Postman ici et essayons de

25
00:01:32,570 --> 00:01:34,810
‫vous connecter en tant que

26
00:01:34,810 --> 00:01:37,400
‫personne, même sans connaître son adresse e-mail.

27
00:01:37,400 --> 00:01:41,853
‫D'accord, donc en gros, en donnant simplement un mot de passe,

28
00:01:42,800 --> 00:01:46,070
‫disons celui-ci ici, nous pourrons nous connecter, mais

29
00:01:46,070 --> 00:01:48,603
‫même sans connaître l'adresse e-mail.

30
00:01:49,750 --> 00:01:51,310
‫Encore une fois, nous

31
00:01:51,310 --> 00:01:54,480
‫allons le faire en simulant une injection de requête NoSQL,

32
00:01:54,480 --> 00:01:57,840
‫et la façon la plus simple de le faire est celle-ci.

33
00:01:57,840 --> 00:02:00,530
‫Au lieu de spécifier un

34
00:02:00,530 --> 00:02:03,933
‫véritable e-mail, nous spécifions cette requête, essentiellement.

35
00:02:06,450 --> 00:02:10,010
‫Nous utilisons l'opérateur MongoDB supérieur à

36
00:02:10,010 --> 00:02:13,770
‫et le définissons égal à rien, d'accord ?

37
00:02:13,770 --> 00:02:15,963
‫Et maintenant, que se passe-t-il ?

38
00:02:17,810 --> 00:02:21,810
‫En effet, nous sommes maintenant connecté en tant qu'administrateur.

39
00:02:21,810 --> 00:02:24,673
‫Donc, vous voyez, nous avons même obtenu notre jeton d'accès.

40
00:02:25,590 --> 00:02:28,550
‫Ouais, nous sommes vraiment maintenant connectés, et

41
00:02:28,550 --> 00:02:30,873
‫ça m'épate complètement, d'accord ?

42
00:02:31,870 --> 00:02:33,940
‫Encore une fois, sans connaître l'adresse

43
00:02:33,940 --> 00:02:37,390
‫e-mail, seul le mot de passe, nous avons pu nous connecter.

44
00:02:37,390 --> 00:02:39,540
‫Et croyez-moi, il n'est pas vraiment difficile

45
00:02:39,540 --> 00:02:42,840
‫de trouver un tas de mots de passe très populaires qui

46
00:02:42,840 --> 00:02:44,693
‫sont utilisés sur chaque application.

47
00:02:46,198 --> 00:02:49,203
‫Donc, ce genre d'attaque est ce contre quoi nous devons nous protéger.

48
00:02:50,670 --> 00:02:54,913
‫Cela fonctionne essentiellement parce que ce sera toujours vrai, donc c'est en

49
00:02:55,940 --> 00:02:58,840
‫fait - vous le voyez également dans Compass.

50
00:02:58,840 --> 00:03:01,590
‫Alors je le copie, ou en fait, copions tout cela.

51
00:03:05,130 --> 00:03:08,313
‫Ensuite, essayez de filtrer par exactement la même chose.

52
00:03:09,460 --> 00:03:12,660
‫Il ne nous manque plus que les

53
00:03:12,660 --> 00:03:15,870
‫accolades, mais nous obtenons maintenant une requête valide.

54
00:03:15,870 --> 00:03:20,440
‫Frappons Rechercher, et en effet, cela renvoie tous les utilisateurs.

55
00:03:20,440 --> 00:03:24,033
‫Donc, fondamentalement, tous les utilisateurs correspondent à cette requête.

56
00:03:25,340 --> 00:03:28,540
‫Encore une fois, c'est parce que c'est toujours vrai ici.

57
00:03:28,540 --> 00:03:31,503
‫Cela sélectionnera alors tous les noms d'utilisateur.

58
00:03:33,330 --> 00:03:36,340
‫Cette injection de requête malveillante nous a permis

59
00:03:36,340 --> 00:03:40,760
‫de nous connecter en connaissant uniquement ce mot de passe, d'accord ?

60
00:03:40,760 --> 00:03:43,510
‫Donc, pour nous protéger contre cela,

61
00:03:43,510 --> 00:03:45,623
‫installons un autre

62
00:03:48,560 --> 00:03:52,953
‫middleware, et celui-ci s'appelle express-mongo-sanitize, et puisque nous sommes là,

63
00:03:59,680 --> 00:04:02,610
‫allons également de l'avant et installons l'autre

64
00:04:02,610 --> 00:04:04,900
‫dont nous aurons besoin, mais

65
00:04:04,900 --> 00:04:08,873
‫plus tard dans cette vidéo, qui s'appelle simplement XSS.

66
00:04:10,486 --> 00:04:14,603
‫En fait, ce n'était pas correct ; il s'appelle XSS_clean.

67
00:04:18,530 --> 00:04:22,760
‫Nous devons aller de l'avant et désinstaller l'autre.

68
00:04:22,760 --> 00:04:24,700
‫NPM désinstalle XSS.

69
00:04:29,308 --> 00:04:34,308
‫Jetons un coup d'œil à notre forfait. json, et effectivement c'est parti.

70
00:04:35,280 --> 00:04:38,743
‫Encore une fois, XSS_clean est celui que nous voulons utiliser.

71
00:04:42,150 --> 00:04:43,840
‫Quoi qu'il en soit, parlons

72
00:04:43,840 --> 00:04:45,923
‫à nouveau de l'injection de requête NoSQL.

73
00:04:48,040 --> 00:04:51,730
‫Tout ce que nous allons utiliser est -

74
00:04:51,730 --> 00:04:54,343
‫et bien sûr, nous devons

75
00:04:57,862 --> 00:05:02,695
‫d'abord l'exiger, donc const mongoSanitize est égal à exiger express-mongo-sanitize.

76
00:05:08,610 --> 00:05:12,790
‫Encore une fois, VS Code ici m'aide, et puisque nous sommes

77
00:05:12,790 --> 00:05:14,853
‫ici, exigeons également le suivant.

78
00:05:16,120 --> 00:05:18,763
‫La variable dont j'ai besoin

79
00:05:20,000 --> 00:05:23,947
‫s'appelle XSS, puis le nom du module est XSS_clean.

80
00:05:27,160 --> 00:05:32,103
‫Alors, utilisons maintenant ce mongoSanitize ici - ici même.

81
00:05:33,490 --> 00:05:36,450
‫MongoSanitize est une fonction que nous appellerons, qui renverra

82
00:05:36,450 --> 00:05:38,700
‫ensuite une fonction middleware, que nous

83
00:05:38,700 --> 00:05:40,110
‫pourrons ensuite utiliser.

84
00:05:40,110 --> 00:05:42,330
‫C'est suffisant pour nous prémunir contre le

85
00:05:42,330 --> 00:05:44,820
‫genre d'attaque que nous venons de voir avant.

86
00:05:44,820 --> 00:05:46,610
‫Donc, ce que fait ce middleware est

87
00:05:46,610 --> 00:05:49,900
‫de regarder le corps de la requête, la chaîne de requête de la

88
00:05:49,900 --> 00:05:52,640
‫requête, ainsi que la requête. Params, puis

89
00:05:52,640 --> 00:05:54,190
‫il filtrera essentiellement tous

90
00:05:54,190 --> 00:05:56,363
‫les signes et points du dollar,

91
00:05:57,410 --> 00:06:00,730
‫car c'est ainsi que les opérateurs MongoDB sont écrits.

92
00:06:00,730 --> 00:06:03,140
‫En supprimant ça, eh bien, ces opérateurs

93
00:06:03,140 --> 00:06:04,833
‫ne vont plus travailler.

94
00:06:05,830 --> 00:06:07,123
‫Alors, essayons à nouveau.

95
00:06:08,100 --> 00:06:12,003
‫Encore une fois, cela supprimera tous ces signes dollar.

96
00:06:13,712 --> 00:06:16,080
‫Donc, si je le fais maintenant, alors

97
00:06:16,080 --> 00:06:17,930
‫effectivement, nous obtenons cette erreur,

98
00:06:17,930 --> 00:06:20,270
‫et nous ne pouvons plus utiliser cette

99
00:06:20,270 --> 00:06:23,900
‫astuce ici, cette attaque par injection de requête, pour nous connecter.

100
00:06:23,900 --> 00:06:26,720
‫Donc, cela résout le premier problème, mais

101
00:06:26,720 --> 00:06:28,960
‫maintenant utilisons cet autre

102
00:06:28,960 --> 00:06:31,700
‫middleware dont nous avions également besoin auparavant.

103
00:06:31,700 --> 00:06:36,700
‫Alors, app. utiliser et XSS, d'accord ?

104
00:06:37,590 --> 00:06:39,870
‫Cela nettoiera ensuite toute entrée

105
00:06:39,870 --> 00:06:42,283
‫d'utilisateur du code HTML malveillant, essentiellement.

106
00:06:43,210 --> 00:06:45,780
‫Imaginez qu'un attaquant essaie d'insérer du

107
00:06:45,780 --> 00:06:48,180
‫code HTML malveillant auquel

108
00:06:48,180 --> 00:06:50,620
‫est attaché du code JavaScript.

109
00:06:50,620 --> 00:06:54,090
‫Si cela devait ensuite être injecté dans notre site HTML, cela

110
00:06:54,090 --> 00:06:56,423
‫pourrait alors vraiment créer des dommages.

111
00:06:57,300 --> 00:06:59,710
‫En utilisant ce middleware, nous

112
00:06:59,710 --> 00:07:03,063
‫empêchons cela essentiellement en convertissant tous ces symboles HTML.

113
00:07:04,380 --> 00:07:07,040
‫Comme je l'ai dit précédemment, la validation Mongoose

114
00:07:07,040 --> 00:07:10,937
‫elle-même est en fait déjà une très bonne protection contre XSS, car elle

115
00:07:12,230 --> 00:07:14,170
‫ne permettra pas vraiment à des

116
00:07:14,170 --> 00:07:16,730
‫trucs fous d'entrer dans notre base de données,

117
00:07:16,730 --> 00:07:18,613
‫tant que nous l'utilisons correctement.

118
00:07:19,480 --> 00:07:22,320
‫Chaque fois que vous le pouvez, ajoutez simplement

119
00:07:22,320 --> 00:07:25,037
‫une validation à vos schémas Mongoose, et

120
00:07:25,037 --> 00:07:29,290
‫cela devrait principalement vous protéger des scripts intersites, du moins côté serveur.

121
00:07:29,290 --> 00:07:33,083
‫Testons également très rapidement ce middleware ici.

122
00:07:34,990 --> 00:07:38,333
‫Ce que je vais faire, c'est simplement créer un

123
00:07:39,960 --> 00:07:43,573
‫nouvel utilisateur, et appelons-le "testeur" ici ou quelque chose comme ça.

124
00:07:44,500 --> 00:07:47,420
‫Le mot de passe est correct, et

125
00:07:47,420 --> 00:07:50,403
‫ici, dans le nom, ajoutons du code HTML.

126
00:07:51,480 --> 00:07:56,480
‫Donc, div avec l'identifiant du mauvais code.

127
00:08:00,470 --> 00:08:02,503
‫Très bien, essayons ça maintenant.

128
00:08:06,790 --> 00:08:10,310
‫Vous voyez que le module XSS que nous

129
00:08:10,310 --> 00:08:13,263
‫avons utilisé a en fait converti

130
00:08:14,190 --> 00:08:19,163
‫ces symboles HTML ici, principalement celui-ci, en cette entité HTML ici.

131
00:08:21,440 --> 00:08:24,130
‫Supprimons rapidement ce type.

132
00:08:24,130 --> 00:08:27,593
‫Nous n'avons pas du tout besoin de lui. (Rires) C'est notre

133
00:08:29,556 --> 00:08:33,300
‫protection rapide et facile contre certaines de ces

134
00:08:33,300 --> 00:08:36,293
‫attaques en utilisant la désinfection des données.

135
00:08:37,280 --> 00:08:40,460
‫N'oubliez pas non plus que la bibliothèque de fonctions de

136
00:08:40,460 --> 00:08:42,770
‫validation que nous avons utilisée auparavant

137
00:08:42,770 --> 00:08:45,123
‫contient également quelques fonctions de désinfection intéressantes.

138
00:08:45,980 --> 00:08:49,820
‫Nous pourrions également créer manuellement des middleware à l'aide de

139
00:08:49,820 --> 00:08:51,820
‫ceux-ci, mais encore une fois,

140
00:08:51,820 --> 00:08:55,890
‫ce n'est pas vraiment nécessaire, car Mongoose applique déjà un schéma strict.

141
00:08:55,890 --> 00:08:58,250
‫Ensuite, s'il rencontre quelque chose

142
00:08:58,250 --> 00:09:00,870
‫d'étrange, il générera alors une erreur, et

143
00:09:00,870 --> 00:09:03,290
‫oui, c'est déjà une assez bonne protection.

144
00:09:03,290 --> 00:09:06,240
‫Donc, nous avons vraiment presque fini avec la partie sécurité.

145
00:09:06,240 --> 00:09:07,740
‫Tout ce que nous devons faire

146
00:09:07,740 --> 00:09:10,163
‫dans la vidéo suivante est d'empêcher la pollution des paramètres.

