So bewerten Sie Limitanforderungen in Blazor/ASP.NET Core

0
162

Wenn Sie eine öffentliche API oder Website erstellen, müssen Sie 8217;re wahrscheinlich besorgt über Leistung. Die Ratenbegrenzung kann dazu beitragen, Missbrauch durch einfache DDoS-Angriffe zu verhindern, und ist für Blazor/ASP.NET Core-Anwendungen ziemlich einfach einzurichten.

Warum Ratenbegrenzungsanfragen?

Es gibt viele Gründe, Limit-Anfragen zu bewerten. Die meisten Dienste sollten wahrscheinlich eine Art Ratenbegrenzung festlegen, da kein vernünftiger Mensch zehn Minuten lang 100 Anfragen pro Sekunde stellen wird. Standardmäßig antwortet Ihre Anwendung auf jede Anfrage, daher ist es ratsam, ein angemessenes Limit festzulegen.

Natürlich verfügt Ihr Cloud-Anbieter möglicherweise auch über DDoS-Schutz. Dies schützt normalerweise gut vor Angriffen der Schichten 3 und 4, die auf Ihren Server abzielen. Sie sollten jedoch trotzdem sicherstellen, dass Ihr Server alles in seiner Macht Stehende tut, um Angreifer daran zu hindern, darauf zuzugreifen.

Sie haben auch die Möglichkeit, das Limit viel niedriger einzustellen, um Anfragen an öffentliche APIs zu begrenzen. Beispielsweise benötigt ein bestimmter Endpunkt möglicherweise viel Verarbeitungsaufwand, um auf die Anfrage zu antworten. Möglicherweise möchten Sie diesen Endpunkt begrenzen, sodass keine einzelne IP-Adresse mehr als alle paar Sekunden mehr als ein paar Anfragen stellen kann, um die Belastung Ihres Servers/Ihrer Datenbank zu begrenzen.

Einrichten der Ratenbegrenzung in ASP.NET Core

Blazor als Framework baut auf ASP.NET Core auf, das alle Details zum Ausführen eines HTTP-Servers und Beantworten von Anforderungen verarbeitet. Daher müssen Sie die Ratenbegrenzung für ASP.NET Core konfigurieren. Dieselben Schritte gelten für alle, die Blazor nicht verwenden.

Werbung

Die Ratenbegrenzung ist leider kein Standardfeature in ASP.NET Core. Es gibt jedoch ein sehr beliebtes NuGet-Paket, AspNetCoreRateLimit, das die Aufgabe recht gut erfüllt. Sie können es installieren, indem Sie in Visual Studio mit der rechten Maustaste auf Ihr Projekt klicken und “NuGet-Pakete verwalten…” auswählen:

Suchen Sie nach AspNetCoreRateLimit und installieren Sie es.

Es gibt einige Möglichkeiten, die Ratenbegrenzung durchzuführen. Wenn Sie eine API verwenden, die Schlüssel benötigt, empfehlen wir eine Ratenbegrenzung basierend auf dem API-Schlüssel, der alle Fälle abdeckt. Für die meisten Benutzer ist die Ratenbegrenzung basierend auf der IP-Adresse wahrscheinlich in Ordnung und wird von AspNetCoreRateLimit standardmäßig empfohlen.

Sie müssen sie als Dienst zu ASP.NET hinzufügen. Alle Dienste werden in Startup.cs konfiguriert, wodurch sie mit der Funktion ConfigureServices(IServiceCollection services) hinzugefügt werden.

Es müssen einige Dienste konfiguriert werden. Die erste Funktion konfiguriert die Dienste, um Einstellungen aus Ihrer Konfigurationsdatei zu laden. Sie sollten auch den Speichercache von Microsoft hinzufügen, falls Sie dies noch nicht getan haben. Anschließend müssen Sie IpRateLimiting aus der JSON-Datei konfigurieren und dann den Ratenbegrenzer hinzufügen.

//benötigt zum Laden der Konfiguration von appsettings.json services.AddOptions();   //wird benötigt, um Ratenbegrenzungszähler und IP-Regeldienste zu speichern.AddMemoryCache();   //Lade die allgemeine Konfiguration von appsettings.json services.Configure(Configuration.GetSection("IpRateLimiting"));   //Inject Counter und Rules speichert services.AddInMemoryRateLimiting();   //Konfigurationsdienste (Resolver, Counter Key Builder).AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();

Auch in Startup.cs müssen Sie den Application Builder so konfigurieren, dass die IP-Ratenbegrenzung verwendet wird.

app.UseIpRateLimiting();

Denken Sie daran, dass hierbei die speicherinterne Ratenbegrenzung verwendet wird, die pro Instanz gilt. Wenn Sie einen Lastenausgleich für Ihre Anwendung durchführen, müssen Sie einen verteilten Speicher wie Redis verwenden, den dieses Paket ebenfalls unterstützt.

Ratenbegrenzung konfigurieren

Nachdem es ASP.NET hinzugefügt wurde, müssen Sie zu Ihren App-Einstellungen wechseln. json-Konfigurationsdatei, um sie einzurichten. Die Konfiguration sieht in etwa wie folgt aus:

“IpRateLimiting”: { “EnableEndpointRateLimiting”: false, “StackBlockedRequests”: true, “RealIpHeader”: “X-Real-IP”, “ClientIdHeader”: “X-ClientId”, “HttpStatusCode”: 429, “IpWhitelist”: [ “127.0.0.1”, “::1/10”, “192.168.0.0/24” ], “EndpointWhitelist”: [ “get:/api/license”, “*:/api/status” ], “ClientWhitelist” : [ “dev-id-1”, “dev-id-2” ], “GeneralRules”: [ { “Endpoint”: “*”, “Period”: “1s”, “Limit”: 2 }, { ” Endpunkt”: “*”, “Periode”: “15m”, “Limit”: 100}, { “Endpoint”: “*”, “Periode”: “12h”, “Limit”: 1000 }, { “Endpoint” : “*”, “Period”: “7d”, “Limit”: 10000 } ] } Werbung

Wenn Sie planen, bestimmte Endpunkte anders zu begrenzen, sollten Sie dies aktivieren EnableEndpointRateLimiting, das standardmäßig auf false gesetzt ist.

StackBlockedRequests lässt alle blockierten Anfragen für den Zähler zählen. Wenn diese Option deaktiviert ist, erhält jeder, der immer wieder Anfragen stellt, X Antworten pro Zeitraum. Wenn es aktiviert ist, werden sie die maximalen Antworten sehr schnell berechnen und dann nicht noch einmal beantwortet werden.

RealIpHeader und ClientIdHeader werden verwendet, wenn sich Ihr Server hinter einem Reverse-Proxy befindet, was eine übliche Einrichtung ist. Da die Anfragen immer vom Proxy-Server kommen, setzt der Proxy einen Header mit den tatsächlichen Informationen des Benutzers. Sie müssen Ihren Proxy überprüfen und sicherstellen, dass dieser Header richtig eingestellt ist, sonst behandelt der Ratenbegrenzer alle als dieselbe IP.

Dann gibt es drei Whitelists, eine für IPs, Client-IDs und Endpunkte. Sie können diese entfernen, wenn Sie sie nicht benötigen.

Anschließend müssen Sie jeden Endpunkt sowie einen Zeitraum und ein Limit konfigurieren. Ein Platzhalter deckt alles ab und ist das einzige, was funktioniert, wenn EnableEndpointRateLimiting auf false gesetzt ist. Ist dies nicht der Fall, können Sie Endpunkte mit {HTTP_VERB}{PATH} einschließlich Platzhaltern definieren, sodass  *:/api/values alle GET- und POST-Anfragen mit /api/values ​​abgleicht.

Werbung

Sie sollten sicherstellen, dass Ihr Endpunkt mit einer Datei und nicht mit einem Verzeichnis übereinstimmt. In meinem Fall war *:/download/*/* ein gültiger Endpunkt, aber *:/download/*/*/ war wegen des abschließenden Schrägstrichs nicht.

Diese Standardkonfiguration enthält eine IP-Whitelist für localhost, die Sie auskommentieren müssen, wenn Sie’ wieder testen. Sie sollten jedoch in der Lage sein, Ihre Konfiguration zu testen, indem Sie das Limit sehr niedrig einstellen, z. B. 5 pro Minute, und eine Reihe von Anfragen stellen. Sie sollten diesen Fehler erhalten, “API-Aufrufe Kontingent überschritten,” Das bedeutet, dass es ordnungsgemäß funktioniert.

Dieses Paket kann noch viel mehr. Wenn Sie also speziellere Anforderungen haben, empfehlen wir Ihnen, die Dokumentation zu lesen und zu sehen, was’ 8217;s möglich.