﻿1
00:00:01,210 --> 00:00:04,340
‫Narrador: Bienvenido al último video de esta sección.

2
00:00:04,340 --> 00:00:05,610
‫Y en

3
00:00:05,610 --> 00:00:07,880
‫este, vamos a prevenir la contaminación

4
00:00:07,880 --> 00:00:10,593
‫de parámetros, usando otro paquete de NPM.

5
00:00:12,270 --> 00:00:15,400
‫Pero antes de instalar ese paquete, sigamos adelante

6
00:00:15,400 --> 00:00:17,780
‫y echemos un vistazo al error.

7
00:00:17,780 --> 00:00:20,820
‫Pero antes de hacer eso, vayamos a Postman y

8
00:00:20,820 --> 00:00:22,290
‫veamos por qué realmente

9
00:00:22,290 --> 00:00:25,363
‫necesitamos prevenir la contaminación de parámetros en primer lugar.

10
00:00:27,410 --> 00:00:30,993
‫Entonces, primero, debemos iniciar sesión.

11
00:00:32,240 --> 00:00:35,590
‫Bien, entonces, con este usuario y esta contraseña.

12
00:00:35,590 --> 00:00:39,290
‫Así que ahora podemos usar la ruta Obtener todos los recorridos.

13
00:00:39,290 --> 00:00:41,570
‫Muy bien, lo que voy a hacer

14
00:00:41,570 --> 00:00:45,140
‫ahora aquí es agregar algunos parámetros a la cadena de consulta.

15
00:00:45,140 --> 00:00:49,443
‫Veamos, quiero ordenar por duración y,

16
00:00:52,830 --> 00:00:57,233
‫al mismo tiempo, también quiero ordenar por precio.

17
00:00:58,110 --> 00:01:01,140
‫Y en realidad no tiene mucho sentido

18
00:01:01,140 --> 00:01:05,100
‫porque estamos preparados para tener un solo parámetro de clasificación.

19
00:01:05,100 --> 00:01:08,310
‫Entonces, veamos qué obtenemos con esto.

20
00:01:08,310 --> 00:01:11,849
‫Y, de hecho, obtenemos un error al decir esto. querystring. clasificar. dividir no es una función.

21
00:01:11,849 --> 00:01:15,890
‫Y eso está sucediendo en apiFeatures. js en la línea 23.

22
00:01:15,890 --> 00:01:20,890
‫Así que abramos eso y aquí, en la línea 23

23
00:01:22,550 --> 00:01:23,800
‫es donde ocurre ese error.

24
00:01:26,560 --> 00:01:31,560
‫Entonces está tratando de dividir la propiedad de clasificación aquí,

25
00:01:32,520 --> 00:01:35,710
‫que esperamos que sea una cadena.

26
00:01:35,710 --> 00:01:37,930
‫Pero en este momento, dado que

27
00:01:37,930 --> 00:01:41,110
‫lo definimos dos veces, ordene una vez y luego ordene dos

28
00:01:41,110 --> 00:01:44,510
‫veces, express creará una matriz con estos dos valores, duración y precio.

29
00:01:44,510 --> 00:01:48,423
‫Déjame mostrarte eso.

30
00:01:49,610 --> 00:01:51,713
‫Consola. Iniciar sesión.

31
00:01:54,320 --> 00:01:55,800
‫Ahora lo estoy copiando.

32
00:01:55,800 --> 00:01:57,053
‫De acuerdo, inténtalo de nuevo.

33
00:02:01,660 --> 00:02:03,323
‫Aquí está el mismo error

34
00:02:04,210 --> 00:02:07,490
‫y, como dije, en realidad es una matriz con duración y precio.

35
00:02:07,490 --> 00:02:10,540
‫Y eso, por supuesto, no podemos dividir porque dividir solo

36
00:02:10,540 --> 00:02:12,520
‫funciona con cadenas, ¿de acuerdo?

37
00:02:12,520 --> 00:02:16,370
‫Y este es un problema típico

38
00:02:16,370 --> 00:02:19,850
‫que los atacantes pueden utilizar.

39
00:02:19,850 --> 00:02:21,920
‫Muy bien, y básicamente ahora vamos

40
00:02:21,920 --> 00:02:24,480
‫a usar un middleware que simplemente eliminará estos

41
00:02:24,480 --> 00:02:26,290
‫campos duplicados, ¿de acuerdo?

42
00:02:26,290 --> 00:02:30,930
‫Y ese, vamos a instalarlo.

43
00:02:30,930 --> 00:02:33,470
‫Se llama HPP,

44
00:02:33,470 --> 00:02:38,200
‫que significa contaminación de parámetros HTTP.

45
00:02:38,200 --> 00:02:40,393
‫Está bien.

46
00:02:42,080 --> 00:02:42,913
‫Vamos a requerirlo rápidamente aquí.

47
00:02:45,700 --> 00:02:47,883
‫Muy bien, este es otro muy simple.

48
00:02:55,810 --> 00:03:00,550
‫Todo lo que tenemos que hacer es la aplicación. usar y luego llamar a HPP.

49
00:03:00,550 --> 00:03:05,263
‫Por lo tanto, evite la contaminación de los parámetros.

50
00:03:06,710 --> 00:03:10,750
‫Y este de nuevo debería usarse aquí al final, está

51
00:03:12,750 --> 00:03:15,910
‫bien, porque lo que hace es aclarar la

52
00:03:15,910 --> 00:03:18,120
‫cadena de consulta, ¿de acuerdo?

53
00:03:18,120 --> 00:03:20,470
‫Intentémoslo de nuevo.

54
00:03:20,470 --> 00:03:22,003
‫Está tomando un poco de tiempo y aquí vamos.

55
00:03:24,050 --> 00:03:26,690
‫Entonces, el error desapareció y ahora solo está

56
00:03:26,690 --> 00:03:28,080
‫usando el último.

57
00:03:28,080 --> 00:03:31,120
‫Así que ahora está ordenando mi precio

58
00:03:31,120 --> 00:03:34,930
‫y, de hecho, comenzamos con el más bajo y

59
00:03:34,930 --> 00:03:38,760
‫luego subimos 497, hasta llegar al más caro de

60
00:03:38,760 --> 00:03:40,860
‫casi 3000, ¿de acuerdo?

61
00:03:40,860 --> 00:03:44,423
‫Entonces eso es algo fijo, pero en realidad queremos algunas

62
00:03:45,380 --> 00:03:48,260
‫propiedades o campos duplicados en algunos casos, ¿verdad?

63
00:03:48,260 --> 00:03:52,800
‫Por ejemplo, es posible que deseemos buscar recorridos con una

64
00:03:52,800 --> 00:03:55,690
‫duración de nueve y cinco.

65
00:03:55,690 --> 00:03:57,913
‫Entonces, recuerde que en nuestra API,

66
00:04:01,690 --> 00:04:04,960
‫podemos hacer esto, por lo que la duración es igual a

67
00:04:04,960 --> 00:04:08,283
‫cinco, y podemos decir, al mismo tiempo, duración nueve, ¿de acuerdo?

68
00:04:09,670 --> 00:04:13,980
‫Y queremos que esto realmente funcione, pero en este momento no es así.

69
00:04:13,980 --> 00:04:17,740
‫Solo encuentra la gira con nueve días, ¿verdad?

70
00:04:17,740 --> 00:04:22,010
‫Pero si no lo hubiéramos hecho, o el middleware HPP.

71
00:04:22,010 --> 00:04:24,823
‫Así que desactivémoslo.

72
00:04:26,000 --> 00:04:28,253
‫Entonces, si no lo tuviéramos activo,

73
00:04:29,130 --> 00:04:31,130
‫entonces encontraríamos tres recorridos, uno

74
00:04:31,130 --> 00:04:35,130
‫con duración cinco, luego aquí con duración nueve y aquí

75
00:04:35,130 --> 00:04:37,000
‫otro con duración cinco.

76
00:04:37,000 --> 00:04:39,300
‫Bien, y en este caso, este es en

77
00:04:39,300 --> 00:04:40,930
‫realidad el comportamiento esperado.

78
00:04:40,930 --> 00:04:43,890
‫Entonces, ¿qué podemos hacer para poder usar el middleware

79
00:04:43,890 --> 00:04:45,800
‫pero aún así obtener este

80
00:04:45,800 --> 00:04:48,463
‫resultado que esperamos aquí? Con la duración,

81
00:04:48,463 --> 00:04:51,670
‫podemos hacer una lista blanca de algunos parámetros, ¿de acuerdo?

82
00:04:51,670 --> 00:04:55,770
‫Entonces, en esta función HPP, podemos pasar una vez

83
00:04:55,770 --> 00:05:00,770
‫más un objeto y luego allí, especificar la lista blanca, ¿de acuerdo?

84
00:05:01,050 --> 00:05:05,543
‫Y la lista blanca es simplemente una matriz de propiedades para

85
00:05:06,560 --> 00:05:10,690
‫las que realmente permitimos duplicados en la cadena de consulta.

86
00:05:10,690 --> 00:05:14,213
‫¿Okey?

87
00:05:15,990 --> 00:05:16,823
‫Y la duración es, por supuesto, uno de ellos, ¿de acuerdo?

88
00:05:16,823 --> 00:05:20,943
‫Intentémoslo de nuevo.

89
00:05:22,070 --> 00:05:23,543
‫Y así, en este momento todavía obtenemos nuestros tres resultados como antes.

90
00:05:26,292 --> 00:05:30,890
‫Pero si lo probamos con sort, y creemos

91
00:05:30,890 --> 00:05:33,480
‫una nueva pestaña aquí.

92
00:05:33,480 --> 00:05:35,483
‫Entonces, si lo probamos con

93
00:05:40,990 --> 00:05:43,453
‫estos tipos dobles, tampoco deberíamos obtener ningún error.

94
00:05:44,350 --> 00:05:46,730
‫Bueno, ahora no hemos iniciado sesión, así que obtengamos

95
00:05:46,730 --> 00:05:48,183
‫nuestro token de error aquí.

96
00:05:49,295 --> 00:05:54,295
‫Inténtelo de nuevo.

97
00:05:54,400 --> 00:05:55,650
‫Y ahora, de hecho, funciona, no obtenemos ningún error.

98
00:05:55,650 --> 00:05:58,870
‫Y el middleware de HPP está haciendo su trabajo.

99
00:05:58,870 --> 00:06:02,713
‫¿Está bien?

100
00:06:04,100 --> 00:06:05,680
‫También cierre este,

101
00:06:05,680 --> 00:06:09,110
‫y ahora también deberíamos especificar algunos otros campos

102
00:06:09,110 --> 00:06:12,450
‫en nuestra lista blanca, porque por ejemplo

103
00:06:12,450 --> 00:06:16,250
‫queremos buscar este también, o la cantidad de calificaciones.

104
00:06:16,250 --> 00:06:18,130
‫Así que copiemos todos aquí en nuestra lista blanca.

105
00:06:18,130 --> 00:06:21,863
‫Así que el promedio también.

106
00:06:28,940 --> 00:06:30,423
‫Luego también la duración

107
00:06:35,210 --> 00:06:38,700
‫que ya tenemos, y digamos el tamaño máximo del grupo.

108
00:06:38,700 --> 00:06:40,403
‫También podríamos querer la dificultad.

109
00:06:46,680 --> 00:06:48,983
‫Y también el precio.

110
00:06:54,920 --> 00:06:56,070
‫Y creo que eso debería ser suficiente.

111
00:06:56,070 --> 00:06:58,773
‫Está bien.

112
00:07:03,370 --> 00:07:04,223
‫Y puede parecer

113
00:07:05,950 --> 00:07:09,540
‫un poco extraño poner básicamente aquí todos los nombres de campo manualmente y luego

114
00:07:09,540 --> 00:07:12,350
‫podríamos tener que hacer lo mismo con los otros recursos,

115
00:07:12,350 --> 00:07:15,410
‫y eso hará que esta lista blanca sea aún más grande, ¿verdad?

116
00:07:15,410 --> 00:07:19,010
‫Y, por supuesto, podríamos hacer algunas cosas complejas aquí para

117
00:07:19,010 --> 00:07:21,860
‫obtener estos nombres de campo del modelo en

118
00:07:21,860 --> 00:07:23,930
‫sí, pero una vez más,

119
00:07:23,930 --> 00:07:26,690
‫solo quiero que sea simple aquí, ¿de acuerdo?

120
00:07:26,690 --> 00:07:28,980
‫Entonces, solo estoy definiendo manualmente estos nombres

121
00:07:28,980 --> 00:07:32,160
‫de campo aquí y luego lo llamo un día, ¿de acuerdo?

122
00:07:32,160 --> 00:07:34,900
‫De acuerdo, y eso realmente

123
00:07:34,900 --> 00:07:38,620
‫concluye nuestra sección de autenticación, autorización y seguridad.

124
00:07:38,620 --> 00:07:41,590
‫Y si quieres divertirte un poco más con eso,

125
00:07:41,590 --> 00:07:44,620
‫entonces, por supuesto, puedes intentar implementar algunas de las cosas

126
00:07:44,620 --> 00:07:46,730
‫que sugerí en ese video resumen

127
00:07:46,730 --> 00:07:49,213
‫que te mostré antes con esa diapositiva con

128
00:07:49,213 --> 00:07:51,260
‫todas estas diferentes medidas de seguridad

129
00:07:51,260 --> 00:07:53,160
‫que ya implementamos y algunos

130
00:07:53,160 --> 00:07:55,530
‫de los cuales les dije que experimentaran.

131
00:07:55,530 --> 00:07:57,970
‫Así que siéntete libre de hacer eso,

132
00:07:57,970 --> 00:08:00,700
‫o si no, bueno, pasemos juntos a

133
00:08:00,700 --> 00:08:04,330
‫la siguiente sección que será realmente emocionante nuevamente porque entonces

134
00:08:04,330 --> 00:08:06,750
‫realmente comenzaremos a modelar los

135
00:08:06,750 --> 00:08:09,800
‫datos y aprenderemos algunas cosas más avanzadas de MongoDB.

136
00:08:09,800 --> 00:08:12,920
‫Así que no puedo esperar a verte allí.

