﻿1
00:00:01,140 --> 00:00:04,000
‫Instructor: En esta lección, implementemos la limitación de

2
00:00:04,000 --> 00:00:06,120
‫velocidad para evitar que la

3
00:00:06,120 --> 00:00:09,130
‫misma IP realice demasiadas solicitudes a nuestra API

4
00:00:09,130 --> 00:00:11,730
‫y eso nos ayudará a prevenir ataques

5
00:00:11,730 --> 00:00:14,893
‫como denegación de servicio o ataques de fuerza bruta.

6
00:00:16,470 --> 00:00:19,230
‫Entonces, ese limitador de velocidad se implementará

7
00:00:19,230 --> 00:00:21,920
‫como una función de middleware global.

8
00:00:21,920 --> 00:00:24,830
‫Entonces, básicamente, lo que va a hacer el limitador

9
00:00:24,830 --> 00:00:28,490
‫de velocidad es contar la cantidad de solicitudes provenientes de una

10
00:00:28,490 --> 00:00:30,249
‫IP y luego, cuando

11
00:00:30,249 --> 00:00:32,970
‫hay demasiadas solicitudes, bloquear estas solicitudes, ¿de acuerdo?

12
00:00:32,970 --> 00:00:35,400
‫Entonces tiene sentido implementar eso en un middleware

13
00:00:35,400 --> 00:00:39,901
‫global, entonces, lo hacemos en la aplicación. js.

14
00:00:39,901 --> 00:00:43,410
‫Entonces, no hemos usado este en mucho tiempo, y

15
00:00:43,410 --> 00:00:45,550
‫el limitador de velocidad que

16
00:00:45,550 --> 00:00:49,430
‫vamos a usar es un paquete npm llamado Express Rate Limit.

17
00:00:49,430 --> 00:00:50,803
‫Así que instalemos eso.

18
00:00:52,800 --> 00:00:57,800
‫npm i express-rate-limit, de acuerdo.

19
00:01:01,770 --> 00:01:04,853
‫Y luego, aquí en la parte superior de

20
00:01:08,440 --> 00:01:12,430
‫nuestra aplicación, llamémoslo rateLimit y luego requerimos el expreso y

21
00:01:13,329 --> 00:01:17,400
‫en realidad ya está aquí. Entonces, el código VS toma este

22
00:01:17,400 --> 00:01:21,440
‫nombre de nuestro paquete. json archivo.

23
00:01:21,440 --> 00:01:23,660
‫De acuerdo, y este nombre que

24
00:01:23,660 --> 00:01:26,320
‫le di aquí generalmente proviene de la documentación.

25
00:01:26,320 --> 00:01:28,760
‫Entonces, si lo hacen así en la

26
00:01:28,760 --> 00:01:32,340
‫documentación, bueno, entonces esa es la forma que yo sigo también.

27
00:01:32,340 --> 00:01:34,503
‫Bien, ahora usemos este middleware

28
00:01:34,503 --> 00:01:37,990
‫aquí en la parte superior de nuestros middlewares globales,

29
00:01:37,990 --> 00:01:39,940
‫escribamos eso aquí, global.

30
00:01:41,190 --> 00:01:44,693
‫Y empezamos creando un limitador.

31
00:01:48,520 --> 00:01:51,410
‫Entonces limitador, y lo hacemos llamando

32
00:01:51,410 --> 00:01:55,260
‫a la función rateLimit que acabamos de definir allí.

33
00:01:55,260 --> 00:01:58,000
‫Entonces, rateLimit es una función que

34
00:01:58,000 --> 00:02:01,090
‫recibe un objeto de opciones, ¿de acuerdo?

35
00:02:01,090 --> 00:02:03,080
‫Y aquí, básicamente, podemos

36
00:02:03,080 --> 00:02:06,230
‫definir cuántas solicitudes por IP vamos a permitir

37
00:02:06,230 --> 00:02:08,250
‫en un cierto período de tiempo.

38
00:02:08,250 --> 00:02:11,900
‫Entonces podemos especificar la propiedad max, que voy

39
00:02:11,900 --> 00:02:16,200
‫a establecer en 100, y luego también la ventana, entonces

40
00:02:16,200 --> 00:02:19,070
‫la ventana de tiempo, ¿de acuerdo?

41
00:02:19,070 --> 00:02:21,260
‫Entonces, lo que quiero permitir aquí es

42
00:02:21,260 --> 00:02:23,380
‫básicamente, 100 solicitudes por hora.

43
00:02:23,380 --> 00:02:27,360
‫Y esto aquí en realidad se llama milisegundos de ventana.

44
00:02:27,360 --> 00:02:31,323
‫De acuerdo, entonces queremos una hora, es

45
00:02:32,750 --> 00:02:37,720
‫decir, 60 minutos, por 60 por segundos, por 1,000 por milisegundos.

46
00:02:37,720 --> 00:02:40,520
‫Muy bien, de nuevo, lo que

47
00:02:40,520 --> 00:02:45,033
‫hará es permitir 100 solicitudes de la misma IP en una hora.

48
00:02:45,890 --> 00:02:48,210
‫De acuerdo, y si ese límite

49
00:02:48,210 --> 00:02:51,860
‫es cruzado por una determinada IP, recibirán un mensaje de error.

50
00:02:51,860 --> 00:02:54,603
‫Y aquí ahora podemos especificar ese mensaje.

51
00:02:58,550 --> 00:03:02,543
‫Demasiadas solicitudes de esta IP, inténtelo de

52
00:03:05,160 --> 00:03:10,160
‫nuevo en una hora, de acuerdo, así que necesitamos encontrar

53
00:03:10,320 --> 00:03:12,540
‫un equilibrio que

54
00:03:12,540 --> 00:03:14,980
‫funcione mejor para nuestra aplicación.

55
00:03:14,980 --> 00:03:16,900
‫Por ejemplo, si está creando

56
00:03:16,900 --> 00:03:20,250
‫una API, que realmente necesita muchas solicitudes para una IP, entonces,

57
00:03:20,250 --> 00:03:22,780
‫por supuesto, este número aquí debería ser mayor.

58
00:03:22,780 --> 00:03:25,770
‫Así que no sigas ciegamente lo que acabo de

59
00:03:25,770 --> 00:03:28,410
‫poner aquí, sino adáptalo a tu propia aplicación

60
00:03:28,410 --> 00:03:30,100
‫para que no lo

61
00:03:30,100 --> 00:03:32,173
‫inutilice debido a este limitador, ¿de acuerdo?

62
00:03:33,660 --> 00:03:37,480
‫De todos modos, este limitador que acabamos de crear es

63
00:03:37,480 --> 00:03:40,653
‫básicamente una función de middleware, ¿de acuerdo?

64
00:03:41,630 --> 00:03:44,320
‫Entonces, rateLimit es una función que, basada

65
00:03:44,320 --> 00:03:47,470
‫en nuestros objetos, creará una función de middleware, que

66
00:03:47,470 --> 00:03:52,223
‫ahora podemos usar usando app. Úselo como lo hicimos antes.

67
00:03:53,990 --> 00:03:56,490
‫Y podemos hacerlo simplemente así.

68
00:03:56,490 --> 00:03:58,450
‫Pero lo que realmente queremos es

69
00:03:58,450 --> 00:04:00,713
‫básicamente limitar el acceso a nuestra ruta API.

70
00:04:01,810 --> 00:04:04,050
‫Entonces, podemos especificar eso

71
00:04:04,050 --> 00:04:07,300
‫aquí, recuerde que podemos hacer eso con middleware.

72
00:04:07,300 --> 00:04:10,720
‫Entonces, básicamente queremos aplicar este limitador solo a

73
00:04:10,720 --> 00:04:13,370
‫una API de barra, ¿de acuerdo?

74
00:04:13,370 --> 00:04:15,700
‫Y eso afectará a todas las

75
00:04:15,700 --> 00:04:18,960
‫rutas que básicamente comienzan con esto, su aplicación, así

76
00:04:18,960 --> 00:04:21,615
‫que la API de barra diagonal, genial.

77
00:04:21,615 --> 00:04:25,140
‫Así que volvamos a nuestra pestaña principal aquí.

78
00:04:25,140 --> 00:04:29,140
‫Guárdelo, y ahora intentemos esto y hagámoslo aquí con

79
00:04:29,140 --> 00:04:31,330
‫el más simple, así

80
00:04:31,330 --> 00:04:35,850
‫que obtenga todos los recorridos, luego aquí está nuestro resultado y

81
00:04:35,850 --> 00:04:39,600
‫ahora lo que quiero mostrarles son estos encabezados aquí.

82
00:04:39,600 --> 00:04:42,720
‫Entonces, nuestro limitador de velocidad crea

83
00:04:42,720 --> 00:04:47,720
‫estos dos encabezados para que RateLimit-Limit y RateLimit-Remaining, ¿de acuerdo?

84
00:04:47,910 --> 00:04:50,870
‫Entonces comenzamos con 100 tal como lo

85
00:04:50,870 --> 00:04:53,130
‫definimos, y ahora nos

86
00:04:53,130 --> 00:04:56,666
‫queda 99, porque ya hicimos una solicitud, ¿verdad?

87
00:04:56,666 --> 00:05:00,000
‫Entonces, ¿qué pasa si hacemos otro?

88
00:05:00,000 --> 00:05:02,853
‫Hagámoslo con Get Tour, por ejemplo, y no

89
00:05:04,520 --> 00:05:06,550
‫hay tour con ese ID,

90
00:05:06,550 --> 00:05:08,890
‫pero eso no importa, lo que importa

91
00:05:08,890 --> 00:05:12,660
‫aquí es que el resto ahora se ha reducido a 98.

92
00:05:12,660 --> 00:05:15,010
‫Y si lo intentamos de

93
00:05:15,010 --> 00:05:19,210
‫nuevo, verá que ha bajado aún más a 97, ¿de acuerdo?

94
00:05:19,210 --> 00:05:21,620
‫Y de hecho aquí abajo, también tenemos el reinicio.

95
00:05:21,620 --> 00:05:25,990
‫Entonces, básicamente, la marca de tiempo donde se restablece, ¿está bien?

96
00:05:25,990 --> 00:05:28,833
‫Entonces esa ventana de una hora que especificamos antes.

97
00:05:29,760 --> 00:05:34,069
‫Bien, ahora, si entre esto, nuestra aplicación se reinicia, así

98
00:05:34,069 --> 00:05:37,410
‫que para hacer eso, simplemente guardaré.

99
00:05:37,410 --> 00:05:40,920
‫Veamos qué pasa entonces, está bien, así que lo enviaré

100
00:05:40,920 --> 00:05:43,200
‫de nuevo, y ahora estamos

101
00:05:43,200 --> 00:05:45,910
‫de regreso comenzando desde el principio básicamente.

102
00:05:45,910 --> 00:05:49,440
‫De acuerdo, nuestra aplicación no puede fallar durante este tiempo

103
00:05:49,440 --> 00:05:51,350
‫porque, de lo contrario,

104
00:05:51,350 --> 00:05:54,093
‫eso básicamente restablecerá el límite también, ¿de acuerdo?

105
00:05:55,260 --> 00:05:59,670
‫Ahora, intentemos ver el mensaje de error,

106
00:05:59,670 --> 00:06:04,670
‫así que reduciré este máximo a solo tres, ¿de acuerdo?

107
00:06:04,870 --> 00:06:09,370
‫Y guárdelo aquí, envíe esta solicitud, y en nuestros encabezados ahora

108
00:06:09,370 --> 00:06:10,790
‫vemos que

109
00:06:10,790 --> 00:06:14,610
‫solo nos quedan dos, probemos con otro y ahora

110
00:06:14,610 --> 00:06:18,190
‫queda cero, así que este probablemente fue el

111
00:06:18,190 --> 00:06:21,180
‫último, veamos el cuerpo, así que esta

112
00:06:21,180 --> 00:06:23,350
‫vez, todavía tengo datos, pero

113
00:06:23,350 --> 00:06:27,087
‫si ahora lo intentamos de nuevo, obtendremos un error.

114
00:06:27,087 --> 00:06:29,113
‫Muchas solicitudes de esta IP.

115
00:06:29,113 --> 00:06:31,190
‫Y luego establecerá automáticamente

116
00:06:31,190 --> 00:06:36,190
‫el código de estado en 429, lo que significa demasiadas solicitudes.

117
00:06:36,190 --> 00:06:39,560
‫De acuerdo, y nuevamente, esto nos ayudará a tratar

118
00:06:39,560 --> 00:06:43,810
‫de prevenir la denegación de servicio y también los ataques de fuerza

119
00:06:43,810 --> 00:06:46,270
‫bruta donde un atacante intenta

120
00:06:46,270 --> 00:06:48,877
‫adivinar la contraseña de algún usuario, básicamente

121
00:06:48,877 --> 00:06:51,900
‫usando como su nombre lo dice, fuerza bruta.

122
00:06:51,900 --> 00:06:54,644
‫Bien, eso es una limitación de API,

123
00:06:54,644 --> 00:06:57,030
‫bastante sencillo de implementar con este

124
00:06:57,030 --> 00:06:59,363
‫paquete Express Rate Limit.

