﻿1
00:00:01,004 --> 00:00:02,610
‫-: Nesta palestra, vamos

2
00:00:02,610 --> 00:00:06,690
‫usar mais dois pacotes para melhorar a segurança da nossa aplicação, e

3
00:00:06,690 --> 00:00:09,823
‫desta vez para realizar a higienização dos dados.

4
00:00:11,290 --> 00:00:13,630
‫Portanto, a higienização de dados significa

5
00:00:13,630 --> 00:00:15,560
‫basicamente limpar todos os

6
00:00:15,560 --> 00:00:18,313
‫dados que entram no aplicativo de códigos maliciosos.

7
00:00:19,228 --> 00:00:22,053
‫Então, código que está tentando atacar nosso aplicativo.

8
00:00:22,930 --> 00:00:26,660
‫Neste caso, estamos tentando nos defender de dois ataques.

9
00:00:26,660 --> 00:00:30,240
‫Então, vamos escrever isso, e vamos fazer

10
00:00:30,240 --> 00:00:34,073
‫isso, digamos, bem aqui após o analisador de corpo.

11
00:00:35,039 --> 00:00:37,400
‫Este middleware aqui lê os dados

12
00:00:37,400 --> 00:00:40,140
‫na solicitação. corpo, e só

13
00:00:40,140 --> 00:00:42,890
‫depois disso podemos realmente limpar esses dados, certo?

14
00:00:42,890 --> 00:00:46,860
‫Este é um lugar perfeito para fazer a higienização de dados.

15
00:00:46,860 --> 00:00:51,860
‫Portanto, faremos sanitização de dados contra injeção de

16
00:00:55,190 --> 00:01:00,190
‫consulta NoSQL e também sanitização de dados contra

17
00:01:05,620 --> 00:01:09,560
‫ataques de script entre sites.

18
00:01:09,560 --> 00:01:11,670
‫E agora, antes de

19
00:01:11,670 --> 00:01:14,600
‫qualquer coisa, deixe-me mostrar porque é tão

20
00:01:14,600 --> 00:01:17,733
‫importante se defender contra esse tipo de ataque.

21
00:01:19,010 --> 00:01:22,200
‫Agora simularemos uma injeção de consulta NoSQL e

22
00:01:22,200 --> 00:01:25,620
‫espero que você fique tão chocado quanto eu quando

23
00:01:25,620 --> 00:01:28,263
‫descobri como isso pode ser poderoso.

24
00:01:29,820 --> 00:01:32,570
‫Vamos agora ao Postman aqui e tentar

25
00:01:32,570 --> 00:01:34,810
‫fazer o login como alguém,

26
00:01:34,810 --> 00:01:37,400
‫mesmo sem saber o endereço de e-mail.

27
00:01:37,400 --> 00:01:41,853
‫Tudo bem, então basicamente, simplesmente dando uma senha, digamos esta

28
00:01:42,800 --> 00:01:46,070
‫aqui, poderemos logar, mas mesmo sem saber

29
00:01:46,070 --> 00:01:48,603
‫o endereço de e-mail.

30
00:01:49,750 --> 00:01:51,310
‫Novamente, faremos isso

31
00:01:51,310 --> 00:01:54,480
‫simulando uma injeção de consulta NoSQL, e a

32
00:01:54,480 --> 00:01:57,840
‫maneira mais fácil de fazer isso é assim.

33
00:01:57,840 --> 00:02:00,530
‫Em vez de especificar

34
00:02:00,530 --> 00:02:03,933
‫um e-mail real, especificamos esta consulta, basicamente.

35
00:02:06,450 --> 00:02:10,010
‫Usamos o operador MongoDB maior

36
00:02:10,010 --> 00:02:13,770
‫que e definimos igual a nada, certo?

37
00:02:13,770 --> 00:02:15,963
‫E agora, o que acontece?

38
00:02:17,810 --> 00:02:21,810
‫Na verdade, agora estamos logados como administrador.

39
00:02:21,810 --> 00:02:24,673
‫Então, você vê que até temos nosso token de acesso.

40
00:02:25,590 --> 00:02:28,550
‫Sim, agora estamos realmente logados, e isso

41
00:02:28,550 --> 00:02:30,873
‫me surpreende completamente, ok?

42
00:02:31,870 --> 00:02:33,940
‫Novamente, sem saber o endereço

43
00:02:33,940 --> 00:02:37,390
‫de e-mail, apenas a senha, conseguimos fazer o login.

44
00:02:37,390 --> 00:02:39,540
‫E acredite em mim, não é realmente

45
00:02:39,540 --> 00:02:42,840
‫difícil encontrar um monte de senhas realmente populares que são

46
00:02:42,840 --> 00:02:44,693
‫usadas em todos os aplicativos.

47
00:02:46,198 --> 00:02:49,203
‫Portanto, é contra esse tipo de ataque que precisamos nos proteger.

48
00:02:50,670 --> 00:02:54,913
‫Isso funciona basicamente porque sempre será verdade, então isso é realmente

49
00:02:55,940 --> 00:02:58,840
‫- você também vê isso no Compass.

50
00:02:58,840 --> 00:03:01,590
‫Então, estou copiando ou, na verdade, vamos copiar tudo isso.

51
00:03:05,130 --> 00:03:08,313
‫Em seguida, tente filtrar exatamente por esta mesma coisa.

52
00:03:09,460 --> 00:03:12,660
‫Agora estamos faltando apenas as

53
00:03:12,660 --> 00:03:15,870
‫chaves, mas agora temos uma consulta válida.

54
00:03:15,870 --> 00:03:20,440
‫Vamos clicar em Encontrar e, de fato, isso retorna todos os usuários.

55
00:03:20,440 --> 00:03:24,033
‫Então, basicamente, todos os usuários correspondem a esta consulta.

56
00:03:25,340 --> 00:03:28,540
‫Novamente, é porque isso aqui é sempre verdade.

57
00:03:28,540 --> 00:03:31,503
‫Isso selecionará todos os nomes de usuário.

58
00:03:33,330 --> 00:03:36,340
‫Aquela injeção de consulta maliciosa aqui

59
00:03:36,340 --> 00:03:40,760
‫nos permitiu fazer login apenas sabendo essa senha, certo?

60
00:03:40,760 --> 00:03:43,510
‫Então, para nos protegermos disso, vamos

61
00:03:43,510 --> 00:03:45,623
‫instalar outro middleware,

62
00:03:48,560 --> 00:03:52,953
‫e este se chama express-mongo-sanitize, e já que estamos

63
00:03:59,680 --> 00:04:02,610
‫aqui, vamos também instalar o outro

64
00:04:02,610 --> 00:04:04,900
‫que vamos precisar, mas depois

65
00:04:04,900 --> 00:04:08,873
‫neste vídeo, que é chamado simplesmente de XSS.

66
00:04:10,486 --> 00:04:14,603
‫Na verdade, isso não estava correto; é chamado de XSS_clean.

67
00:04:18,530 --> 00:04:22,760
‫Precisamos ir em frente e desinstalar o outro.

68
00:04:22,760 --> 00:04:24,700
‫NPM desinstalar XSS.

69
00:04:29,308 --> 00:04:34,308
‫Vamos dar uma olhada em nosso pacote. json, e de fato se foi.

70
00:04:35,280 --> 00:04:38,743
‫Novamente, XSS_clean é o que desejamos usar.

71
00:04:42,150 --> 00:04:43,840
‫De qualquer forma, primeiro, vamos

72
00:04:43,840 --> 00:04:45,923
‫falar sobre a injeção de consulta NoSQL novamente.

73
00:04:48,040 --> 00:04:51,730
‫Tudo o que vamos usar é

74
00:04:51,730 --> 00:04:54,343
‫- e, claro, precisamos

75
00:04:57,862 --> 00:05:02,695
‫primeiro exigi-lo, então const mongoSanitize equals requer express-mongo-sanitize.

76
00:05:08,610 --> 00:05:12,790
‫Novamente, o VS Code aqui me ajuda e, como estamos aqui,

77
00:05:12,790 --> 00:05:14,853
‫também vamos solicitar o próximo.

78
00:05:16,120 --> 00:05:18,763
‫A variável que estou exigindo é

79
00:05:20,000 --> 00:05:23,947
‫chamada XSS e, em seguida, o nome do módulo é XSS_clean.

80
00:05:27,160 --> 00:05:32,103
‫Então, vamos usar este mongoSanitize aqui - bem aqui.

81
00:05:33,490 --> 00:05:36,450
‫MongoSanitize é uma função que chamaremos, que

82
00:05:36,450 --> 00:05:38,700
‫retornará uma função de middleware,

83
00:05:38,700 --> 00:05:40,110
‫que podemos usar.

84
00:05:40,110 --> 00:05:42,330
‫Isso é o suficiente para nos prevenir

85
00:05:42,330 --> 00:05:44,820
‫contra o tipo de ataque que acabamos de ver.

86
00:05:44,820 --> 00:05:46,610
‫Portanto, o que esse middleware faz

87
00:05:46,610 --> 00:05:49,900
‫é examinar o corpo da solicitação, a string de consulta da solicitação

88
00:05:49,900 --> 00:05:52,640
‫e também a Solicitação. Params, e

89
00:05:52,640 --> 00:05:54,190
‫basicamente filtrará todos

90
00:05:54,190 --> 00:05:56,363
‫os cifrões e pontos, porque

91
00:05:57,410 --> 00:06:00,730
‫é assim que os operadores MongoDB são escritos.

92
00:06:00,730 --> 00:06:03,140
‫Ao remover isso, bem, esses operadores

93
00:06:03,140 --> 00:06:04,833
‫não funcionarão mais.

94
00:06:05,830 --> 00:06:07,123
‫Então, vamos tentar de novo.

95
00:06:08,100 --> 00:06:12,003
‫Novamente, ele removerá todos esses cifrões.

96
00:06:13,712 --> 00:06:16,080
‫Se eu fizer isso agora, obteremos

97
00:06:16,080 --> 00:06:17,930
‫esse erro e não

98
00:06:17,930 --> 00:06:20,270
‫podemos mais usar esse truque aqui,

99
00:06:20,270 --> 00:06:23,900
‫esse ataque de injeção de consulta, para fazer login.

100
00:06:23,900 --> 00:06:26,720
‫Então, isso corrige o primeiro problema, mas

101
00:06:26,720 --> 00:06:28,960
‫agora vamos usar aquele

102
00:06:28,960 --> 00:06:31,700
‫outro middleware que também acabamos de solicitar.

103
00:06:31,700 --> 00:06:36,700
‫Então, app. usar e XSS, certo?

104
00:06:37,590 --> 00:06:39,870
‫Isso limpará qualquer entrada do

105
00:06:39,870 --> 00:06:42,283
‫usuário de código HTML malicioso, basicamente.

106
00:06:43,210 --> 00:06:45,780
‫Imagine que um invasor tente inserir

107
00:06:45,780 --> 00:06:48,180
‫algum código HTML malicioso com

108
00:06:48,180 --> 00:06:50,620
‫algum código JavaScript anexado a ele.

109
00:06:50,620 --> 00:06:54,090
‫Se isso fosse injetado mais tarde em nosso site

110
00:06:54,090 --> 00:06:56,423
‫HTML, poderia realmente causar algum dano.

111
00:06:57,300 --> 00:06:59,710
‫Usando esse middleware, evitamos

112
00:06:59,710 --> 00:07:03,063
‫isso basicamente convertendo todos esses símbolos HTML.

113
00:07:04,380 --> 00:07:07,040
‫Como eu disse antes, a validação do Mongoose

114
00:07:07,040 --> 00:07:10,937
‫em si já é uma proteção muito boa contra XSS, porque ela

115
00:07:12,230 --> 00:07:14,170
‫realmente não permitirá que qualquer coisa

116
00:07:14,170 --> 00:07:16,730
‫maluca entre em nosso banco de dados, desde

117
00:07:16,730 --> 00:07:18,613
‫que a usemos corretamente.

118
00:07:19,480 --> 00:07:22,320
‫Sempre que puder, apenas adicione alguma validação aos

119
00:07:22,320 --> 00:07:25,037
‫seus esquemas Mongoose, e isso deve

120
00:07:25,037 --> 00:07:29,290
‫protegê-lo principalmente de scripts entre sites, pelo menos no lado do servidor.

121
00:07:29,290 --> 00:07:33,083
‫Vamos testar rapidamente esse middleware aqui também.

122
00:07:34,990 --> 00:07:38,333
‫O que vou fazer é simplesmente criar um novo

123
00:07:39,960 --> 00:07:43,573
‫usuário e vamos chamá-lo de "testador" aqui ou algo parecido.

124
00:07:44,500 --> 00:07:47,420
‫A senha está certa, e aqui,

125
00:07:47,420 --> 00:07:50,403
‫no nome, vamos adicionar algum código HTML.

126
00:07:51,480 --> 00:07:56,480
‫Então, div com o id de código ruim.

127
00:08:00,470 --> 00:08:02,503
‫Tudo bem, vamos tentar isso agora.

128
00:08:06,790 --> 00:08:10,310
‫Você vê que o módulo XSS

129
00:08:10,310 --> 00:08:13,263
‫que usamos realmente converteu esses

130
00:08:14,190 --> 00:08:19,163
‫símbolos HTML aqui, principalmente este, nesta entidade HTML aqui.

131
00:08:21,440 --> 00:08:24,130
‫Vamos deletar esse cara rapidamente.

132
00:08:24,130 --> 00:08:27,593
‫Não precisamos dele de forma alguma. (Risos) Essa é

133
00:08:29,556 --> 00:08:33,300
‫a nossa proteção rápida e fácil contra alguns

134
00:08:33,300 --> 00:08:36,293
‫desses ataques usando sanitização de dados.

135
00:08:37,280 --> 00:08:40,460
‫Lembre-se também de que a biblioteca de funções do

136
00:08:40,460 --> 00:08:42,770
‫validador que usamos antes também

137
00:08:42,770 --> 00:08:45,123
‫contém algumas funções de limpeza interessantes.

138
00:08:45,980 --> 00:08:49,820
‫Também poderíamos construir manualmente algum middleware usando isso, mas,

139
00:08:49,820 --> 00:08:51,820
‫novamente, isso não é

140
00:08:51,820 --> 00:08:55,890
‫realmente necessário, porque o Mongoose já impõe um esquema estrito.

141
00:08:55,890 --> 00:08:58,250
‫Então, se encontrar algo estranho,

142
00:08:58,250 --> 00:09:00,870
‫ele gerará um erro e, sim, essa

143
00:09:00,870 --> 00:09:03,290
‫já é uma proteção muito boa.

144
00:09:03,290 --> 00:09:06,240
‫Então, estamos quase terminando a parte de segurança.

145
00:09:06,240 --> 00:09:07,740
‫Tudo o que precisamos fazer

146
00:09:07,740 --> 00:09:10,163
‫no próximo vídeo é evitar a poluição dos parâmetros.

