App\Middleware
RateLimitMiddleware
Session-basiertes Sliding-Window-Rate-Limiting. Zählt Requests pro Session innerhalb eines konfigurierbaren Zeitfensters. Bei Überschreitung: 429 Too Many Requests mit Retry-After-Header.
Interface
Alle Middleware-Klassen implementieren App\Routing\MiddlewareInterface:
PHP
interface MiddlewareInterface
{
public function handle(Request $request, Closure $next): Response;
}
Methoden
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
| __construct(int \$maxRequests = 60, int \$windowSeconds = 60) | — | Konfiguriert das Rate-Limit. Standard: 60 Requests pro 60 Sekunden. |
| handle(Request \$request, Closure \$next) | Response | Bereinigt abgelaufene Timestamps aus dem Session-Log, fügt aktuellen Timestamp hinzu. Wenn Anzahl > maxRequests: 429 mit Retry-After. Sonst: \$next(\$request). |
Verwendung
PHP
// Standard: 60 Requests/Minute
$router->use(new RateLimitMiddleware());
// Angepasst: 10 Requests pro 10 Sekunden (streng)
$router->post("/api/login", AuthController::class, "login")
->middleware(new RateLimitMiddleware(10, 10)); // Achtung: Middleware-Instanzen anders übergeben
// Oder als Klasse:
$router->group("api", [CsrfMiddleware::class], function(Router $r) {
// Alle API-Routen mit Rate-Limit
});
// Konfiguration als readonly-Properties
$mw = new RateLimitMiddleware(maxRequests: 100, windowSeconds: 3600);
// → Max. 100 Requests pro Stunde