﻿1
00:00:01,140 --> 00:00:04,000
‫Kursleiter: Lassen Sie uns in dieser Vorlesung

2
00:00:04,000 --> 00:00:06,120
‫eine Ratenbegrenzung implementieren, um

3
00:00:06,120 --> 00:00:09,130
‫zu verhindern, dass dieselbe IP zu viele Anfragen

4
00:00:09,130 --> 00:00:11,730
‫an unsere API stellt, und dies wird

5
00:00:11,730 --> 00:00:14,893
‫uns helfen, Angriffe wie Denial-of-Service- oder Brute-Force-Angriffe zu verhindern.

6
00:00:16,470 --> 00:00:19,230
‫Dieser Ratenbegrenzer wird also als

7
00:00:19,230 --> 00:00:21,920
‫globale Middleware-Funktion implementiert.

8
00:00:21,920 --> 00:00:24,830
‫Im Grunde genommen wird der Ratenbegrenzer also die

9
00:00:24,830 --> 00:00:28,490
‫Anzahl der Anfragen zählen, die von einer IP kommen, und

10
00:00:28,490 --> 00:00:30,249
‫dann, wenn es zu

11
00:00:30,249 --> 00:00:32,970
‫viele Anfragen gibt, diese Anfragen blockieren, okay?

12
00:00:32,970 --> 00:00:35,400
‫Daher ist es sinnvoll, dies in einer globalen Middleware

13
00:00:35,400 --> 00:00:39,901
‫zu implementieren, also tun wir das in App. js.

14
00:00:39,901 --> 00:00:43,410
‫Wir haben diesen also schon lange nicht mehr verwendet,

15
00:00:43,410 --> 00:00:45,550
‫und der Ratenbegrenzer, den

16
00:00:45,550 --> 00:00:49,430
‫wir verwenden werden, ist ein npm-Paket namens Express Rate Limit.

17
00:00:49,430 --> 00:00:50,803
‫Also installieren wir das.

18
00:00:52,800 --> 00:00:57,800
‫npm i Express-Rate-Limit, in Ordnung.

19
00:01:01,770 --> 00:01:04,853
‫Und dann, hier oben in unserer Anwendung,

20
00:01:08,440 --> 00:01:12,430
‫nennen wir es rateLimit und fordern dann den Express an,

21
00:01:13,329 --> 00:01:17,400
‫und tatsächlich ist er bereits da. VS-Code holt sich diesen

22
00:01:17,400 --> 00:01:21,440
‫Namen aus unserem Paket. json-Datei.

23
00:01:21,440 --> 00:01:23,660
‫Okay, und dieser Name, den ich

24
00:01:23,660 --> 00:01:26,320
‫ihm hier gegeben habe, stammt normalerweise aus der Dokumentation.

25
00:01:26,320 --> 00:01:28,760
‫Wenn sie es also in der

26
00:01:28,760 --> 00:01:32,340
‫Dokumentation so machen, nun, dann folge ich auch diesem Weg.

27
00:01:32,340 --> 00:01:34,503
‫Okay, also lassen Sie uns diese Middleware

28
00:01:34,503 --> 00:01:37,990
‫jetzt direkt hier an der Spitze unserer globalen Middleware verwenden, schreiben

29
00:01:37,990 --> 00:01:39,940
‫wir das tatsächlich hier, global.

30
00:01:41,190 --> 00:01:44,693
‫Und wir beginnen mit der Erstellung eines Limiters.

31
00:01:48,520 --> 00:01:51,410
‫Also limiter, und das tun wir, indem

32
00:01:51,410 --> 00:01:55,260
‫wir die rateLimit-Funktion aufrufen, die wir gerade dort oben definiert haben.

33
00:01:55,260 --> 00:01:58,000
‫rateLimit ist also eine

34
00:01:58,000 --> 00:02:01,090
‫Funktion, die ein Optionsobjekt empfängt, okay?

35
00:02:01,090 --> 00:02:03,080
‫Und hier können wir

36
00:02:03,080 --> 00:02:06,230
‫im Grunde definieren, wie viele Anfragen pro IP

37
00:02:06,230 --> 00:02:08,250
‫wir in einer bestimmten Zeit zulassen.

38
00:02:08,250 --> 00:02:11,900
‫Wir können also die max-Eigenschaft angeben, die

39
00:02:11,900 --> 00:02:16,200
‫ich auf 100 setze, und dann auch das

40
00:02:16,200 --> 00:02:19,070
‫Fenster, also das Zeitfenster, okay?

41
00:02:19,070 --> 00:02:21,260
‫Was ich hier also zulassen möchte, sind

42
00:02:21,260 --> 00:02:23,380
‫im Grunde 100 Anfragen pro Stunde.

43
00:02:23,380 --> 00:02:27,360
‫Und das nennt man hier eigentlich Fenster-Millisekunden.

44
00:02:27,360 --> 00:02:31,323
‫Okay, und wir wollen eine Stunde also

45
00:02:32,750 --> 00:02:37,720
‫60 Minuten, mal 60 für Sekunden, mal 1.000 für Millisekunden.

46
00:02:37,720 --> 00:02:40,520
‫In Ordnung, auch hier werden

47
00:02:40,520 --> 00:02:45,033
‫100 Anfragen von derselben IP in einer Stunde zugelassen.

48
00:02:45,890 --> 00:02:48,210
‫Okay, und wenn diese Grenze dann

49
00:02:48,210 --> 00:02:51,860
‫von einer bestimmten IP überschritten wird, erhalten sie eine Fehlermeldung zurück.

50
00:02:51,860 --> 00:02:54,603
‫Und hier können wir nun diese Nachricht spezifizieren.

51
00:02:58,550 --> 00:03:02,543
‫Zu viele Anfragen von dieser IP. Bitte versuchen Sie

52
00:03:05,160 --> 00:03:10,160
‫es in einer Stunde noch einmal. Wir müssen also ein Gleichgewicht

53
00:03:10,320 --> 00:03:12,540
‫finden, das für unsere

54
00:03:12,540 --> 00:03:14,980
‫Anwendung am besten geeignet ist.

55
00:03:14,980 --> 00:03:16,900
‫Wenn Sie beispielsweise eine API

56
00:03:16,900 --> 00:03:20,250
‫erstellen, die wirklich viele Anfragen für eine IP benötigt, dann

57
00:03:20,250 --> 00:03:22,780
‫sollte diese Zahl hier natürlich höher sein.

58
00:03:22,780 --> 00:03:25,770
‫Folgen Sie also nicht einfach blindlings dem, was ich hier gerade

59
00:03:25,770 --> 00:03:28,410
‫geschrieben habe, sondern passen Sie es wirklich an Ihre eigene

60
00:03:28,410 --> 00:03:30,100
‫Anwendung an, damit Sie es

61
00:03:30,100 --> 00:03:32,173
‫nicht durch diesen Begrenzer unbrauchbar machen, okay?

62
00:03:33,660 --> 00:03:37,480
‫Wie auch immer, dieser Begrenzer hier, den wir gerade erstellt

63
00:03:37,480 --> 00:03:40,653
‫haben, ist im Grunde eine Middleware-Funktion, okay?

64
00:03:41,630 --> 00:03:44,320
‫rateLimit ist also eine Funktion, die basierend

65
00:03:44,320 --> 00:03:47,470
‫auf unseren Objekten eine Middleware-Funktion erstellt, die wir jetzt

66
00:03:47,470 --> 00:03:52,223
‫mit der App verwenden können. verwenden, wie wir es zuvor getan haben.

67
00:03:53,990 --> 00:03:56,490
‫Und wir können es einfach so machen.

68
00:03:56,490 --> 00:03:58,450
‫Aber was wir eigentlich wollen, ist,

69
00:03:58,450 --> 00:04:00,713
‫den Zugriff auf unsere API-Route grundsätzlich einzuschränken.

70
00:04:01,810 --> 00:04:04,050
‫Wir können das hier also spezifizieren,

71
00:04:04,050 --> 00:04:07,300
‫denken Sie daran, dass wir dies mit Middleware tun können.

72
00:04:07,300 --> 00:04:10,720
‫Wir wollen diesen Limiter also grundsätzlich nur

73
00:04:10,720 --> 00:04:13,370
‫auf eine Slash-API anwenden, okay?

74
00:04:13,370 --> 00:04:15,700
‫Und das wirkt sich dann

75
00:04:15,700 --> 00:04:18,960
‫auf alle Routen aus, die im Grunde damit

76
00:04:18,960 --> 00:04:21,615
‫beginnen, deine App also Slash API, super.

77
00:04:21,615 --> 00:04:25,140
‫Kehren wir also hier zu unserem Haupt-Tab zurück.

78
00:04:25,140 --> 00:04:29,140
‫Speichern Sie es, und jetzt versuchen wir es tatsächlich und machen

79
00:04:29,140 --> 00:04:31,330
‫wir es hier mit dem

80
00:04:31,330 --> 00:04:35,850
‫einfachsten, also holen Sie sich alle Touren, dann ist hier unser Ergebnis und

81
00:04:35,850 --> 00:04:39,600
‫was ich Ihnen jetzt zeigen möchte, sind diese Header hier.

82
00:04:39,600 --> 00:04:42,720
‫Unser Ratenbegrenzer erstellt also diese

83
00:04:42,720 --> 00:04:47,720
‫beiden Header, also das RateLimit-Limit und das RateLimit-Remaining, okay?

84
00:04:47,910 --> 00:04:50,870
‫Also fangen wir mit 100 an, wie wir

85
00:04:50,870 --> 00:04:53,130
‫es definiert haben, und jetzt haben

86
00:04:53,130 --> 00:04:56,666
‫wir 99 übrig, weil wir schon eine Anfrage gemacht haben, oder?

87
00:04:56,666 --> 00:05:00,000
‫Was passiert also, wenn wir einen anderen machen?

88
00:05:00,000 --> 00:05:02,853
‫Machen wir es zum Beispiel mit Get Tour, und

89
00:05:04,520 --> 00:05:06,550
‫es gibt keine Tour mit

90
00:05:06,550 --> 00:05:08,890
‫dieser ID, aber das spielt keine Rolle,

91
00:05:08,890 --> 00:05:12,660
‫hier ist es wichtig, dass der Rest jetzt auf 98 reduziert ist.

92
00:05:12,660 --> 00:05:15,010
‫Und wenn wir es noch einmal versuchen,

93
00:05:15,010 --> 00:05:19,210
‫werden Sie sehen, dass es sogar noch weiter auf 97 gesunken ist, okay?

94
00:05:19,210 --> 00:05:21,620
‫Und eigentlich haben wir hier unten auch den Reset.

95
00:05:21,620 --> 00:05:25,990
‫Also im Grunde ist der Zeitstempel, wo er zurückgesetzt wird, in Ordnung?

96
00:05:25,990 --> 00:05:28,833
‫Also das einstündige Fenster, das wir zuvor angegeben haben.

97
00:05:29,760 --> 00:05:34,069
‫Okay, wenn jetzt zwischendurch unsere App neu gestartet wird,

98
00:05:34,069 --> 00:05:37,410
‫so speichere ich dafür einfach ab.

99
00:05:37,410 --> 00:05:40,920
‫Mal sehen, was dann passiert, okay, also schicke ich es

100
00:05:40,920 --> 00:05:43,200
‫noch einmal, und jetzt fangen

101
00:05:43,200 --> 00:05:45,910
‫wir im Grunde wieder von vorne an.

102
00:05:45,910 --> 00:05:49,440
‫Okay, unsere App kann in dieser Zeit also nicht abstürzen,

103
00:05:49,440 --> 00:05:51,350
‫da sonst das Limit

104
00:05:51,350 --> 00:05:54,093
‫dann im Grunde auch zurückgesetzt wird, okay?

105
00:05:55,260 --> 00:05:59,670
‫Jetzt versuchen wir tatsächlich, die Fehlermeldung zu sehen,

106
00:05:59,670 --> 00:06:04,670
‫und deshalb werde ich dieses Maximum auf nur drei reduzieren, okay?

107
00:06:04,870 --> 00:06:09,370
‫Und speichern Sie es hier, senden Sie diese

108
00:06:09,370 --> 00:06:10,790
‫Anfrage, und

109
00:06:10,790 --> 00:06:14,610
‫in unseren Headern sehen wir jetzt, dass

110
00:06:14,610 --> 00:06:18,190
‫wir nur noch zwei übrig haben

111
00:06:18,190 --> 00:06:21,180
‫immer noch Daten erhalten, aber

112
00:06:21,180 --> 00:06:23,350
‫wenn wir es jetzt

113
00:06:23,350 --> 00:06:27,087
‫noch einmal versuchen, erhalten wir einen Fehler.

114
00:06:27,087 --> 00:06:29,113
‫Roo viele Anfragen von dieser IP.

115
00:06:29,113 --> 00:06:31,190
‫Und dann wird der

116
00:06:31,190 --> 00:06:36,190
‫Statuscode automatisch auf 429 gesetzt, was zu viele Anfragen bedeutet.

117
00:06:36,190 --> 00:06:39,560
‫Okay, und das wird uns helfen, Denial-of-Service-

118
00:06:39,560 --> 00:06:43,810
‫und Brute-Force-Angriffe zu verhindern, bei denen ein Angreifer versucht,

119
00:06:43,810 --> 00:06:46,270
‫das Passwort eines Benutzers

120
00:06:46,270 --> 00:06:48,877
‫zu erraten, im Wesentlichen mit

121
00:06:48,877 --> 00:06:51,900
‫Brute-Force, wie der Name schon sagt.

122
00:06:51,900 --> 00:06:54,644
‫Okay, das ist API-Beschränkung, die

123
00:06:54,644 --> 00:06:57,030
‫mit diesem Express-Ratenlimit-Paket ganz einfach

124
00:06:57,030 --> 00:06:59,363
‫zu implementieren ist.

