Grenze geht Open Source

Heute möchte ich jedem ein PHP (Hypertext Preprocessor) Skript zur Verfügung stellen, das es jedem Benutzer erlaubt, sich zu verlangsamen, wenn die für das Laden einer Webseite gesetzten Grenzen erreicht werden. Wenn Sie nach etwas suchen, um DDOS-Angriffe zu stoppen, sind Sie nicht an der richtigen Stelle; wenn Sie nach etwas suchen, um den Zugriff auf Webseiten zu verhindern, basierend auf der maximalen Anzahl von Anfragen in einer begrenzten Zeit kann dieses kleine PHP-Skript Ihnen helfen. Ob Sie den Zugriff auf eine API (Application Programming Interface) beschränken oder den Zugriff auf sensible Bereiche beschränken (z.B. eine kontinuierliche Aktualisierung der Seite in kritischen Bereichen wie Registrierung oder Authentifizierung nicht erlauben) sind Sie an der richtigen Stelle, um zu lernen, dies auf professionelle, schnelle und effiziente Weise zu tun. Um dies auf eine leistungsfähigere Art und Weise zu tun, brauchen wir eine Datenbank von Ã1⁄4brigen und genau fÃ1⁄4r dieses Skript verwenden wir eine noch leistungsfähigere Datenbank mit Ã1⁄4brigen Speichern, d.h. eine Datenbank, die fÃ1⁄4r volatilen Speicher schreibt. Wenn ich ein Skript veröffentliche, tue ich es gerne in freier Weise, ohne besondere Abhängigkeiten, ohne es in Funktionen oder Klassen zu sperren, wenn es nicht notwendig ist; es ist jedoch noch möglich, eine Funktion zu erstellen oder sie sogar in einer Klasse zu verkapseln, wie Sie wünschen.

Dies ist das Skript [Apache-2.0 Lizenz]:

connect('127.0.0.1', 6379);
//Passwort für Redis
$redis->auth(');
//wählen Sie die Datenbank im Speicher (kann von 0 auf max 16 geändert werden)
$redis->select(]

//Sie können diesen Teil bearbeiten, um benutzerdefinierte Werte festzulegen
$max_calls_limit = 500;
$time_period = 3600;
$total_user_calls = 0;
//Ende des bearbeitbaren Teils

//Es ist möglich, diesen Teil zu bearbeiten, um das Authentifizierungssystem zu implementieren, ändern Sie einfach die Variable $user_code_ratelimit mit dem Token des Authentifizierungssystems.
// Erhalten Sie die IP des Besuchers (auch hinter Proxy)
wenn ($_ SERVER["HTTP_CF_CONNECTING_IP"])):
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
$_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
Endif;
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = $_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];

wenn (filter_var($client, FILTER_VALIDATE_IP)):
$user_code_ratelimit = $client;
andereif (filter_var($forward, FILTER_VALIDATE_IP)):
$user_code_ratelimit = $forward;
andere:
$user_code_ratelimit = $remote;
Endif;
//Ende des bearbeitbaren Teils

//hash der Benutzercode erstellt
$user_code_ratelimit_hashed = hash(sha256', $user_code_ratelimit);

// Überprüfen Sie die In-Memory-Datenbank und aktualisieren Sie sie bei Bedarf
wenn (!$redis->exists($user_code_ratelimit_hashed)):
$redis->set($user_code_ratelimit_hashed, 1);
$redis->expire($user_code_ratelimit_hashed, $time_period);
$total_user_calls = 1;
andere:
$redis->INCR($user_code_ratelimit_hashed);
$total_user_calls = $redis->get($user_code_ratelimit_hashed);
wenn ($total_user_calls > $max_calls_limit):
Echo "Die Grenze wird überschritten. Bitte versuchen Sie es später noch einmal."
Ausfahrt();
Endif;
Endif;

//settings header for the client (wichtig: put this before any output, wenn dies nicht möglich ist kommentieren Sie diese 3 Zeilen)
header(X-RateLimit-Limit: '.$max_calls_limit);
header(X-RateLimit-Remaining: '.$max_calls_limit-$total_user_calls);
header(X-RateLimit-Reset: '.$time_period);
?>

Das Skript können Sie direkt auf meinem Github sehen: https://github.com/OskarCosimo/rate-limit/

Wie funktioniert das Skript?

Dieses Skript enthält nützliche Kommentare, mit denen Variablen wie gewünscht verändert werden können. Die Verbindung zur Datenbank erfolgt einfach in einem einzigen Schritt, über den Aufruf $redis->connect(1127.0.0.1:6, 6379) wobei 127.0.0.1 die interne Adresse des Servers (localhost) und 6379 der aus der Datenbank verwendete Port ist (es ist der Standard-Eins); die Variable $redis->auth(Su.) ist das Datenbank-Passwort (Set während der Installationsphase), während die Variable $redis->select(0) ist die Nummer der zu verwendenden Datenbank (Redis kann maximal 16 verschiedene Datenbanken haben, dies ist nützlich, wenn Sie mehrere Skripte erstellen möchten, die aus verschiedenen Datenbanken gelesen werden). Das Zeitraum Variable und die $max_calls_limit Variable sind die einzigen zwei Variablen, die geändert werden sollten (zusätzlich zu denen, die die Datenbankverbindung betreffen), und bestehen darin, den Zeitraum (in Sekunden) und die maximale Anzahl von Anfragen (int ohne Dezimalstellen) anzugeben, die möglich sind. Die Variable $user_code_ratelimit ist derjenige, der sich um die Identifizierung des Benutzers kümmert, der die Anfrage an den Server gestellt hat, standardmäßig nehmen wir die IP-Adresse des Besuchers, aber diese Variable kann auch mit dem in einer Datenbank gespeicherten Benutzercode gesetzt werden, der sich auf die Benutzerauthentifizierung bezieht; dieses Skript kann daher auch mit jedem Authentifizierungssystem integriert werden und mit einer kleinen Änderung ist es auch möglich, die Anzahl der Anfragen für bereits registrierte Benutzer zu erhöhen.

Was ist Redis?

Redis ist ein Open Source In-Memory Data Store, der als Datenbank, Cache oder Message Broker verwendet werden kann. Es ist oft für das Caching von Webseiten und die Verringerung der Last auf Servern verwendet. Redis hat auch einige Funktionen, die es attraktiv für die Verwendung als Datenbank, wie Unterstützung für Transaktionen und Veröffentlichung / Subscribe Messaging.

Wie Redis auf Ihrem Server installiert wird

Der offizielle Leitfaden für die Installation von Redis in jedem Betriebssystem ist hier: https://redis.io/docs/latest/operation/oss_and_stack/install/install-redis

Wird dieses System auf MYETV verwendet?

Ja, dieses System wird verwendet und häufiger zum Schutz vor den zahlreichen (PH_AF3FD128) Zugänge; Um die Anzahl der verfügbaren Anfragen zu erhöhen, ist es notwendig, sich auf der Plattform anzumelden.