﻿1
00:00:01,210 --> 00:00:04,340
‫Sprecher: Willkommen zum letzten Video dieses Abschnitts.

2
00:00:04,340 --> 00:00:05,610
‫Und in

3
00:00:05,610 --> 00:00:07,880
‫diesem Fall werden wir Parameterverschmutzung

4
00:00:07,880 --> 00:00:10,593
‫verhindern, indem wir ein weiteres NPM-Paket verwenden.

5
00:00:12,270 --> 00:00:15,400
‫Aber bevor wir dieses Paket installieren, schauen

6
00:00:15,400 --> 00:00:17,780
‫wir uns den Fehler an.

7
00:00:17,780 --> 00:00:20,820
‫Aber bevor wir das tun, gehen wir

8
00:00:20,820 --> 00:00:22,290
‫zu Postman und

9
00:00:22,290 --> 00:00:25,363
‫sehen, warum wir die Parameterverschmutzung überhaupt verhindern müssen.

10
00:00:27,410 --> 00:00:30,993
‫Zuerst müssen wir uns also einloggen.

11
00:00:32,240 --> 00:00:35,590
‫Okay, mit diesem Benutzer und diesem Passwort.

12
00:00:35,590 --> 00:00:39,290
‫Jetzt können wir also die Get All Tours-Route verwenden.

13
00:00:39,290 --> 00:00:41,570
‫In Ordnung, und jetzt

14
00:00:41,570 --> 00:00:45,140
‫werde ich hier einige Parameter zum Abfragestring hinzufügen.

15
00:00:45,140 --> 00:00:49,443
‫Mal sehen, ich möchte nach

16
00:00:52,830 --> 00:00:57,233
‫Dauer und gleichzeitig auch nach Preis sortieren.

17
00:00:58,110 --> 00:01:01,140
‫Und es macht nicht wirklich viel

18
00:01:01,140 --> 00:01:05,100
‫Sinn, weil wir bereit sind, nur einen Sortierparameter zu haben.

19
00:01:05,100 --> 00:01:08,310
‫Schauen wir uns also an, was wir damit tatsächlich herausbekommen.

20
00:01:08,310 --> 00:01:11,849
‫Und tatsächlich erhalten wir eine Fehlermeldung, die dies sagt. Abfragezeichenfolge. Sortieren. split ist keine Funktion.

21
00:01:11,849 --> 00:01:15,890
‫Und das passiert in den apiFeatures. js in Zeile 23.

22
00:01:15,890 --> 00:01:20,890
‫Also lass uns das öffnen und hier, in Zeile 23,

23
00:01:22,550 --> 00:01:23,800
‫tritt dieser Fehler auf.

24
00:01:26,560 --> 00:01:31,560
‫Es wird also versucht, die sort-Eigenschaft hier aufzuteilen, von der wir

25
00:01:32,520 --> 00:01:35,710
‫erwarten, dass sie eine Zeichenfolge ist.

26
00:01:35,710 --> 00:01:37,930
‫Aber im Moment, da wir es

27
00:01:37,930 --> 00:01:41,110
‫zweimal definiert haben, also einmal sortieren und dann zweimal sortieren, erstellt

28
00:01:41,110 --> 00:01:44,510
‫Express tatsächlich ein Array mit diesen beiden Werten, Dauer und Preis.

29
00:01:44,510 --> 00:01:48,423
‫Lass mich dir das tatsächlich zeigen.

30
00:01:49,610 --> 00:01:51,713
‫Konsole. Protokoll.

31
00:01:54,320 --> 00:01:55,800
‫Jetzt kopiere ich es.

32
00:01:55,800 --> 00:01:57,053
‫Okay, versuche es noch einmal.

33
00:02:01,660 --> 00:02:03,323
‫Hier ist der gleiche Fehler

34
00:02:04,210 --> 00:02:07,490
‫und wie gesagt, es ist tatsächlich ein Array mit Dauer und Preis.

35
00:02:07,490 --> 00:02:10,540
‫Und damit können wir natürlich nicht splitten, da Split

36
00:02:10,540 --> 00:02:12,520
‫nur bei Saiten funktioniert, okay?

37
00:02:12,520 --> 00:02:16,370
‫Dies ist also ein typisches Problem, das

38
00:02:16,370 --> 00:02:19,850
‫sich Angreifer dann zunutze machen können.

39
00:02:19,850 --> 00:02:21,920
‫In Ordnung, und im Grunde werden

40
00:02:21,920 --> 00:02:24,480
‫wir jetzt eine Middleware verwenden, die diese doppelten

41
00:02:24,480 --> 00:02:26,290
‫Felder einfach entfernt, okay?

42
00:02:26,290 --> 00:02:30,930
‫Und das installieren wir.

43
00:02:30,930 --> 00:02:33,470
‫Es wird

44
00:02:33,470 --> 00:02:38,200
‫HPP genannt, was für HTTP-Parameter-Verschmutzung steht.

45
00:02:38,200 --> 00:02:40,393
‫Gut.

46
00:02:42,080 --> 00:02:42,913
‫Lassen Sie es uns hier schnell anfordern.

47
00:02:45,700 --> 00:02:47,883
‫In Ordnung, und so ist dies noch eine sehr einfache.

48
00:02:55,810 --> 00:03:00,550
‫Alles, was wir tun müssen, ist eine App. verwenden und dann HPP aufrufen.

49
00:03:00,550 --> 00:03:05,263
‫Verhindern Sie daher eine Parameterverschmutzung.

50
00:03:06,710 --> 00:03:10,750
‫Und dieser hier sollte am Ende wieder verwendet werden,

51
00:03:12,750 --> 00:03:15,910
‫okay, denn was er bewirkt, ist die

52
00:03:15,910 --> 00:03:18,120
‫Abfragezeichenfolge aufzuräumen, in Ordnung?

53
00:03:18,120 --> 00:03:20,470
‫Versuchen wir es also noch einmal.

54
00:03:20,470 --> 00:03:22,003
‫Es dauert ein bisschen, und los geht's.

55
00:03:24,050 --> 00:03:26,690
‫Der Fehler ist also weg und es wird jetzt

56
00:03:26,690 --> 00:03:28,080
‫nur der letzte verwendet.

57
00:03:28,080 --> 00:03:31,120
‫Also sortiert es jetzt meinen Preis,

58
00:03:31,120 --> 00:03:34,930
‫und tatsächlich beginnen wir mit dem niedrigsten Preis und

59
00:03:34,930 --> 00:03:38,760
‫steigen dann um 497 auf bis zum teuersten von

60
00:03:38,760 --> 00:03:40,860
‫fast 3000, in Ordnung?

61
00:03:40,860 --> 00:03:44,423
‫Das ist also irgendwie behoben, aber in einigen Fällen möchten

62
00:03:45,380 --> 00:03:48,260
‫wir tatsächlich einige doppelte Eigenschaften oder Felder, oder?

63
00:03:48,260 --> 00:03:52,800
‫Zum Beispiel möchten wir vielleicht nach Touren mit der Dauer

64
00:03:52,800 --> 00:03:55,690
‫von neun und fünf suchen.

65
00:03:55,690 --> 00:03:57,913
‫Denken Sie also daran, dass wir

66
00:04:01,690 --> 00:04:04,960
‫dies in unserer API tun können, sodass die Dauer fünf

67
00:04:04,960 --> 00:04:08,283
‫beträgt und wir gleichzeitig die Dauer neun sagen können, okay?

68
00:04:09,670 --> 00:04:13,980
‫Und wir wollen, dass dies tatsächlich funktioniert, aber im Moment funktioniert es nicht.

69
00:04:13,980 --> 00:04:17,740
‫Es findet doch nur die Tour mit neun Tagen, oder?

70
00:04:17,740 --> 00:04:22,010
‫Aber wenn nicht, oder HPP-Middleware.

71
00:04:22,010 --> 00:04:24,823
‫Also deaktivieren wir es.

72
00:04:26,000 --> 00:04:28,253
‫Wenn wir es also nicht aktiv hätten,

73
00:04:29,130 --> 00:04:31,130
‫würden wir drei Touren finden, eine

74
00:04:31,130 --> 00:04:35,130
‫mit der Dauer fünf, dann hier mit der Dauer neun und hier eine

75
00:04:35,130 --> 00:04:37,000
‫weitere mit der Dauer fünf.

76
00:04:37,000 --> 00:04:39,300
‫Okay, und in diesem Fall ist dies

77
00:04:39,300 --> 00:04:40,930
‫tatsächlich das erwartete Verhalten.

78
00:04:40,930 --> 00:04:43,890
‫Was können wir also tun, um die Middleware verwenden zu

79
00:04:43,890 --> 00:04:45,800
‫können und trotzdem das Ergebnis

80
00:04:45,800 --> 00:04:48,463
‫zu erhalten, das wir hier erwarten, mit der

81
00:04:48,463 --> 00:04:51,670
‫Dauer können wir einige Parameter auf die Whitelist setzen, okay?

82
00:04:51,670 --> 00:04:55,770
‫In diese HPP-Funktion können wir also noch einmal

83
00:04:55,770 --> 00:05:00,770
‫ein Objekt übergeben und dann dort die Whitelist angeben, okay?

84
00:05:01,050 --> 00:05:05,543
‫Und die weiße Liste ist einfach ein Array von Eigenschaften,

85
00:05:06,560 --> 00:05:10,690
‫für die wir tatsächlich Duplikate in der Abfragezeichenfolge zulassen.

86
00:05:10,690 --> 00:05:14,213
‫Okay?

87
00:05:15,990 --> 00:05:16,823
‫Und Dauer gehört natürlich dazu, ja?

88
00:05:16,823 --> 00:05:20,943
‫Versuchen wir es also noch einmal.

89
00:05:22,070 --> 00:05:23,543
‫Und so erhalten wir im Moment immer noch unsere drei Ergebnisse wie zuvor.

90
00:05:26,292 --> 00:05:30,890
‫Aber wenn wir es mit sort versucht haben, erstellen

91
00:05:30,890 --> 00:05:33,480
‫wir hier eine neue Registerkarte.

92
00:05:33,480 --> 00:05:35,483
‫Wenn wir es also mit diesen doppelten

93
00:05:40,990 --> 00:05:43,453
‫Sortierungen versucht haben, sollten wir auch keinen Fehler bekommen.

94
00:05:44,350 --> 00:05:46,730
‫Nun waren wir nicht eingeloggt, also holen wir uns

95
00:05:46,730 --> 00:05:48,183
‫hier einfach unser Fehlertoken.

96
00:05:49,295 --> 00:05:54,295
‫Versuchen Sie das noch einmal.

97
00:05:54,400 --> 00:05:55,650
‫Und jetzt funktioniert es tatsächlich, wir erhalten keine Fehlermeldung.

98
00:05:55,650 --> 00:05:58,870
‫Und damit die HPP-Middleware ihren Job macht.

99
00:05:58,870 --> 00:06:02,713
‫Gut?

100
00:06:04,100 --> 00:06:05,680
‫Schließen Sie auch

101
00:06:05,680 --> 00:06:09,110
‫dieses, und jetzt sollten wir auch noch einige andere

102
00:06:09,110 --> 00:06:12,450
‫Felder in unserer Whitelist angeben, da wir beispielsweise auch

103
00:06:12,450 --> 00:06:16,250
‫nach diesem suchen möchten, oder nach der Anzahl der Bewertungen.

104
00:06:16,250 --> 00:06:18,130
‫Also kopieren wir sie einfach alle hier in unsere Whitelist.

105
00:06:18,130 --> 00:06:21,863
‫Also auch der Durchschnitt.

106
00:06:28,940 --> 00:06:30,423
‫Dann auch die Dauer,

107
00:06:35,210 --> 00:06:38,700
‫die wir schon haben, und sagen wir die maximale Gruppengröße.

108
00:06:38,700 --> 00:06:40,403
‫Vielleicht wollen wir auch die Schwierigkeit.

109
00:06:46,680 --> 00:06:48,983
‫Und auch der Preis.

110
00:06:54,920 --> 00:06:56,070
‫Und ich denke, das sollte dann reichen.

111
00:06:56,070 --> 00:06:58,773
‫Gut.

112
00:07:03,370 --> 00:07:04,223
‫Und es

113
00:07:05,950 --> 00:07:09,540
‫mag ein bisschen seltsam erscheinen, alle Feldnamen hier manuell einzugeben, und später

114
00:07:09,540 --> 00:07:12,350
‫müssen wir möglicherweise dasselbe für die anderen Ressourcen tun,

115
00:07:12,350 --> 00:07:15,410
‫und das wird diese weiße Liste dann noch größer machen, oder?

116
00:07:15,410 --> 00:07:19,010
‫Und natürlich könnten wir hier einige komplexe Dinge tun,

117
00:07:19,010 --> 00:07:21,860
‫um diese Feldnamen aus dem Modell selbst zu

118
00:07:21,860 --> 00:07:23,930
‫erhalten, aber noch einmal

119
00:07:23,930 --> 00:07:26,690
‫möchte ich es hier einfach halten, okay?

120
00:07:26,690 --> 00:07:28,980
‫Und so definiere ich diese Feldnamen

121
00:07:28,980 --> 00:07:32,160
‫hier einfach manuell und nenne dann einen Tag, in Ordnung?

122
00:07:32,160 --> 00:07:34,900
‫Okay, und damit ist unser

123
00:07:34,900 --> 00:07:38,620
‫Abschnitt zur Authentifizierung, Autorisierung und Sicherheit abgeschlossen.

124
00:07:38,620 --> 00:07:41,590
‫Und wenn Sie noch mehr Spaß damit haben möchten, können

125
00:07:41,590 --> 00:07:44,620
‫Sie natürlich versuchen, einige der Dinge umzusetzen, die ich in

126
00:07:44,620 --> 00:07:46,730
‫dem zusammenfassenden Video vorgeschlagen habe, das ich

127
00:07:46,730 --> 00:07:49,213
‫Ihnen zuvor mit dieser Folie gezeigt habe, mit

128
00:07:49,213 --> 00:07:51,260
‫all diesen verschiedenen Sicherheitsmaßnahmen, die wir bereits

129
00:07:51,260 --> 00:07:53,160
‫implementiert haben und mit einigen

130
00:07:53,160 --> 00:07:55,530
‫habe ich dir gesagt, du sollst damit experimentieren.

131
00:07:55,530 --> 00:07:57,970
‫Also zögern Sie nicht, das zu tun, oder

132
00:07:57,970 --> 00:08:00,700
‫wenn nicht, dann lassen Sie uns einfach gemeinsam

133
00:08:00,700 --> 00:08:04,330
‫zum nächsten Abschnitt übergehen, der wieder sehr spannend wird, weil wir

134
00:08:04,330 --> 00:08:06,750
‫dann wirklich mit der Modellierung der

135
00:08:06,750 --> 00:08:09,800
‫Daten beginnen und einige wirklich fortgeschrittene MongoDB-Sachen lernen werden.

136
00:08:09,800 --> 00:08:12,920
‫Ich kann es kaum erwarten, dich dort zu sehen.

