﻿1
00:00:01,140 --> 00:00:04,000
‫Istruttore: In questa lezione implementiamo la limitazione della

2
00:00:04,000 --> 00:00:06,120
‫velocità per evitare che lo

3
00:00:06,120 --> 00:00:09,130
‫stesso IP faccia troppe richieste alla nostra API

4
00:00:09,130 --> 00:00:11,730
‫e questo ci aiuterà a prevenire attacchi

5
00:00:11,730 --> 00:00:14,893
‫come denial of service o attacchi di forza bruta.

6
00:00:16,470 --> 00:00:19,230
‫Quindi, quel limitatore di velocità verrà implementato

7
00:00:19,230 --> 00:00:21,920
‫come una funzione middleware globale.

8
00:00:21,920 --> 00:00:24,830
‫Quindi, in pratica, ciò che farà il limitatore

9
00:00:24,830 --> 00:00:28,490
‫di velocità è contare il numero di richieste provenienti da

10
00:00:28,490 --> 00:00:30,249
‫un IP e poi,

11
00:00:30,249 --> 00:00:32,970
‫quando ci sono troppe richieste, bloccarle, ok?

12
00:00:32,970 --> 00:00:35,400
‫E quindi ha senso implementarlo in un

13
00:00:35,400 --> 00:00:39,901
‫middleware globale, quindi lo facciamo nell'app. js.

14
00:00:39,901 --> 00:00:43,410
‫Quindi, non lo usiamo da molto tempo e il

15
00:00:43,410 --> 00:00:45,550
‫limitatore di velocità che

16
00:00:45,550 --> 00:00:49,430
‫useremo è un pacchetto npm chiamato Express Rate Limit.

17
00:00:49,430 --> 00:00:50,803
‫Quindi installiamolo.

18
00:00:52,800 --> 00:00:57,800
‫npm i express-rate-limit, va bene.

19
00:01:01,770 --> 00:01:04,853
‫E poi, qui nella parte superiore della

20
00:01:08,440 --> 00:01:12,430
‫nostra applicazione, chiamiamola rateLimit e poi richiediamo l'espresso ed

21
00:01:13,329 --> 00:01:17,400
‫effettivamente è già qui Quindi il codice VS prende questo

22
00:01:17,400 --> 00:01:21,440
‫nome dal nostro pacchetto. json file.

23
00:01:21,440 --> 00:01:23,660
‫Ok, e questo nome che gli

24
00:01:23,660 --> 00:01:26,320
‫ho dato qui di solito deriva dalla documentazione.

25
00:01:26,320 --> 00:01:28,760
‫Quindi se lo fanno in questo modo nella

26
00:01:28,760 --> 00:01:32,340
‫documentazione, beh, allora questo è il modo in cui seguo anche io.

27
00:01:32,340 --> 00:01:34,503
‫Ok, ora usiamo questo middleware

28
00:01:34,503 --> 00:01:37,990
‫proprio qui in cima ai nostri middleware globali,

29
00:01:37,990 --> 00:01:39,940
‫scriviamolo qui, global.

30
00:01:41,190 --> 00:01:44,693
‫E iniziamo creando un limitatore.

31
00:01:48,520 --> 00:01:51,410
‫Quindi limitatore, e lo facciamo chiamando

32
00:01:51,410 --> 00:01:55,260
‫la funzione rateLimit che abbiamo appena definito lassù.

33
00:01:55,260 --> 00:01:58,000
‫Quindi rateLimit è una funzione

34
00:01:58,000 --> 00:02:01,090
‫che riceve un oggetto di opzioni, ok?

35
00:02:01,090 --> 00:02:03,080
‫E qui, possiamo

36
00:02:03,080 --> 00:02:06,230
‫sostanzialmente definire quante richieste per IP consentiremo in

37
00:02:06,230 --> 00:02:08,250
‫un certo lasso di tempo.

38
00:02:08,250 --> 00:02:11,900
‫Quindi possiamo specificare la proprietà max, che

39
00:02:11,900 --> 00:02:16,200
‫imposterò a 100, e poi anche la finestra,

40
00:02:16,200 --> 00:02:19,070
‫quindi la finestra temporale, ok?

41
00:02:19,070 --> 00:02:21,260
‫Quindi quello che voglio consentire qui

42
00:02:21,260 --> 00:02:23,380
‫è fondamentalmente, 100 richieste all'ora.

43
00:02:23,380 --> 00:02:27,360
‫E questo qui in realtà si chiama millisecondi di finestra.

44
00:02:27,360 --> 00:02:31,323
‫Ok, quindi vogliamo un'ora, quindi 60

45
00:02:32,750 --> 00:02:37,720
‫minuti, 60 per i secondi, 1000 per i millisecondi.

46
00:02:37,720 --> 00:02:40,520
‫Va bene, quindi di nuovo, ciò

47
00:02:40,520 --> 00:02:45,033
‫che farà è consentire 100 richieste dallo stesso IP in un'ora.

48
00:02:45,890 --> 00:02:48,210
‫Ok, e se quel limite viene

49
00:02:48,210 --> 00:02:51,860
‫poi superato da un certo IP, riceveranno un messaggio di errore.

50
00:02:51,860 --> 00:02:54,603
‫E qui possiamo ora specificare quel messaggio.

51
00:02:58,550 --> 00:03:02,543
‫Troppe richieste da questo IP, riprova tra

52
00:03:05,160 --> 00:03:10,160
‫un'ora, va bene, quindi abbiamo bisogno di trovare un

53
00:03:10,320 --> 00:03:12,540
‫equilibrio che funzioni

54
00:03:12,540 --> 00:03:14,980
‫meglio per la nostra applicazione.

55
00:03:14,980 --> 00:03:16,900
‫Ad esempio, se stai creando

56
00:03:16,900 --> 00:03:20,250
‫un'API, che ha davvero bisogno di molte richieste per un

57
00:03:20,250 --> 00:03:22,780
‫IP, ovviamente questo numero qui dovrebbe essere maggiore.

58
00:03:22,780 --> 00:03:25,770
‫Quindi non seguire ciecamente quello che ho appena messo

59
00:03:25,770 --> 00:03:28,410
‫qui, ma adattalo davvero alla tua applicazione in

60
00:03:28,410 --> 00:03:30,100
‫modo da non renderlo

61
00:03:30,100 --> 00:03:32,173
‫inutilizzabile a causa di questo limitatore, ok?

62
00:03:33,660 --> 00:03:37,480
‫Ad ogni modo, questo limitatore ora qui che abbiamo appena

63
00:03:37,480 --> 00:03:40,653
‫creato è fondamentalmente una funzione middleware, ok?

64
00:03:41,630 --> 00:03:44,320
‫Quindi, rateLimit è una funzione che, in

65
00:03:44,320 --> 00:03:47,470
‫base ai nostri oggetti, creerà una funzione middleware, che

66
00:03:47,470 --> 00:03:52,223
‫ora possiamo usare usando app. utilizzare proprio come abbiamo fatto prima.

67
00:03:53,990 --> 00:03:56,490
‫E possiamo farlo semplicemente così.

68
00:03:56,490 --> 00:03:58,450
‫Ma ciò che in realtà vogliamo

69
00:03:58,450 --> 00:04:00,713
‫è sostanzialmente limitare l'accesso al nostro percorso API.

70
00:04:01,810 --> 00:04:04,050
‫Quindi, possiamo specificarlo qui,

71
00:04:04,050 --> 00:04:07,300
‫ricorda che possiamo farlo con il middleware.

72
00:04:07,300 --> 00:04:10,720
‫Quindi, fondamentalmente vogliamo applicare questo limitatore solo

73
00:04:10,720 --> 00:04:13,370
‫a un'API slash, ok?

74
00:04:13,370 --> 00:04:15,700
‫E quindi ciò influenzerà tutti i

75
00:04:15,700 --> 00:04:18,960
‫percorsi che fondamentalmente iniziano con questo, la tua app in

76
00:04:18,960 --> 00:04:21,615
‫modo che l'API slash in avanti, fantastico.

77
00:04:21,615 --> 00:04:25,140
‫Quindi torniamo alla nostra scheda principale qui.

78
00:04:25,140 --> 00:04:29,140
‫Dagli un salvataggio, e ora proviamo questo e facciamolo qui

79
00:04:29,140 --> 00:04:31,330
‫con il più semplice,

80
00:04:31,330 --> 00:04:35,850
‫quindi prendi tutti i tour, quindi ecco il nostro risultato e

81
00:04:35,850 --> 00:04:39,600
‫ora quello che voglio mostrarti sono queste intestazioni qui.

82
00:04:39,600 --> 00:04:42,720
‫Quindi il nostro limitatore di

83
00:04:42,720 --> 00:04:47,720
‫velocità crea queste due intestazioni, quindi RateLimit-Limit e RateLimit-Remaining, ok?

84
00:04:47,910 --> 00:04:50,870
‫Quindi iniziamo con 100 proprio come abbiamo

85
00:04:50,870 --> 00:04:53,130
‫definito, e ora ci

86
00:04:53,130 --> 00:04:56,666
‫rimane, 99, perché abbiamo già fatto una richiesta, giusto?

87
00:04:56,666 --> 00:05:00,000
‫Quindi cosa succede se ne facciamo un altro?

88
00:05:00,000 --> 00:05:02,853
‫Facciamolo con Get Tour, per esempio, e

89
00:05:04,520 --> 00:05:06,550
‫non c'è tour con

90
00:05:06,550 --> 00:05:08,890
‫quell'ID, ma non importa, ciò che

91
00:05:08,890 --> 00:05:12,660
‫importa qui è che il rimanente è sceso a 98.

92
00:05:12,660 --> 00:05:15,010
‫E se ci

93
00:05:15,010 --> 00:05:19,210
‫riproviamo, vedrai che scende ancora a 97, ok?

94
00:05:19,210 --> 00:05:21,620
‫E in realtà quaggiù, abbiamo anche il reset.

95
00:05:21,620 --> 00:05:25,990
‫Quindi fondamentalmente il timestamp in cui viene reimpostato va bene?

96
00:05:25,990 --> 00:05:28,833
‫Quindi quella finestra di un'ora che abbiamo specificato prima.

97
00:05:29,760 --> 00:05:34,069
‫Ok, ora se nel frattempo la nostra app viene

98
00:05:34,069 --> 00:05:37,410
‫riavviata, quindi per farlo salverò semplicemente.

99
00:05:37,410 --> 00:05:40,920
‫Vediamo cosa succede poi, ok, quindi lo mando

100
00:05:40,920 --> 00:05:43,200
‫di nuovo, e quindi

101
00:05:43,200 --> 00:05:45,910
‫ora siamo tornati dall'inizio in pratica.

102
00:05:45,910 --> 00:05:49,440
‫Ok, quindi la nostra app non può bloccarsi durante questo

103
00:05:49,440 --> 00:05:51,350
‫periodo perché altrimenti, in

104
00:05:51,350 --> 00:05:54,093
‫pratica, anche questo ripristinerà il limite, ok?

105
00:05:55,260 --> 00:05:59,670
‫Ora, proviamo effettivamente a vedere il messaggio

106
00:05:59,670 --> 00:06:04,670
‫di errore, quindi ridurrò questo massimo a soli tre, ok?

107
00:06:04,870 --> 00:06:09,370
‫E salvalo qui, invia questa richiesta, e nelle nostre intestazioni ora

108
00:06:09,370 --> 00:06:10,790
‫vediamo che

109
00:06:10,790 --> 00:06:14,610
‫ne rimangono solo due, proviamone un altro e quindi ora

110
00:06:14,610 --> 00:06:18,190
‫ne rimane zero, quindi questo probabilmente era il nostro

111
00:06:18,190 --> 00:06:21,180
‫ultimo, vediamo il corpo, quindi questa volta,

112
00:06:21,180 --> 00:06:23,350
‫noi abbiamo ancora dei dati,

113
00:06:23,350 --> 00:06:27,087
‫ma se ora proviamo di nuovo, abbiamo un errore.

114
00:06:27,087 --> 00:06:29,113
‫Troppe richieste da questo IP.

115
00:06:29,113 --> 00:06:31,190
‫E poi imposterà automaticamente

116
00:06:31,190 --> 00:06:36,190
‫il codice di stato su 429, il che significa troppe richieste.

117
00:06:36,190 --> 00:06:39,560
‫Ok, e ancora una volta, questo ci aiuterà a cercare

118
00:06:39,560 --> 00:06:43,810
‫di prevenire la negazione del servizio e anche gli attacchi di forza

119
00:06:43,810 --> 00:06:46,270
‫bruta in cui un utente malintenzionato

120
00:06:46,270 --> 00:06:48,877
‫cerca di indovinare la password di qualche

121
00:06:48,877 --> 00:06:51,900
‫utente, fondamentalmente usando come dice il nome, forza bruta.

122
00:06:51,900 --> 00:06:54,644
‫Ok, questa è la limitazione dell'API,

123
00:06:54,644 --> 00:06:57,030
‫abbastanza semplice da implementare con questo

124
00:06:57,030 --> 00:06:59,363
‫pacchetto Express Rate Limit.

