So bewerten Sie Limit-Anfragen in Blazor / ASP.NET Core

Inhalt

Wenn Sie eine API oder ein öffentliches Webportal erstellen, du machst dir wahrscheinlich Sorgen um die Leistung. Geschwindigkeitsbegrenzung kann helfen, den Missbrauch grundlegender DDoS-Angriffe zu verhindern, und es ist ganz einfach für Blazor-Anwendungen zu konfigurieren / ASP.NET Core.

Warum sind Ratenbegrenzungsanfragen?

Es gibt viele Gründe, Limit-Anfragen zu qualifizieren. Die meisten Dienste sollten wahrscheinlich eine Art Geschwindigkeitsbegrenzung festlegen, weil kein vernünftiger Mensch etwas leisten wird 100 Anfragen pro Sekunde für zehn Minuten hintereinander. Standardmäßig, Ihre Anwendung wird auf alle Anfragen reagieren, Daher ist es eine gute Idee, eine angemessene Grenze zu bestimmen.

Entschieden, Ihr Cloud-Anbieter verfügt möglicherweise auch über DDoS-Schutz. Dies schützt im Allgemeinen gut vor Cloak-Angriffen. 3 Ja 4 an deinen Server geleitet. Trotz dieses, Sie sollten sicherstellen, dass Ihr Server alles in seiner Macht Stehende tut, um den Zugriff von Angreifern zu verhindern.

Darüber hinaus haben Sie die Möglichkeit, die viel niedrigere Grenze festzulegen, um Anfragen an öffentliche APIs zu begrenzen. Als Beispiel, vielleicht erfordert ein bestimmter Endpunkt viel Verarbeitungsaufwand, um die Anfrage zu beantworten. Vielleicht möchten Sie diesen Endpunkt so begrenzen, dass keine IP-Adresse mehr als einige Anfragen alle zwei Sekunden ausführen kann, was die Belastung Ihres Servers begrenzt / Datenbank.

Festlegen der Geschwindigkeitsbegrenzung in ASP.NET Core

Blazor als Framework basiert auf ASP.NET Core, die alle Interna für den Betrieb eines HTTP-Servers und die Beantwortung von Anfragen übernimmt. So, Sie müssen die Ratenbegrenzung für ASP.NET Core konfigurieren. Die gleichen Schritte gelten für alle, die Blazor . nicht verwenden.

Unglücklicherweise, Geschwindigkeitsbegrenzung ist kein Standardfeature in ASP.NET Core. Trotz dieses, es gibt ein sehr beliebtes NuGet-Paket, AspNetCoreRateLimit, das macht den Job ganz gut. Sie können es installieren, indem Sie in Visual Studio mit der rechten Maustaste auf Ihr Projekt klicken und auswählen “NuGet-Pakete verwalten …”:

Suche AspNetCoreRateLimit und installiere es.

Es gibt einige Alternativen zur Geschwindigkeitsbegrenzung. Wenn Sie eine API verwenden, die Schlüssel benötigt, Wir empfehlen Ihnen, die Rate basierend auf dem API-Schlüssel zu begrenzen, alle Fälle abdecken. Für die meisten Leute, Geschwindigkeitsbegrenzung basierend auf IP-Adresse ist wahrscheinlich in Ordnung, und ist der von AspNetCoreRateLimit empfohlene Standardwert.

Sie müssen es als Dienst zu ASP.NET hinzufügen. Alle Dienste sind in . konfiguriert Startup.cs, das fügt sie mit dem hinzu ConfigureServices(IServiceCollection services) Funktion.

Es gibt einige Dienste zu konfigurieren. Die erste Funktion konfiguriert die Dienste, um Konfigurationen aus ihrer Konfigurationsdatei zu laden. Sie sollten auch den Microsoft-Cache hinzufügen, falls Sie dies noch nicht getan haben.. Nach, Sie müssen IpRateLimiting aus der JSON-Datei konfigurieren und dann den Ratenbegrenzer hinzufügen.

            // erforderlich, um die Konfiguration von appsettings.json zu laden 
            Dienstleistungen.Optionen hinzufügen();
 
            // zum Speichern von Ratenbegrenzungszählern und IP-Regeln erforderlich
            Dienstleistungen.AddMemoryCache();
 
            //Laden Sie die allgemeine Konfiguration von appsettings.json
            Dienstleistungen.Konfigurieren(Aufbau.Abschnitt abrufen("IpRateLimiting"));
 
            // Injektionszähler und Regelspeicher
            Dienstleistungen.AddInMemoryRateLimiting();
 
            // Aufbau (Resolver, Zählerschlüsselbauer)
            Dienstleistungen.Singleton hinzufügen<IRateLimitKonfiguration, RateLimitKonfiguration>();

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

app.UseIpRateLimiting();

Beachten Sie, dass dies eine Speichergeschwindigkeitsbegrenzung verwendet, was ist zum Beispiel. Wenn Sie eine Lastverteilung Ihrer Anwendung durchführen, Sie müssen einen verteilten Speicher wie Redis verwenden, als dieses Paket hat auch Unterstützung für.

Einstellungen zur Geschwindigkeitsbegrenzung

Sobald es zu ASP.NET hinzugefügt wurde, du solltest zu deinem gehen appsettings.json Konfigurationsdatei, um es zu konfigurieren. Die Konfiguration sieht aus wie die nächste:

"IpRateLimiting": {
    "EnableEndpointRateLimiting": falsch,
    "StackBlockedRequests": wahr,
    "RealIpHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "IPWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    "EndpunktWhitelist": [ "werden:/API/Lizenz", "*:/API/Status" ],
    "ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    "Allgemeine Regeln": [
      {
        "Endpunkt": "*",
        "Zeitraum": "1S",
        "Grenze": 2
      },
      {
        "Endpunkt": "*",
        "Zeitraum": "15ich",
        "Grenze": 100
      },
      {
        "Endpunkt": "*",
        "Zeitraum": "12h",
        "Grenze": 1000
      },
      {
        "Endpunkt": "*",
        "Zeitraum": "7D",
        "Grenze": 10000
      }
    ]
  }

Zuerst, wenn Sie beabsichtigen, bestimmte Endpunkte anders zu begrenzen, Sie möchten EnableEndpointRateLimiting aktivieren, was standardmäßig falsch ist.

StackBlockedRequests lässt blockierte Anfragen für den Zähler zählen. Einfach, mit diesem deaktiviert, jeder, der immer wieder Anfragen stellt, erhält X Antworten pro Periode. Mit ihm aktiviert, maximale Antworten werden sehr schnell zunehmen und werden dann nicht weiter beantwortet.

RealIpHeader und ClientIdHeader werden verwendet, wenn sich Ihr Server hinter einem Reverse-Proxy befindet, das ist eine gängige Konfiguration. Da Anfragen immer vom Proxy-Server kommen, der Proxy setzt einen Header mit den tatsächlichen Benutzerinformationen. Sie müssen Ihren Proxy überprüfen und sicherstellen, dass dieser Header richtig eingestellt ist, umgekehrter Fall, der Geschwindigkeitsbegrenzer behandelt alle als dieselbe IP.

Nach, Es gibt drei weiße Listen, einer für IP, Client-ID und Endpunkte. Sie können sie löschen, wenn Sie sie nicht benötigen.

Nach, Sie müssen jeden Endpunkt konfigurieren, sowie eine Frist und ein Limit. Ein Platzhalter deckt alles ab und ist das einzige, was funktioniert, wenn EnableEndpointRateLimiting auf false gesetzt ist. Wenn dies nicht der Fall ist, Sie können Endpunkte festlegen mit {HTTP_VERB}{PATH}, einschließlich Platzhaltern, so dass *:/api/values stimmt mit allen GET- und POST-Anforderungen überein /api/values.

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

Diese Standardkonfiguration enthält eine IP-Whitelist für localhost, dass Sie kommentieren sollten, wenn Sie testen. Aber, Sie sollten in der Lage sein, Ihr Setup zu testen, indem Sie das Limit sehr niedrig einstellen, Was 5 pro Minute, und eine Reihe von Anfragen stellen. Dieser Fehler sollte erscheinen, “API-Aufrufkontingent überschritten”, was bedeutet, dass es richtig funktioniert.

Dieses Paket kann noch viel mehr, also wenn du speziellere bedürfnisse hast, wir schlagen vor Überprüfung Ihrer Unterlagen und sehen was machbar ist.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.