﻿1
00:00:01,004 --> 00:00:02,610
‫-: In questa lezione

2
00:00:02,610 --> 00:00:06,690
‫utilizzeremo altri due pacchetti per migliorare la sicurezza delle nostre applicazioni e

3
00:00:06,690 --> 00:00:09,823
‫questa volta per eseguire la sanificazione dei dati.

4
00:00:11,290 --> 00:00:13,630
‫Quindi, la sanificazione dei dati significa

5
00:00:13,630 --> 00:00:15,560
‫fondamentalmente pulire tutti i

6
00:00:15,560 --> 00:00:18,313
‫dati che entrano nell'applicazione da codice dannoso.

7
00:00:19,228 --> 00:00:22,053
‫Quindi, codice che sta cercando di attaccare la nostra applicazione.

8
00:00:22,930 --> 00:00:26,660
‫In questo caso, stiamo cercando di difenderci da due attacchi.

9
00:00:26,660 --> 00:00:30,240
‫Quindi, scriviamolo e lo faremo, diciamo,

10
00:00:30,240 --> 00:00:34,073
‫proprio qui dopo il parser del corpo.

11
00:00:35,039 --> 00:00:37,400
‫Questo middleware qui legge i dati

12
00:00:37,400 --> 00:00:40,140
‫nella richiesta. corpo, e solo

13
00:00:40,140 --> 00:00:42,890
‫dopo possiamo effettivamente pulire quei dati, giusto?

14
00:00:42,890 --> 00:00:46,860
‫Questo è un posto perfetto per fare la sanificazione dei dati.

15
00:00:46,860 --> 00:00:51,860
‫Quindi, effettueremo la sanificazione dei dati contro l'iniezione di

16
00:00:55,190 --> 00:01:00,190
‫query NoSQL e anche la sanificazione dei dati contro

17
00:01:05,620 --> 00:01:09,560
‫gli attacchi di scripting tra siti.

18
00:01:09,560 --> 00:01:11,670
‫E ora, prima di fare

19
00:01:11,670 --> 00:01:14,600
‫qualsiasi altra cosa, lascia che ti mostri perché

20
00:01:14,600 --> 00:01:17,733
‫è così importante difendersi da questo tipo di attacco.

21
00:01:19,010 --> 00:01:22,200
‫Ora simuleremo un'iniezione di query NoSQL e spero che

22
00:01:22,200 --> 00:01:25,620
‫rimarrete scioccati come lo ero io quando ho scoperto per

23
00:01:25,620 --> 00:01:28,263
‫la prima volta quanto possa essere potente.

24
00:01:29,820 --> 00:01:32,570
‫Ora andiamo su Postman qui e proviamo

25
00:01:32,570 --> 00:01:34,810
‫ad accedere come qualcuno, anche

26
00:01:34,810 --> 00:01:37,400
‫senza conoscere il loro indirizzo email.

27
00:01:37,400 --> 00:01:41,853
‫Va bene, quindi in pratica, semplicemente fornendo una password,

28
00:01:42,800 --> 00:01:46,070
‫diciamo questa qui, potremo accedere, ma anche

29
00:01:46,070 --> 00:01:48,603
‫senza conoscere l'indirizzo email.

30
00:01:49,750 --> 00:01:51,310
‫Di nuovo, lo

31
00:01:51,310 --> 00:01:54,480
‫faremo simulando un'iniezione di query NoSQL e

32
00:01:54,480 --> 00:01:57,840
‫il modo più semplice per farlo è questo.

33
00:01:57,840 --> 00:02:00,530
‫Invece di specificare un'e-mail

34
00:02:00,530 --> 00:02:03,933
‫reale, in pratica specifichiamo questa query.

35
00:02:06,450 --> 00:02:10,010
‫Usiamo l'operatore MongoDB maggiore di

36
00:02:10,010 --> 00:02:13,770
‫e lo impostiamo uguale a niente, ok?

37
00:02:13,770 --> 00:02:15,963
‫E ora, cosa succede?

38
00:02:17,810 --> 00:02:21,810
‫In effetti, ora abbiamo effettuato l'accesso come amministratore.

39
00:02:21,810 --> 00:02:24,673
‫Quindi vedi che abbiamo persino ottenuto il nostro token di accesso.

40
00:02:25,590 --> 00:02:28,550
‫Sì, ora abbiamo davvero effettuato l'accesso e questo

41
00:02:28,550 --> 00:02:30,873
‫mi fa impazzire completamente, ok?

42
00:02:31,870 --> 00:02:33,940
‫Ancora una volta, senza conoscere l'indirizzo

43
00:02:33,940 --> 00:02:37,390
‫e-mail, solo la password, siamo stati in grado di accedere.

44
00:02:37,390 --> 00:02:39,540
‫E credimi, non è davvero difficile

45
00:02:39,540 --> 00:02:42,840
‫trovare un mucchio di password molto popolari che vengono

46
00:02:42,840 --> 00:02:44,693
‫utilizzate su ogni applicazione.

47
00:02:46,198 --> 00:02:49,203
‫Quindi, questo tipo di attacco è ciò da cui dobbiamo proteggerci.

48
00:02:50,670 --> 00:02:54,913
‫Questo funziona fondamentalmente perché sarà sempre vero, quindi è in realtà

49
00:02:55,940 --> 00:02:58,840
‫- lo vedi anche in Compass.

50
00:02:58,840 --> 00:03:01,590
‫Quindi lo sto copiando, o meglio, copiamo tutto questo.

51
00:03:05,130 --> 00:03:08,313
‫Quindi prova a filtrare in base a questa stessa identica cosa.

52
00:03:09,460 --> 00:03:12,660
‫Ora ci mancano solo le parentesi

53
00:03:12,660 --> 00:03:15,870
‫graffe, ma ora otteniamo effettivamente una query valida.

54
00:03:15,870 --> 00:03:20,440
‫Premiamo Trova, e in effetti, questo restituisce tutti gli utenti.

55
00:03:20,440 --> 00:03:24,033
‫Quindi, in pratica, tutti gli utenti corrispondono a questa query.

56
00:03:25,340 --> 00:03:28,540
‫Di nuovo, è perché questo qui è sempre vero.

57
00:03:28,540 --> 00:03:31,503
‫Questo selezionerà quindi tutti i nomi utente.

58
00:03:33,330 --> 00:03:36,340
‫Quella query injection dannosa qui ci

59
00:03:36,340 --> 00:03:40,760
‫ha permesso di accedere solo conoscendo questa password, va bene?

60
00:03:40,760 --> 00:03:43,510
‫Quindi, per proteggerci da questo, installiamo

61
00:03:43,510 --> 00:03:45,623
‫un altro middleware,

62
00:03:48,560 --> 00:03:52,953
‫e questo si chiama express-mongo-sanitize, e visto che siamo qui,

63
00:03:59,680 --> 00:04:02,610
‫andiamo avanti e installiamo anche l'altro

64
00:04:02,610 --> 00:04:04,900
‫che ci servirà, ma più

65
00:04:04,900 --> 00:04:08,873
‫tardi in questo video, che si chiama semplicemente XSS.

66
00:04:10,486 --> 00:04:14,603
‫In realtà, non era corretto; si chiama XSS_clean.

67
00:04:18,530 --> 00:04:22,760
‫Dobbiamo andare avanti e disinstallare l'altro.

68
00:04:22,760 --> 00:04:24,700
‫NPM disinstalla XSS.

69
00:04:29,308 --> 00:04:34,308
‫Diamo un'occhiata al nostro pacchetto. json, e infatti non c'è più.

70
00:04:35,280 --> 00:04:38,743
‫Ancora una volta, XSS_clean è quello che vogliamo usare.

71
00:04:42,150 --> 00:04:43,840
‫Ad ogni modo, per prima

72
00:04:43,840 --> 00:04:45,923
‫cosa, parliamo di nuovo dell'iniezione di query NoSQL.

73
00:04:48,040 --> 00:04:51,730
‫Tutto ciò che useremo è -

74
00:04:51,730 --> 00:04:54,343
‫e, naturalmente, dobbiamo

75
00:04:57,862 --> 00:05:02,695
‫prima richiederlo, quindi const mongoSanitize uguale richiede express-mongo-sanitize.

76
00:05:08,610 --> 00:05:12,790
‫Di nuovo, VS Code qui mi aiuta, e visto che ci

77
00:05:12,790 --> 00:05:14,853
‫siamo, richiediamo anche il prossimo.

78
00:05:16,120 --> 00:05:18,763
‫La variabile che sto richiedendo si

79
00:05:20,000 --> 00:05:23,947
‫chiama XSS, quindi il nome del modulo è XSS_clean.

80
00:05:27,160 --> 00:05:32,103
‫Quindi, ora usiamo questo mongoSanitize qui - proprio qui.

81
00:05:33,490 --> 00:05:36,450
‫MongoSanitize è una funzione che chiameremo, che restituirà

82
00:05:36,450 --> 00:05:38,700
‫quindi una funzione middleware, che

83
00:05:38,700 --> 00:05:40,110
‫possiamo quindi utilizzare.

84
00:05:40,110 --> 00:05:42,330
‫Questo è sufficiente per prevenirci contro il

85
00:05:42,330 --> 00:05:44,820
‫tipo di attacco che abbiamo appena visto prima.

86
00:05:44,820 --> 00:05:46,610
‫Quindi, ciò che fa questo middleware

87
00:05:46,610 --> 00:05:49,900
‫è guardare il corpo della richiesta, la stringa di query della

88
00:05:49,900 --> 00:05:52,640
‫richiesta e anche Request. Params, e quindi

89
00:05:52,640 --> 00:05:54,190
‫fondamentalmente filtrerà tutti i

90
00:05:54,190 --> 00:05:56,363
‫simboli e i punti del dollaro,

91
00:05:57,410 --> 00:06:00,730
‫perché è così che vengono scritti gli operatori MongoDB.

92
00:06:00,730 --> 00:06:03,140
‫Rimuovendolo, beh, questi operatori non

93
00:06:03,140 --> 00:06:04,833
‫funzioneranno più.

94
00:06:05,830 --> 00:06:07,123
‫Quindi, proviamo di nuovo.

95
00:06:08,100 --> 00:06:12,003
‫Ancora una volta, rimuoverà tutti questi simboli del dollaro.

96
00:06:13,712 --> 00:06:16,080
‫Quindi, se lo faccio ora, allora

97
00:06:16,080 --> 00:06:17,930
‫effettivamente otteniamo questo errore

98
00:06:17,930 --> 00:06:20,270
‫e non possiamo più usare questo

99
00:06:20,270 --> 00:06:23,900
‫trucco qui, questo attacco di iniezione di query, per accedere.

100
00:06:23,900 --> 00:06:26,720
‫Quindi, questo risolve il primo problema,

101
00:06:26,720 --> 00:06:28,960
‫ma ora usiamo quell'altro

102
00:06:28,960 --> 00:06:31,700
‫middleware che abbiamo appena richiesto prima.

103
00:06:31,700 --> 00:06:36,700
‫Quindi, app. usa e XSS, va bene?

104
00:06:37,590 --> 00:06:39,870
‫Questo pulirà quindi qualsiasi input

105
00:06:39,870 --> 00:06:42,283
‫dell'utente da codice HTML dannoso, in pratica.

106
00:06:43,210 --> 00:06:45,780
‫Immagina che un utente malintenzionato tenti

107
00:06:45,780 --> 00:06:48,180
‫di inserire del codice HTML

108
00:06:48,180 --> 00:06:50,620
‫dannoso con del codice JavaScript allegato.

109
00:06:50,620 --> 00:06:54,090
‫Se questo venisse poi iniettato nel nostro sito HTML,

110
00:06:54,090 --> 00:06:56,423
‫potrebbe davvero creare dei danni.

111
00:06:57,300 --> 00:06:59,710
‫Usando questo middleware, lo

112
00:06:59,710 --> 00:07:03,063
‫impediamo fondamentalmente convertendo tutti questi simboli HTML.

113
00:07:04,380 --> 00:07:07,040
‫Come ho detto prima, la stessa convalida di

114
00:07:07,040 --> 00:07:10,937
‫Mongoose è in realtà già un'ottima protezione contro XSS, perché non

115
00:07:12,230 --> 00:07:14,170
‫consentirà a nessuna roba pazzesca

116
00:07:14,170 --> 00:07:16,730
‫di entrare nel nostro database, a patto

117
00:07:16,730 --> 00:07:18,613
‫che la usiamo correttamente.

118
00:07:19,480 --> 00:07:22,320
‫Ogni volta che puoi, aggiungi semplicemente un po'

119
00:07:22,320 --> 00:07:25,037
‫di convalida ai tuoi schemi Mongoose,

120
00:07:25,037 --> 00:07:29,290
‫e questo dovrebbe principalmente proteggerti dallo scripting cross-site, almeno sul lato server.

121
00:07:29,290 --> 00:07:33,083
‫Testiamo molto rapidamente anche questo middleware qui.

122
00:07:34,990 --> 00:07:38,333
‫Quello che farò è semplicemente creare un nuovo

123
00:07:39,960 --> 00:07:43,573
‫utente e chiamiamolo qui "tester" o qualcosa del genere.

124
00:07:44,500 --> 00:07:47,420
‫La password è giusta, e

125
00:07:47,420 --> 00:07:50,403
‫qui, nel nome, aggiungiamo del codice HTML.

126
00:07:51,480 --> 00:07:56,480
‫Quindi, div con l'id di bad-code.

127
00:08:00,470 --> 00:08:02,503
‫Va bene, ora proviamo.

128
00:08:06,790 --> 00:08:10,310
‫Vedete che il modulo XSS che abbiamo

129
00:08:10,310 --> 00:08:13,263
‫usato ha effettivamente convertito questi

130
00:08:14,190 --> 00:08:19,163
‫simboli HTML qui, principalmente questo, in questa entità HTML qui.

131
00:08:21,440 --> 00:08:24,130
‫Cancelliamo velocemente questo tizio.

132
00:08:24,130 --> 00:08:27,593
‫Non abbiamo affatto bisogno di lui. (Ride) Questa è la

133
00:08:29,556 --> 00:08:33,300
‫nostra protezione rapida e semplice contro alcuni di questi

134
00:08:33,300 --> 00:08:36,293
‫attacchi che utilizzano la sanificazione dei dati.

135
00:08:37,280 --> 00:08:40,460
‫Ricorda anche che la libreria di funzioni di validazione

136
00:08:40,460 --> 00:08:42,770
‫che abbiamo usato prima contiene anche

137
00:08:42,770 --> 00:08:45,123
‫un paio di fantastiche funzioni di sanificazione.

138
00:08:45,980 --> 00:08:49,820
‫Potremmo anche creare manualmente del middleware usando questi, ma

139
00:08:49,820 --> 00:08:51,820
‫ancora una volta, non

140
00:08:51,820 --> 00:08:55,890
‫è realmente necessario, perché Mongoose applica già uno schema rigoroso.

141
00:08:55,890 --> 00:08:58,250
‫Quindi, se incontra qualcosa

142
00:08:58,250 --> 00:09:00,870
‫di strano, genererà un errore e sì,

143
00:09:00,870 --> 00:09:03,290
‫è già una protezione abbastanza buona.

144
00:09:03,290 --> 00:09:06,240
‫Quindi, abbiamo quasi finito con la parte di sicurezza.

145
00:09:06,240 --> 00:09:07,740
‫Tutto ciò che dobbiamo

146
00:09:07,740 --> 00:09:10,163
‫fare nel prossimo video è prevenire l'inquinamento da parametri.

