﻿1
00:00:01,140 --> 00:00:04,000
‫Instructeur : Dans cette conférence, implémentons la limitation du débit

2
00:00:04,000 --> 00:00:06,120
‫afin d'empêcher la même adresse IP

3
00:00:06,120 --> 00:00:09,130
‫de faire trop de demandes à notre API et cela

4
00:00:09,130 --> 00:00:11,730
‫nous aidera ensuite à prévenir les attaques telles

5
00:00:11,730 --> 00:00:14,893
‫que le déni de service ou les attaques par force brute.

6
00:00:16,470 --> 00:00:19,230
‫Ainsi, ce limiteur de débit sera implémenté

7
00:00:19,230 --> 00:00:21,920
‫en tant que fonction middleware globale.

8
00:00:21,920 --> 00:00:24,830
‫Donc, en gros, ce que le limiteur de débit va

9
00:00:24,830 --> 00:00:28,490
‫faire, c'est de compter le nombre de requêtes provenant d'une IP, puis,

10
00:00:28,490 --> 00:00:30,249
‫quand il y a trop

11
00:00:30,249 --> 00:00:32,970
‫de requêtes, de bloquer ces requêtes, d'accord ?

12
00:00:32,970 --> 00:00:35,400
‫Et il est donc logique d'implémenter cela dans un

13
00:00:35,400 --> 00:00:39,901
‫middleware global, donc, nous le faisons dans l'application. js.

14
00:00:39,901 --> 00:00:43,410
‫Donc, nous n'avons pas utilisé celui-ci depuis longtemps, et

15
00:00:43,410 --> 00:00:45,550
‫le limiteur de débit que

16
00:00:45,550 --> 00:00:49,430
‫nous allons utiliser est un package npm appelé Express Rate Limit.

17
00:00:49,430 --> 00:00:50,803
‫Alors installons ça.

18
00:00:52,800 --> 00:00:57,800
‫npm i express-rate-limit, d'accord.

19
00:01:01,770 --> 00:01:04,853
‫Et puis, ici en haut de notre

20
00:01:08,440 --> 00:01:12,430
‫application, appelons-le rateLimit, puis demandons l'express et en fait,

21
00:01:13,329 --> 00:01:17,400
‫il est déjà là. Donc, le code VS récupère ce

22
00:01:17,400 --> 00:01:21,440
‫nom dans notre package. fichier json.

23
00:01:21,440 --> 00:01:23,660
‫D'accord, et ce nom que je

24
00:01:23,660 --> 00:01:26,320
‫lui ai donné ici vient généralement de la documentation.

25
00:01:26,320 --> 00:01:28,760
‫Donc s'ils le font comme ça dans

26
00:01:28,760 --> 00:01:32,340
‫la documentation, eh bien, c'est aussi la voie que je suis.

27
00:01:32,340 --> 00:01:34,503
‫D'accord, alors utilisons maintenant ce

28
00:01:34,503 --> 00:01:37,990
‫middleware ici au sommet de nos middlewares mondiaux,

29
00:01:37,990 --> 00:01:39,940
‫écrivons-le ici, global.

30
00:01:41,190 --> 00:01:44,693
‫Et on commence par créer un limiteur.

31
00:01:48,520 --> 00:01:51,410
‫Donc limiteur, et nous le faisons en

32
00:01:51,410 --> 00:01:55,260
‫appelant la fonction rateLimit que nous venons de définir là-haut.

33
00:01:55,260 --> 00:01:58,000
‫Donc rateLimit est une fonction

34
00:01:58,000 --> 00:02:01,090
‫qui reçoit un objet d'options, d'accord ?

35
00:02:01,090 --> 00:02:03,080
‫Et ici, nous pouvons essentiellement

36
00:02:03,080 --> 00:02:06,230
‫définir le nombre de requêtes par IP que nous allons

37
00:02:06,230 --> 00:02:08,250
‫autoriser dans un certain laps de temps.

38
00:02:08,250 --> 00:02:11,900
‫Nous pouvons donc spécifier la propriété max, que

39
00:02:11,900 --> 00:02:16,200
‫je vais définir sur 100, puis également la fenêtre, donc

40
00:02:16,200 --> 00:02:19,070
‫la fenêtre de temps, d'accord ?

41
00:02:19,070 --> 00:02:21,260
‫Donc, ce que je veux autoriser ici,

42
00:02:21,260 --> 00:02:23,380
‫c'est essentiellement 100 requêtes par heure.

43
00:02:23,380 --> 00:02:27,360
‫Et cela s'appelle en fait des millisecondes de fenêtre.

44
00:02:27,360 --> 00:02:31,323
‫D'accord, et donc nous voulons une heure donc 60

45
00:02:32,750 --> 00:02:37,720
‫minutes, fois 60 pour les secondes, fois 1 000 pour les millisecondes.

46
00:02:37,720 --> 00:02:40,520
‫D'accord, encore une fois, cela permettra

47
00:02:40,520 --> 00:02:45,033
‫d'autoriser 100 requêtes de la même adresse IP en une heure.

48
00:02:45,890 --> 00:02:48,210
‫D'accord, et si cette limite est

49
00:02:48,210 --> 00:02:51,860
‫ensuite franchie par une certaine IP, ils recevront un message d'erreur.

50
00:02:51,860 --> 00:02:54,603
‫Et ici, nous pouvons maintenant spécifier ce message.

51
00:02:58,550 --> 00:03:02,543
‫Trop de demandes de cette adresse IP, veuillez réessayer

52
00:03:05,160 --> 00:03:10,160
‫dans une heure, d'accord, nous devons donc en quelque sorte trouver

53
00:03:10,320 --> 00:03:12,540
‫un équilibre qui fonctionne

54
00:03:12,540 --> 00:03:14,980
‫le mieux pour notre application.

55
00:03:14,980 --> 00:03:16,900
‫Par exemple, si vous construisez une

56
00:03:16,900 --> 00:03:20,250
‫API, qui a vraiment besoin de beaucoup de demandes pour une adresse IP,

57
00:03:20,250 --> 00:03:22,780
‫alors bien sûr, ce nombre ici devrait être plus grand.

58
00:03:22,780 --> 00:03:25,770
‫Alors ne suivez pas aveuglément ce que je viens de mettre

59
00:03:25,770 --> 00:03:28,410
‫ici, mais adaptez-le vraiment à votre propre application pour

60
00:03:28,410 --> 00:03:30,100
‫ne pas le rendre inutilisable

61
00:03:30,100 --> 00:03:32,173
‫à cause de ce limiteur, d'accord ?

62
00:03:33,660 --> 00:03:37,480
‫Quoi qu'il en soit, ce limiteur que nous venons de

63
00:03:37,480 --> 00:03:40,653
‫créer est fondamentalement une fonction middleware, d'accord ?

64
00:03:41,630 --> 00:03:44,320
‫Ainsi, rateLimit est une fonction qui, en fonction

65
00:03:44,320 --> 00:03:47,470
‫de nos objets, créera une fonction middleware, que nous pouvons

66
00:03:47,470 --> 00:03:52,223
‫désormais utiliser à l'aide de app. utiliser comme nous le faisions avant.

67
00:03:53,990 --> 00:03:56,490
‫Et nous pouvons le faire simplement comme ça.

68
00:03:56,490 --> 00:03:58,450
‫Mais ce que nous voulons en

69
00:03:58,450 --> 00:04:00,713
‫fait, c'est limiter l'accès à notre route API.

70
00:04:01,810 --> 00:04:04,050
‫Donc, nous pouvons spécifier cela ici,

71
00:04:04,050 --> 00:04:07,300
‫rappelez-vous que nous pouvons le faire avec un middleware.

72
00:04:07,300 --> 00:04:10,720
‫Et donc, nous voulons essentiellement appliquer ce limiteur uniquement

73
00:04:10,720 --> 00:04:13,370
‫à une API slash, d'accord ?

74
00:04:13,370 --> 00:04:15,700
‫Et donc cela affectera ensuite

75
00:04:15,700 --> 00:04:18,960
‫toutes les routes qui commencent essentiellement par cela, votre

76
00:04:18,960 --> 00:04:21,615
‫application, donc l'API de barre oblique, super.

77
00:04:21,615 --> 00:04:25,140
‫Revenons donc à notre onglet principal ici.

78
00:04:25,140 --> 00:04:29,140
‫Sauvegardez-le, et maintenant essayons cela et faisons-le ici avec le

79
00:04:29,140 --> 00:04:31,330
‫plus simple, alors obtenez

80
00:04:31,330 --> 00:04:35,850
‫toutes les visites, puis voici notre résultat et maintenant ce que

81
00:04:35,850 --> 00:04:39,600
‫je veux vous montrer, ce sont ces en-têtes ici.

82
00:04:39,600 --> 00:04:42,720
‫Donc, notre limiteur de débit crée

83
00:04:42,720 --> 00:04:47,720
‫ces deux en-têtes donc le RateLimit-Limit et le RateLimit-Remaining, d'accord ?

84
00:04:47,910 --> 00:04:50,870
‫Nous commençons donc avec 100 comme nous l'avons défini,

85
00:04:50,870 --> 00:04:53,130
‫et maintenant il nous en reste

86
00:04:53,130 --> 00:04:56,666
‫99, car nous avons déjà fait une demande, n'est-ce pas ?

87
00:04:56,666 --> 00:05:00,000
‫Alors, que se passe-t-il si nous en faisons un autre ?

88
00:05:00,000 --> 00:05:02,853
‫Faisons-le avec Get Tour, par exemple, et il n'y

89
00:05:04,520 --> 00:05:06,550
‫a pas de tournée avec

90
00:05:06,550 --> 00:05:08,890
‫cet identifiant, mais cela n'a pas d'importance,

91
00:05:08,890 --> 00:05:12,660
‫ce qui compte ici, c'est que le reste est maintenant à 98.

92
00:05:12,660 --> 00:05:15,010
‫Et si nous l'essayons à nouveau,

93
00:05:15,010 --> 00:05:19,210
‫alors vous verrez que c'est encore plus bas jusqu'à 97, d'accord ?

94
00:05:19,210 --> 00:05:21,620
‫Et en fait, ici, nous avons aussi la réinitialisation.

95
00:05:21,620 --> 00:05:25,990
‫Donc, fondamentalement, l'horodatage où il est réinitialisé, d'accord ?

96
00:05:25,990 --> 00:05:28,833
‫Donc cette fenêtre d'une heure que nous avons spécifiée auparavant.

97
00:05:29,760 --> 00:05:34,069
‫Bon, maintenant, si entre-temps, notre application est redémarrée, donc pour

98
00:05:34,069 --> 00:05:37,410
‫ce faire, je vais simplement sauvegarder.

99
00:05:37,410 --> 00:05:40,920
‫Voyons ce qui se passe alors, d'accord, donc je

100
00:05:40,920 --> 00:05:43,200
‫l'envoie à nouveau, et donc

101
00:05:43,200 --> 00:05:45,910
‫maintenant nous repartons du début en gros.

102
00:05:45,910 --> 00:05:49,440
‫D'accord, notre application ne peut donc pas planter pendant

103
00:05:49,440 --> 00:05:51,350
‫ce temps car sinon,

104
00:05:51,350 --> 00:05:54,093
‫cela réinitialisera également la limite, d'accord ?

105
00:05:55,260 --> 00:05:59,670
‫Maintenant, essayons en fait de voir le message d'erreur,

106
00:05:59,670 --> 00:06:04,670
‫et je vais donc réduire ce maximum à trois, d'accord ?

107
00:06:04,870 --> 00:06:09,370
‫Et enregistrez-le ici, envoyez cette demande, et dans nos en-têtes, nous

108
00:06:09,370 --> 00:06:10,790
‫voyons maintenant

109
00:06:10,790 --> 00:06:14,610
‫qu'il n'en reste que deux, essayons-en un autre et

110
00:06:14,610 --> 00:06:18,190
‫maintenant il ne reste plus rien, donc c'était probablement

111
00:06:18,190 --> 00:06:21,180
‫notre dernier, voyons le corps, alors cette

112
00:06:21,180 --> 00:06:23,350
‫fois, nous toujours des données,

113
00:06:23,350 --> 00:06:27,087
‫mais si nous réessayons maintenant, nous avons une erreur.

114
00:06:27,087 --> 00:06:29,113
‫Roo de nombreuses demandes de cette IP.

115
00:06:29,113 --> 00:06:31,190
‫Et puis, il définira

116
00:06:31,190 --> 00:06:36,190
‫automatiquement le code d'état sur 429, ce qui signifie trop de demandes.

117
00:06:36,190 --> 00:06:39,560
‫D'accord, et encore une fois, cela nous aidera à essayer

118
00:06:39,560 --> 00:06:43,810
‫d'empêcher le déni de service et les attaques par force brute où

119
00:06:43,810 --> 00:06:46,270
‫un attaquant essaie de deviner le

120
00:06:46,270 --> 00:06:48,877
‫mot de passe d'un utilisateur, essentiellement en

121
00:06:48,877 --> 00:06:51,900
‫utilisant, comme son nom l'indique, la force brute.

122
00:06:51,900 --> 00:06:54,644
‫D'accord, c'est donc une limitation de l'API,

123
00:06:54,644 --> 00:06:57,030
‫assez simple à mettre en œuvre avec

124
00:06:57,030 --> 00:06:59,363
‫ce package Express Rate Limit.

