﻿1
00:00:01,004 --> 00:00:02,610
‫-: En esta conferencia,

2
00:00:02,610 --> 00:00:06,690
‫usaremos dos paquetes más para mejorar la seguridad de nuestras aplicaciones, y

3
00:00:06,690 --> 00:00:09,823
‫esta vez para realizar la desinfección de datos.

4
00:00:11,290 --> 00:00:13,630
‫Entonces, la desinfección de datos básicamente significa

5
00:00:13,630 --> 00:00:15,560
‫limpiar todos los datos

6
00:00:15,560 --> 00:00:18,313
‫que ingresan a la aplicación de códigos maliciosos.

7
00:00:19,228 --> 00:00:22,053
‫Entonces, código que está tratando de atacar nuestra aplicación.

8
00:00:22,930 --> 00:00:26,660
‫En este caso, intentamos defendernos de dos ataques.

9
00:00:26,660 --> 00:00:30,240
‫Entonces, escribámoslo y lo haremos,

10
00:00:30,240 --> 00:00:34,073
‫digamos, justo aquí después del analizador corporal.

11
00:00:35,039 --> 00:00:37,400
‫Este middleware aquí lee los datos

12
00:00:37,400 --> 00:00:40,140
‫en la solicitud. cuerpo, y solo

13
00:00:40,140 --> 00:00:42,890
‫después de eso podemos realmente limpiar esos datos, ¿verdad?

14
00:00:42,890 --> 00:00:46,860
‫Este es un lugar perfecto para realizar la desinfección de datos.

15
00:00:46,860 --> 00:00:51,860
‫Por lo tanto, haremos un saneamiento de datos contra la

16
00:00:55,190 --> 00:01:00,190
‫inyección de consultas NoSQL y también un saneamiento de

17
00:01:05,620 --> 00:01:09,560
‫datos contra ataques de scripting entre sitios.

18
00:01:09,560 --> 00:01:11,670
‫Y ahora, antes de hacer

19
00:01:11,670 --> 00:01:14,600
‫cualquier otra cosa, permítanme mostrarles por qué

20
00:01:14,600 --> 00:01:17,733
‫es tan importante defenderse de este tipo de ataque.

21
00:01:19,010 --> 00:01:22,200
‫Ahora simularemos una inyección de consulta NoSQL y espero

22
00:01:22,200 --> 00:01:25,620
‫que se sorprenda tanto como yo cuando descubrí por primera

23
00:01:25,620 --> 00:01:28,263
‫vez lo poderoso que puede ser.

24
00:01:29,820 --> 00:01:32,570
‫Vayamos ahora a Postman aquí e intentemos

25
00:01:32,570 --> 00:01:34,810
‫iniciar sesión como alguien, incluso

26
00:01:34,810 --> 00:01:37,400
‫sin saber su dirección de correo electrónico.

27
00:01:37,400 --> 00:01:41,853
‫Muy bien, básicamente, simplemente dando una contraseña, digamos esta aquí,

28
00:01:42,800 --> 00:01:46,070
‫podremos iniciar sesión, pero incluso sin saber

29
00:01:46,070 --> 00:01:48,603
‫la dirección de correo electrónico.

30
00:01:49,750 --> 00:01:51,310
‫Nuevamente, lo haremos

31
00:01:51,310 --> 00:01:54,480
‫simulando una inyección de consulta NoSQL, y

32
00:01:54,480 --> 00:01:57,840
‫la forma más sencilla de hacerlo es así.

33
00:01:57,840 --> 00:02:00,530
‫En lugar de especificar un

34
00:02:00,530 --> 00:02:03,933
‫correo electrónico real, básicamente especificamos esta consulta.

35
00:02:06,450 --> 00:02:10,010
‫Usamos el operador MongoDB mayor que

36
00:02:10,010 --> 00:02:13,770
‫y lo configuramos igual a nada, ¿de acuerdo?

37
00:02:13,770 --> 00:02:15,963
‫¿Y ahora que pasa?

38
00:02:17,810 --> 00:02:21,810
‫De hecho, ahora estamos conectados como administrador.

39
00:02:21,810 --> 00:02:24,673
‫Como puede ver, incluso obtuvimos nuestro token de acceso.

40
00:02:25,590 --> 00:02:28,550
‫Sí, realmente ahora estamos conectados, y esto me

41
00:02:28,550 --> 00:02:30,873
‫deja completamente alucinado, ¿de acuerdo?

42
00:02:31,870 --> 00:02:33,940
‫Nuevamente, sin conocer la dirección

43
00:02:33,940 --> 00:02:37,390
‫de correo electrónico, solo la contraseña, pudimos iniciar sesión.

44
00:02:37,390 --> 00:02:39,540
‫Y créame, no es realmente difícil

45
00:02:39,540 --> 00:02:42,840
‫encontrar un montón de contraseñas realmente populares que se utilizan

46
00:02:42,840 --> 00:02:44,693
‫en todas las aplicaciones.

47
00:02:46,198 --> 00:02:49,203
‫Entonces, este tipo de ataque es contra lo que debemos protegernos.

48
00:02:50,670 --> 00:02:54,913
‫Esto funciona básicamente porque siempre será cierto, así que en

49
00:02:55,940 --> 00:02:58,840
‫realidad también lo ves en Compass.

50
00:02:58,840 --> 00:03:01,590
‫Así que lo estoy copiando, o en realidad, copiemos todo esto.

51
00:03:05,130 --> 00:03:08,313
‫Luego intente filtrar por exactamente lo mismo.

52
00:03:09,460 --> 00:03:12,660
‫Ahora solo nos faltan las

53
00:03:12,660 --> 00:03:15,870
‫llaves, pero ahora obtenemos una consulta válida.

54
00:03:15,870 --> 00:03:20,440
‫Presionemos Buscar y, de hecho, esto devuelve todos los usuarios.

55
00:03:20,440 --> 00:03:24,033
‫Básicamente, todos los usuarios coinciden con esta consulta.

56
00:03:25,340 --> 00:03:28,540
‫Nuevamente, es porque esto aquí siempre es cierto.

57
00:03:28,540 --> 00:03:31,503
‫Eso luego seleccionará todos los nombres de usuario.

58
00:03:33,330 --> 00:03:36,340
‫Esa inyección de consulta maliciosa aquí

59
00:03:36,340 --> 00:03:40,760
‫nos permitió iniciar sesión solo sabiendo esta contraseña, ¿de acuerdo?

60
00:03:40,760 --> 00:03:43,510
‫Entonces, para protegernos contra esto, instalemos

61
00:03:43,510 --> 00:03:45,623
‫otro middleware, y

62
00:03:48,560 --> 00:03:52,953
‫este se llama express-mongo-sanitize, y ya que estamos aquí, también

63
00:03:59,680 --> 00:04:02,610
‫vamos a instalar el otro que

64
00:04:02,610 --> 00:04:04,900
‫vamos a necesitar, pero luego

65
00:04:04,900 --> 00:04:08,873
‫en este video, que se llama simplemente XSS.

66
00:04:10,486 --> 00:04:14,603
‫En realidad, eso no era correcto; se llama XSS_clean.

67
00:04:18,530 --> 00:04:22,760
‫Necesitamos continuar y desinstalar el otro.

68
00:04:22,760 --> 00:04:24,700
‫NPM desinstalar XSS.

69
00:04:29,308 --> 00:04:34,308
‫Echemos un vistazo a nuestro paquete. json, y de hecho se ha ido.

70
00:04:35,280 --> 00:04:38,743
‫Nuevamente, XSS_clean es el que queremos usar.

71
00:04:42,150 --> 00:04:43,840
‫De todos modos, primero, hablemos

72
00:04:43,840 --> 00:04:45,923
‫de la inyección de consultas NoSQL nuevamente.

73
00:04:48,040 --> 00:04:51,730
‫Todo lo que vamos a usar es, y

74
00:04:51,730 --> 00:04:54,343
‫por supuesto, primero debemos

75
00:04:57,862 --> 00:05:02,695
‫requerirlo, por lo que const mongoSanitize es igual a express-mongo-sanitize.

76
00:05:08,610 --> 00:05:12,790
‫Nuevamente, VS Code aquí me ayuda, y como estamos aquí,

77
00:05:12,790 --> 00:05:14,853
‫también requeriremos el siguiente.

78
00:05:16,120 --> 00:05:18,763
‫La variable que necesito se llama

79
00:05:20,000 --> 00:05:23,947
‫XSS, y luego el nombre del módulo es XSS_clean.

80
00:05:27,160 --> 00:05:32,103
‫Entonces, usemos ahora este mongoSanitize aquí, aquí mismo.

81
00:05:33,490 --> 00:05:36,450
‫MongoSanitize es una función a la que llamaremos, que

82
00:05:36,450 --> 00:05:38,700
‫luego devolverá una función de middleware, que

83
00:05:38,700 --> 00:05:40,110
‫luego podremos usar.

84
00:05:40,110 --> 00:05:42,330
‫Esto es suficiente para prevenirnos contra el

85
00:05:42,330 --> 00:05:44,820
‫tipo de ataque que acabamos de ver antes.

86
00:05:44,820 --> 00:05:46,610
‫Entonces, lo que hace este middleware es

87
00:05:46,610 --> 00:05:49,900
‫mirar el cuerpo de la solicitud, la cadena de consulta de la solicitud

88
00:05:49,900 --> 00:05:52,640
‫y también la Solicitud. Params, y luego

89
00:05:52,640 --> 00:05:54,190
‫básicamente filtrará todos los

90
00:05:54,190 --> 00:05:56,363
‫signos y puntos de dólar, porque

91
00:05:57,410 --> 00:06:00,730
‫así es como se escriben los operadores de MongoDB.

92
00:06:00,730 --> 00:06:03,140
‫Al eliminar eso, bueno, estos operadores ya

93
00:06:03,140 --> 00:06:04,833
‫no van a funcionar.

94
00:06:05,830 --> 00:06:07,123
‫Intentémoslo de nuevo.

95
00:06:08,100 --> 00:06:12,003
‫Nuevamente, eliminará todos estos signos de dólar.

96
00:06:13,712 --> 00:06:16,080
‫Entonces, si hago esto ahora, obtenemos

97
00:06:16,080 --> 00:06:17,930
‫este error y ya

98
00:06:17,930 --> 00:06:20,270
‫no podemos usar este truco aquí,

99
00:06:20,270 --> 00:06:23,900
‫este ataque de inyección de consultas, para iniciar sesión.

100
00:06:23,900 --> 00:06:26,720
‫Entonces, eso soluciona el primer problema,

101
00:06:26,720 --> 00:06:28,960
‫pero ahora usemos ese

102
00:06:28,960 --> 00:06:31,700
‫otro middleware que también necesitábamos antes.

103
00:06:31,700 --> 00:06:36,700
‫Entonces, app. use y XSS, ¿de acuerdo?

104
00:06:37,590 --> 00:06:39,870
‫Esto luego limpiará cualquier entrada

105
00:06:39,870 --> 00:06:42,283
‫del usuario del código HTML malicioso, básicamente.

106
00:06:43,210 --> 00:06:45,780
‫Imagine que un atacante intentaría insertar

107
00:06:45,780 --> 00:06:48,180
‫un código HTML malicioso

108
00:06:48,180 --> 00:06:50,620
‫con algún código JavaScript adjunto.

109
00:06:50,620 --> 00:06:54,090
‫Si eso luego se inyectara en nuestro sitio HTML,

110
00:06:54,090 --> 00:06:56,423
‫realmente podría causar algún daño.

111
00:06:57,300 --> 00:06:59,710
‫Con este middleware, lo

112
00:06:59,710 --> 00:07:03,063
‫evitamos básicamente convirtiendo todos estos símbolos HTML.

113
00:07:04,380 --> 00:07:07,040
‫Como dije antes, la validación de Mongoose en

114
00:07:07,040 --> 00:07:10,937
‫sí misma ya es una muy buena protección contra XSS, porque

115
00:07:12,230 --> 00:07:14,170
‫realmente no permitirá que ninguna locura

116
00:07:14,170 --> 00:07:16,730
‫entre en nuestra base de datos, siempre

117
00:07:16,730 --> 00:07:18,613
‫que la usemos correctamente.

118
00:07:19,480 --> 00:07:22,320
‫Siempre que pueda, simplemente agregue algo de validación a sus

119
00:07:22,320 --> 00:07:25,037
‫esquemas de Mongoose, y eso debería protegerlo principalmente

120
00:07:25,037 --> 00:07:29,290
‫de las secuencias de comandos entre sitios, al menos en el lado del servidor.

121
00:07:29,290 --> 00:07:33,083
‫Probemos muy rápidamente este middleware aquí también.

122
00:07:34,990 --> 00:07:38,333
‫Lo que voy a hacer es simplemente crear

123
00:07:39,960 --> 00:07:43,573
‫un nuevo usuario, y llamémoslo "tester" aquí o algo así.

124
00:07:44,500 --> 00:07:47,420
‫La contraseña es correcta y aquí,

125
00:07:47,420 --> 00:07:50,403
‫en el nombre, agreguemos un código HTML.

126
00:07:51,480 --> 00:07:56,480
‫Entonces, div con la identificación de código incorrecto.

127
00:08:00,470 --> 00:08:02,503
‫Está bien, intentemos eso ahora.

128
00:08:06,790 --> 00:08:10,310
‫Verá que el módulo XSS que

129
00:08:10,310 --> 00:08:13,263
‫usamos realmente convirtió estos símbolos

130
00:08:14,190 --> 00:08:19,163
‫HTML aquí, principalmente este, en esta entidad HTML aquí.

131
00:08:21,440 --> 00:08:24,130
‫Eliminemos rápidamente a este tipo.

132
00:08:24,130 --> 00:08:27,593
‫No lo necesitamos en absoluto. (Risas) Esa es

133
00:08:29,556 --> 00:08:33,300
‫nuestra protección rápida y fácil contra algunos de

134
00:08:33,300 --> 00:08:36,293
‫estos ataques mediante la desinfección de datos.

135
00:08:37,280 --> 00:08:40,460
‫También recuerde que la biblioteca de funciones de validación

136
00:08:40,460 --> 00:08:42,770
‫que usamos antes también tiene

137
00:08:42,770 --> 00:08:45,123
‫un par de funciones de desinfección interesantes.

138
00:08:45,980 --> 00:08:49,820
‫También podríamos construir manualmente algún middleware usando estos,

139
00:08:49,820 --> 00:08:51,820
‫pero nuevamente, eso no

140
00:08:51,820 --> 00:08:55,890
‫es realmente necesario, porque Mongoose ya impone un esquema estricto.

141
00:08:55,890 --> 00:08:58,250
‫Luego, si encuentra algo

142
00:08:58,250 --> 00:09:00,870
‫extraño, arrojará un error, y sí, eso

143
00:09:00,870 --> 00:09:03,290
‫ya es una protección bastante buena.

144
00:09:03,290 --> 00:09:06,240
‫Entonces, casi hemos terminado con la parte de seguridad.

145
00:09:06,240 --> 00:09:07,740
‫Todo lo que necesitamos hacer

146
00:09:07,740 --> 00:09:10,163
‫en el siguiente video es prevenir la contaminación de parámetros.

