﻿1
00:00:01,004 --> 00:00:02,610
‫-: In diesem

2
00:00:02,610 --> 00:00:06,690
‫Vortrag werden wir zwei weitere Pakete verwenden, um unsere Anwendungssicherheit

3
00:00:06,690 --> 00:00:09,823
‫zu verbessern, und diesmal um eine Datenbereinigung durchzuführen.

4
00:00:11,290 --> 00:00:13,630
‫Datenbereinigung bedeutet also im Grunde, alle

5
00:00:13,630 --> 00:00:15,560
‫Daten, die in die

6
00:00:15,560 --> 00:00:18,313
‫Anwendung gelangen, von bösartigem Code zu bereinigen.

7
00:00:19,228 --> 00:00:22,053
‫Also Code, der versucht, unsere Anwendung anzugreifen.

8
00:00:22,930 --> 00:00:26,660
‫In diesem Fall versuchen wir uns gegen zwei Angriffe zu verteidigen.

9
00:00:26,660 --> 00:00:30,240
‫Also, schreiben wir es auf, und wir

10
00:00:30,240 --> 00:00:34,073
‫machen es, sagen wir, gleich hier nach dem Body-Parser.

11
00:00:35,039 --> 00:00:37,400
‫Diese Middleware liest hier die Daten in

12
00:00:37,400 --> 00:00:40,140
‫die Anfrage ein. Körper, und erst

13
00:00:40,140 --> 00:00:42,890
‫danach können wir diese Daten tatsächlich bereinigen, oder?

14
00:00:42,890 --> 00:00:46,860
‫Dies ist ein perfekter Ort für die Datenbereinigung.

15
00:00:46,860 --> 00:00:51,860
‫Daher werden wir eine Datenbereinigung gegen

16
00:00:55,190 --> 00:01:00,190
‫NoSQL-Abfrageinjektion und auch eine Datenbereinigung

17
00:01:05,620 --> 00:01:09,560
‫gegen Cross-Site-Scripting-Angriffe durchführen.

18
00:01:09,560 --> 00:01:11,670
‫Und bevor Sie etwas anderes

19
00:01:11,670 --> 00:01:14,600
‫tun, möchte ich Ihnen zeigen, warum es so extrem

20
00:01:14,600 --> 00:01:17,733
‫wichtig ist, sich gegen diese Art von Angriff zu verteidigen.

21
00:01:19,010 --> 00:01:22,200
‫Wir simulieren jetzt eine NoSQL-Abfrageinjektion und ich hoffe, dass

22
00:01:22,200 --> 00:01:25,620
‫Sie genauso schockiert sind wie ich, als ich zum ersten

23
00:01:25,620 --> 00:01:28,263
‫Mal entdeckte, wie mächtig das sein kann.

24
00:01:29,820 --> 00:01:32,570
‫Lassen Sie uns nun hier zu Postman gehen

25
00:01:32,570 --> 00:01:34,810
‫und versuchen, uns als jemand

26
00:01:34,810 --> 00:01:37,400
‫anzumelden, auch ohne seine E-Mail-Adresse zu kennen.

27
00:01:37,400 --> 00:01:41,853
‫Alles klar, also im Grunde geben wir einfach ein Passwort ein, sagen

28
00:01:42,800 --> 00:01:46,070
‫wir dieses hier, wir können uns einloggen, aber

29
00:01:46,070 --> 00:01:48,603
‫auch ohne die E-Mail-Adresse zu kennen.

30
00:01:49,750 --> 00:01:51,310
‫Auch dies werden

31
00:01:51,310 --> 00:01:54,480
‫wir tun, indem wir eine NoSQL-Abfrageinjektion simulieren, und

32
00:01:54,480 --> 00:01:57,840
‫der einfachste Weg, dies zu tun, geht so.

33
00:01:57,840 --> 00:02:00,530
‫Anstatt eine echte E-Mail

34
00:02:00,530 --> 00:02:03,933
‫anzugeben, spezifizieren wir im Grunde diese Abfrage.

35
00:02:06,450 --> 00:02:10,010
‫Wir verwenden den MongoDB-größer-als-Operator

36
00:02:10,010 --> 00:02:13,770
‫und setzen ihn auf nichts, okay?

37
00:02:13,770 --> 00:02:15,963
‫Und jetzt, was passiert?

38
00:02:17,810 --> 00:02:21,810
‫Tatsächlich sind wir jetzt als Admin eingeloggt.

39
00:02:21,810 --> 00:02:24,673
‫Sie sehen also, wir haben sogar unser Zugriffstoken bekommen.

40
00:02:25,590 --> 00:02:28,550
‫Ja, wir sind jetzt wirklich eingeloggt und das

41
00:02:28,550 --> 00:02:30,873
‫macht mich total fertig, okay?

42
00:02:31,870 --> 00:02:33,940
‫Auch hier konnten wir uns,

43
00:02:33,940 --> 00:02:37,390
‫ohne die E-Mail-Adresse, nur das Passwort zu kennen, einloggen.

44
00:02:37,390 --> 00:02:39,540
‫Und glauben Sie mir, es ist nicht

45
00:02:39,540 --> 00:02:42,840
‫wirklich schwer, eine Reihe wirklich beliebter Passwörter zu finden, die

46
00:02:42,840 --> 00:02:44,693
‫in jeder Anwendung verwendet werden.

47
00:02:46,198 --> 00:02:49,203
‫Vor dieser Art von Angriff müssen wir uns also schützen.

48
00:02:50,670 --> 00:02:54,913
‫Dies funktioniert im Grunde, weil dies immer so sein wird, also das ist

49
00:02:55,940 --> 00:02:58,840
‫tatsächlich - das sehen Sie auch in Compass.

50
00:02:58,840 --> 00:03:01,590
‫Also kopiere ich es, oder eigentlich, lasst uns das alles kopieren.

51
00:03:05,130 --> 00:03:08,313
‫Versuchen Sie dann, genau nach diesem Filter zu filtern.

52
00:03:09,460 --> 00:03:12,660
‫Jetzt fehlen uns nur noch die geschweiften

53
00:03:12,660 --> 00:03:15,870
‫Klammern, aber jetzt erhalten wir tatsächlich eine gültige Abfrage.

54
00:03:15,870 --> 00:03:20,440
‫Lassen Sie uns auf Suchen klicken, und tatsächlich werden alle Benutzer zurückgegeben.

55
00:03:20,440 --> 00:03:24,033
‫Im Grunde stimmen also alle Benutzer mit dieser Abfrage überein.

56
00:03:25,340 --> 00:03:28,540
‫Auch hier liegt es daran, dass dies hier immer wahr ist.

57
00:03:28,540 --> 00:03:31,503
‫Dadurch werden dann alle Benutzernamen ausgewählt.

58
00:03:33,330 --> 00:03:36,340
‫Diese bösartige Abfrageinjektion hier hat es

59
00:03:36,340 --> 00:03:40,760
‫uns ermöglicht, uns nur mit diesem Passwort anzumelden, in Ordnung?

60
00:03:40,760 --> 00:03:43,510
‫Also, um uns davor zu schützen,

61
00:03:43,510 --> 00:03:45,623
‫installieren wir eine

62
00:03:48,560 --> 00:03:52,953
‫weitere Middleware, und diese heißt express-mongo-sanitize, und da wir hier

63
00:03:59,680 --> 00:04:02,610
‫sind, installieren wir auch die andere,

64
00:04:02,610 --> 00:04:04,900
‫die wir brauchen werden, aber

65
00:04:04,900 --> 00:04:08,873
‫später in diesem Video, das einfach XSS heißt.

66
00:04:10,486 --> 00:04:14,603
‫Eigentlich war das nicht richtig; es heißt XSS_clean.

67
00:04:18,530 --> 00:04:22,760
‫Wir müssen fortfahren und das andere deinstallieren.

68
00:04:22,760 --> 00:04:24,700
‫NPM deinstalliert XSS.

69
00:04:29,308 --> 00:04:34,308
‫Werfen wir einen Blick auf unser Paket. json, und tatsächlich ist es weg.

70
00:04:35,280 --> 00:04:38,743
‫Auch hier ist XSS_clean diejenige, die wir verwenden möchten.

71
00:04:42,150 --> 00:04:43,840
‫Wie auch immer, lassen Sie

72
00:04:43,840 --> 00:04:45,923
‫uns zunächst noch einmal über die NoSQL-Abfrageinjektion sprechen.

73
00:04:48,040 --> 00:04:51,730
‫Alles, was wir verwenden werden, ist -

74
00:04:51,730 --> 00:04:54,343
‫und natürlich müssen wir

75
00:04:57,862 --> 00:05:02,695
‫es zuerst anfordern, daher ist const mongoSanitize gleich express-mongo-sanitize.

76
00:05:08,610 --> 00:05:12,790
‫Auch hier hilft mir VS Code hier, und da wir hier sind,

77
00:05:12,790 --> 00:05:14,853
‫benötigen wir auch den nächsten.

78
00:05:16,120 --> 00:05:18,763
‫Die Variable, die ich benötige,

79
00:05:20,000 --> 00:05:23,947
‫heißt XSS, und dann heißt das Modul XSS_clean.

80
00:05:27,160 --> 00:05:32,103
‫Also, lass uns jetzt dieses MongoSanitize hier verwenden - genau hier.

81
00:05:33,490 --> 00:05:36,450
‫MongoSanitize ist eine Funktion, die wir aufrufen, die

82
00:05:36,450 --> 00:05:38,700
‫dann eine Middleware-Funktion zurückgibt, die wir

83
00:05:38,700 --> 00:05:40,110
‫dann verwenden können.

84
00:05:40,110 --> 00:05:42,330
‫Dies reicht aus, um uns vor der Art

85
00:05:42,330 --> 00:05:44,820
‫von Angriffen zu schützen, die wir gerade gesehen haben.

86
00:05:44,820 --> 00:05:46,610
‫Diese Middleware sieht sich

87
00:05:46,610 --> 00:05:49,900
‫also den Anforderungstext, die Anforderungsabfragezeichenfolge und auch

88
00:05:49,900 --> 00:05:52,640
‫Request an. Params, und

89
00:05:52,640 --> 00:05:54,190
‫dann werden im

90
00:05:54,190 --> 00:05:56,363
‫Grunde alle Dollarzeichen und

91
00:05:57,410 --> 00:06:00,730
‫Punkte herausgefiltert, weil MongoDB-Operatoren so geschrieben sind.

92
00:06:00,730 --> 00:06:03,140
‫Wenn Sie das entfernen, werden diese Operatoren

93
00:06:03,140 --> 00:06:04,833
‫dann nicht mehr funktionieren.

94
00:06:05,830 --> 00:06:07,123
‫Versuchen wir es also noch einmal.

95
00:06:08,100 --> 00:06:12,003
‫Auch hier werden alle diese Dollarzeichen entfernt.

96
00:06:13,712 --> 00:06:16,080
‫Wenn ich das also jetzt mache,

97
00:06:16,080 --> 00:06:17,930
‫dann bekommen wir tatsächlich

98
00:06:17,930 --> 00:06:20,270
‫diesen Fehler, und wir können diesen

99
00:06:20,270 --> 00:06:23,900
‫Trick hier, diesen Query-Injection-Angriff, nicht mehr verwenden, um uns einzuloggen.

100
00:06:23,900 --> 00:06:26,720
‫Das behebt also das erste Problem, aber

101
00:06:26,720 --> 00:06:28,960
‫jetzt verwenden wir die andere

102
00:06:28,960 --> 00:06:31,700
‫Middleware, die wir ebenfalls gerade benötigt haben.

103
00:06:31,700 --> 00:06:36,700
‫Also App. verwenden und XSS, in Ordnung?

104
00:06:37,590 --> 00:06:39,870
‫Dadurch werden im Grunde

105
00:06:39,870 --> 00:06:42,283
‫alle Benutzereingaben von bösartigem HTML-Code befreit.

106
00:06:43,210 --> 00:06:45,780
‫Stellen Sie sich vor, ein

107
00:06:45,780 --> 00:06:48,180
‫Angreifer würde versuchen, bösartigen

108
00:06:48,180 --> 00:06:50,620
‫HTML-Code mit angehängtem JavaScript-Code einzufügen.

109
00:06:50,620 --> 00:06:54,090
‫Wenn das dann später in unsere HTML-Site eingefügt würde,

110
00:06:54,090 --> 00:06:56,423
‫könnte es dann wirklich Schaden anrichten.

111
00:06:57,300 --> 00:06:59,710
‫Mit dieser Middleware verhindern wir

112
00:06:59,710 --> 00:07:03,063
‫das im Grunde durch die Konvertierung all dieser HTML-Symbole.

113
00:07:04,380 --> 00:07:07,040
‫Wie ich schon sagte, die Mongoose-Validierung selbst

114
00:07:07,040 --> 00:07:10,937
‫ist eigentlich schon ein sehr guter Schutz gegen XSS, weil sie

115
00:07:12,230 --> 00:07:14,170
‫nicht wirklich zulässt, dass irgendwelche

116
00:07:14,170 --> 00:07:16,730
‫verrückten Sachen in unsere Datenbank gelangen, solange

117
00:07:16,730 --> 00:07:18,613
‫wir sie richtig verwenden.

118
00:07:19,480 --> 00:07:22,320
‫Wenn Sie können, fügen Sie Ihren Mongoose-Schemas einfach

119
00:07:22,320 --> 00:07:25,037
‫eine gewisse Validierung hinzu, und das

120
00:07:25,037 --> 00:07:29,290
‫sollte Sie vor allem vor Cross-Site-Scripting schützen, zumindest auf der Serverseite.

121
00:07:29,290 --> 00:07:33,083
‫Lassen Sie uns diese Middleware auch hier ganz schnell testen.

122
00:07:34,990 --> 00:07:38,333
‫Was ich tun werde, ist, einfach einen neuen Benutzer

123
00:07:39,960 --> 00:07:43,573
‫zu erstellen, und nennen wir ihn hier "Tester" oder so ähnlich.

124
00:07:44,500 --> 00:07:47,420
‫Das Passwort ist richtig, und hier,

125
00:07:47,420 --> 00:07:50,403
‫im Namen, fügen wir etwas HTML-Code hinzu.

126
00:07:51,480 --> 00:07:56,480
‫Also div mit der ID von Bad-Code.

127
00:08:00,470 --> 00:08:02,503
‫Gut, versuchen wir es jetzt.

128
00:08:06,790 --> 00:08:10,310
‫Sie sehen, dass das von uns

129
00:08:10,310 --> 00:08:13,263
‫verwendete XSS-Modul diese HTML-Symbole hier,

130
00:08:14,190 --> 00:08:19,163
‫meistens dieses, tatsächlich in diese HTML-Entität hier konvertiert hat.

131
00:08:21,440 --> 00:08:24,130
‫Lass uns diesen Typen einfach schnell löschen.

132
00:08:24,130 --> 00:08:27,593
‫Wir brauchen ihn überhaupt nicht. (lacht) Das

133
00:08:29,556 --> 00:08:33,300
‫ist unser schneller und einfacher Schutz vor

134
00:08:33,300 --> 00:08:36,293
‫einigen dieser Angriffe durch Datenbereinigung.

135
00:08:37,280 --> 00:08:40,460
‫Denken Sie auch daran, dass die

136
00:08:40,460 --> 00:08:42,770
‫zuvor verwendete Validierungsfunktionsbibliothek

137
00:08:42,770 --> 00:08:45,123
‫auch einige coole Bereinigungsfunktionen enthält.

138
00:08:45,980 --> 00:08:49,820
‫Wir könnten damit auch manuell Middleware erstellen, aber

139
00:08:49,820 --> 00:08:51,820
‫auch das ist nicht

140
00:08:51,820 --> 00:08:55,890
‫wirklich notwendig, da Mongoose bereits ein strenges Schema erzwingt.

141
00:08:55,890 --> 00:08:58,250
‫Wenn es dann auf etwas

142
00:08:58,250 --> 00:09:00,870
‫Seltsames stößt, wird ein Fehler ausgegeben, und ja,

143
00:09:00,870 --> 00:09:03,290
‫das ist bereits ein ziemlich guter Schutz.

144
00:09:03,290 --> 00:09:06,240
‫Also, wir sind wirklich fast fertig mit dem Sicherheitsteil.

145
00:09:06,240 --> 00:09:07,740
‫Alles, was wir im

146
00:09:07,740 --> 00:09:10,163
‫nächsten Video tun müssen, ist, Parameter Pollution zu verhindern.

