﻿1
00:00:01,140 --> 00:00:04,000
‫Instrutor: Nesta aula, vamos implementar a limitação de

2
00:00:04,000 --> 00:00:06,120
‫taxa para evitar que o

3
00:00:06,120 --> 00:00:09,130
‫mesmo IP faça muitas solicitações à nossa API

4
00:00:09,130 --> 00:00:11,730
‫e isso nos ajudará a prevenir ataques

5
00:00:11,730 --> 00:00:14,893
‫como negação de serviço ou ataques de força bruta.

6
00:00:16,470 --> 00:00:19,230
‫Portanto, esse limitador de taxa será implementado

7
00:00:19,230 --> 00:00:21,920
‫como uma função de middleware global.

8
00:00:21,920 --> 00:00:24,830
‫Então, basicamente, o que o limitador de taxa

9
00:00:24,830 --> 00:00:28,490
‫fará, é contar o número de solicitações provenientes de um

10
00:00:28,490 --> 00:00:30,249
‫IP e então, quando

11
00:00:30,249 --> 00:00:32,970
‫houver muitas solicitações, bloquear essas solicitações, ok?

12
00:00:32,970 --> 00:00:35,400
‫E faz sentido implementar isso em um middleware

13
00:00:35,400 --> 00:00:39,901
‫global, então, fazemos isso no aplicativo. js.

14
00:00:39,901 --> 00:00:43,410
‫Então, não usamos este há muito tempo, e o

15
00:00:43,410 --> 00:00:45,550
‫limitador de taxa que

16
00:00:45,550 --> 00:00:49,430
‫vamos usar é um pacote npm chamado Express Rate Limit.

17
00:00:49,430 --> 00:00:50,803
‫Então vamos instalar isso.

18
00:00:52,800 --> 00:00:57,800
‫npm i limite de taxa expressa, certo.

19
00:01:01,770 --> 00:01:04,853
‫E então, aqui no topo de nosso aplicativo,

20
00:01:08,440 --> 00:01:12,430
‫vamos chamá-lo de rateLimit e, em seguida, exigir o expresso e,

21
00:01:13,329 --> 00:01:17,400
‫na verdade, ele já está aqui. Portanto, o código do VS obtém

22
00:01:17,400 --> 00:01:21,440
‫esse nome de nosso pacote. arquivo json.

23
00:01:21,440 --> 00:01:23,660
‫Ok, e este nome que

24
00:01:23,660 --> 00:01:26,320
‫dei aqui geralmente vem da documentação.

25
00:01:26,320 --> 00:01:28,760
‫Então, se eles fizerem assim na

26
00:01:28,760 --> 00:01:32,340
‫documentação, bem, esse é o caminho que eu sigo também.

27
00:01:32,340 --> 00:01:34,503
‫Ok, agora vamos usar este middleware

28
00:01:34,503 --> 00:01:37,990
‫bem aqui no topo de nossos middlewares globais, vamos

29
00:01:37,990 --> 00:01:39,940
‫escrever isso aqui, global.

30
00:01:41,190 --> 00:01:44,693
‫E começamos criando um limitador.

31
00:01:48,520 --> 00:01:51,410
‫Limitador, e fazemos isso chamando

32
00:01:51,410 --> 00:01:55,260
‫a função rateLimit que acabamos de definir lá.

33
00:01:55,260 --> 00:01:58,000
‫Então rateLimit é uma função

34
00:01:58,000 --> 00:02:01,090
‫que recebe um objeto de opções, ok?

35
00:02:01,090 --> 00:02:03,080
‫E aqui, podemos definir

36
00:02:03,080 --> 00:02:06,230
‫basicamente quantas solicitações por IP vamos permitir em

37
00:02:06,230 --> 00:02:08,250
‫um determinado período de tempo.

38
00:02:08,250 --> 00:02:11,900
‫Podemos especificar a propriedade max, que irei

39
00:02:11,900 --> 00:02:16,200
‫definir como 100, e também a janela, então

40
00:02:16,200 --> 00:02:19,070
‫a janela de tempo, certo?

41
00:02:19,070 --> 00:02:21,260
‫Então, o que eu quero permitir aqui

42
00:02:21,260 --> 00:02:23,380
‫é basicamente 100 solicitações por hora.

43
00:02:23,380 --> 00:02:27,360
‫E isso aqui na verdade é chamado de janela milissegundos.

44
00:02:27,360 --> 00:02:31,323
‫Ok, então queremos uma hora de 60

45
00:02:32,750 --> 00:02:37,720
‫minutos, vezes 60 para segundos, vezes 1.000 para milissegundos.

46
00:02:37,720 --> 00:02:40,520
‫Tudo bem, novamente, o que isso

47
00:02:40,520 --> 00:02:45,033
‫fará é permitir 100 solicitações do mesmo IP em uma hora.

48
00:02:45,890 --> 00:02:48,210
‫Ok, e se esse limite for

49
00:02:48,210 --> 00:02:51,860
‫ultrapassado por um determinado IP, eles receberão uma mensagem de erro.

50
00:02:51,860 --> 00:02:54,603
‫E aqui agora podemos especificar essa mensagem.

51
00:02:58,550 --> 00:03:02,543
‫Muitos pedidos deste IP, por favor, tente

52
00:03:05,160 --> 00:03:10,160
‫novamente em uma hora, certo, então precisamos encontrar um

53
00:03:10,320 --> 00:03:12,540
‫equilíbrio que funcione

54
00:03:12,540 --> 00:03:14,980
‫melhor para nossa aplicação.

55
00:03:14,980 --> 00:03:16,900
‫Por exemplo, se você está construindo

56
00:03:16,900 --> 00:03:20,250
‫uma API, que realmente precisa de muitas solicitações para um IP, então,

57
00:03:20,250 --> 00:03:22,780
‫é claro, esse número aqui deve ser maior.

58
00:03:22,780 --> 00:03:25,770
‫Portanto, não siga cegamente o que acabei de

59
00:03:25,770 --> 00:03:28,410
‫colocar aqui, mas adapte realmente ao seu próprio

60
00:03:28,410 --> 00:03:30,100
‫aplicativo para não inutilizá-lo

61
00:03:30,100 --> 00:03:32,173
‫por causa desse limitador, certo?

62
00:03:33,660 --> 00:03:37,480
‫Enfim, esse limitador que acabamos de criar é

63
00:03:37,480 --> 00:03:40,653
‫basicamente uma função de middleware, certo?

64
00:03:41,630 --> 00:03:44,320
‫Portanto, rateLimit é uma função que irá, com

65
00:03:44,320 --> 00:03:47,470
‫base em nossos objetos, criar uma função de middleware, que

66
00:03:47,470 --> 00:03:52,223
‫agora podemos usar usando o app. use exatamente como fizemos antes.

67
00:03:53,990 --> 00:03:56,490
‫E podemos fazer isso simplesmente assim.

68
00:03:56,490 --> 00:03:58,450
‫Mas o que realmente queremos é

69
00:03:58,450 --> 00:04:00,713
‫basicamente limitar o acesso à nossa rota de API.

70
00:04:01,810 --> 00:04:04,050
‫Portanto, podemos especificar isso aqui,

71
00:04:04,050 --> 00:04:07,300
‫lembre-se de que podemos fazer isso com middleware.

72
00:04:07,300 --> 00:04:10,720
‫E então, basicamente queremos aplicar este limitador apenas

73
00:04:10,720 --> 00:04:13,370
‫a uma API de barra, ok?

74
00:04:13,370 --> 00:04:15,700
‫E isso afetará todas as

75
00:04:15,700 --> 00:04:18,960
‫rotas que basicamente começam com isso, seu aplicativo,

76
00:04:18,960 --> 00:04:21,615
‫então a API de barra, ótimo.

77
00:04:21,615 --> 00:04:25,140
‫Então, vamos voltar à nossa guia principal aqui.

78
00:04:25,140 --> 00:04:29,140
‫Salve e agora vamos tentar fazer isso aqui com o

79
00:04:29,140 --> 00:04:31,330
‫mais simples, então pegue todos

80
00:04:31,330 --> 00:04:35,850
‫os tours, aqui está o nosso resultado e agora o que

81
00:04:35,850 --> 00:04:39,600
‫eu quero mostrar a vocês são esses cabeçalhos aqui.

82
00:04:39,600 --> 00:04:42,720
‫Nosso limitador de taxa cria

83
00:04:42,720 --> 00:04:47,720
‫esses dois cabeçalhos, então o RateLimit-Limit e o RateLimit-Remaining, certo?

84
00:04:47,910 --> 00:04:50,870
‫Então começamos com 100 exatamente como

85
00:04:50,870 --> 00:04:53,130
‫definimos, e agora temos

86
00:04:53,130 --> 00:04:56,666
‫99 restantes, porque já fizemos uma solicitação, certo?

87
00:04:56,666 --> 00:05:00,000
‫Então, o que acontece se fizermos um outro?

88
00:05:00,000 --> 00:05:02,853
‫Vamos fazer com Get Tour, por exemplo, e

89
00:05:04,520 --> 00:05:06,550
‫não há tour com esse

90
00:05:06,550 --> 00:05:08,890
‫ID, mas isso não importa, o

91
00:05:08,890 --> 00:05:12,660
‫que importa aqui é que o restante agora caiu para 98.

92
00:05:12,660 --> 00:05:15,010
‫E se tentarmos novamente,

93
00:05:15,010 --> 00:05:19,210
‫você verá que caiu ainda mais para 97, certo?

94
00:05:19,210 --> 00:05:21,620
‫E aqui embaixo, também temos o reset.

95
00:05:21,620 --> 00:05:25,990
‫Então, basicamente, o carimbo de data / hora em que foi redefinido, certo?

96
00:05:25,990 --> 00:05:28,833
‫Para aquela janela de uma hora que especificamos antes.

97
00:05:29,760 --> 00:05:34,069
‫Ok, agora se entre isso nosso aplicativo for reiniciado,

98
00:05:34,069 --> 00:05:37,410
‫para fazer isso irei simplesmente salvar.

99
00:05:37,410 --> 00:05:40,920
‫Vamos ver o que acontece então, ok, estou

100
00:05:40,920 --> 00:05:43,200
‫enviando novamente, e agora estamos

101
00:05:43,200 --> 00:05:45,910
‫de volta, basicamente começando do início.

102
00:05:45,910 --> 00:05:49,440
‫Ok, então nosso aplicativo não pode travar durante esse

103
00:05:49,440 --> 00:05:51,350
‫tempo, porque do contrário,

104
00:05:51,350 --> 00:05:54,093
‫isso basicamente redefinirá o limite também, certo?

105
00:05:55,260 --> 00:05:59,670
‫Agora, vamos tentar ver a mensagem de

106
00:05:59,670 --> 00:06:04,670
‫erro e, portanto, reduzirei esse máximo para apenas três, certo?

107
00:06:04,870 --> 00:06:09,370
‫E salve aqui, envie esta solicitação, e em nossos cabeçalhos

108
00:06:09,370 --> 00:06:10,790
‫vemos que

109
00:06:10,790 --> 00:06:14,610
‫temos apenas dois restantes, vamos tentar outro e

110
00:06:14,610 --> 00:06:18,190
‫agora zero restante, então este provavelmente foi o

111
00:06:18,190 --> 00:06:21,180
‫nosso último, vamos ver o corpo,

112
00:06:21,180 --> 00:06:23,350
‫desta vez, nós ainda temos

113
00:06:23,350 --> 00:06:27,087
‫dados, mas se tentarmos novamente, teremos um erro.

114
00:06:27,087 --> 00:06:29,113
‫Roo muitos pedidos deste IP.

115
00:06:29,113 --> 00:06:31,190
‫Em seguida, ele definirá

116
00:06:31,190 --> 00:06:36,190
‫automaticamente o código de status para 429, o que significa muitas solicitações.

117
00:06:36,190 --> 00:06:39,560
‫Ok, e novamente, isso nos ajudará a tentar

118
00:06:39,560 --> 00:06:43,810
‫prevenir a negação de serviço e também ataques de força bruta

119
00:06:43,810 --> 00:06:46,270
‫onde um invasor tenta adivinhar

120
00:06:46,270 --> 00:06:48,877
‫a senha de algum usuário, basicamente

121
00:06:48,877 --> 00:06:51,900
‫usando como o nome diz, força bruta.

122
00:06:51,900 --> 00:06:54,644
‫Ok, isso é uma limitação da API,

123
00:06:54,644 --> 00:06:57,030
‫bastante simples de implementar com este

124
00:06:57,030 --> 00:06:59,363
‫pacote Express Rate Limit.

