Przejdź do głównej treści
Grafika przedstawia ukryty obrazek

Mechanizm Antiflood – jak działa i jak go zaimplementować w PHP

Obraz ilustrujacy Mechanizm Antiflood  jak dziaa i jak go zaimplementowa w PHP

Flooding to sytuacja, w której użytkownik (lub zautomatyzowany bot) wysyła wiele żądań w krótkim czasie, przeciążając serwer lub nadużywając jego funkcji. Aby temu zapobiec, można wdrożyć mechanizm antiflood, który kontroluje liczbę żądań od danego użytkownika w określonym czasie.

Poniżej omówiono działanie mechanizmu antiflood oraz przedstawiono przykładową implementację w PHP.

Jak działa mechanizm Antiflood?

  1. Rejestracja żądań: Mechanizm monitoruje liczbę żądań wysyłanych przez konkretnego użytkownika. Można to robić na podstawie adresu IP, identyfikatora sesji lub tokenu autoryzacyjnego.

  2. Limit czasowy: System ustala okno czasowe (np. 10 sekund) i maksymalną liczbę dozwolonych żądań w tym czasie.

  3. Blokada: Jeśli użytkownik przekroczy limit, jego żądania są odrzucane, a on sam może otrzymać wiadomość o zbyt częstych żądaniach (np. kod HTTP 429 – Too Many Requests).

  4. Czyszczenie danych: Po upływie określonego czasu zapisane dane są usuwane lub resetowane, co pozwala użytkownikowi kontynuować działanie w normalnym trybie.

Implementacja mechanizmu Antiflood w PHP

Poniższy kod przedstawia prosty system antiflood oparty na przechowywaniu danych w plikach tymczasowych lub tablicy w pamięci.

Przykładowy kod:

<?php
// Określenie limitów
$maxRequests = 5; // Maksymalna liczba żądań
$timeWindow = 10; // Okno czasowe w sekundach

// Identyfikacja użytkownika (np. na podstawie adresu IP)
$userIP = $_SERVER['REMOTE_ADDR'];

// Plik do przechowywania danych o żądaniach
$dataFile = sys_get_temp_dir() . "/antiflood_" . md5($userIP) . ".json";

// Odczyt istniejeących danych
if (file_exists($dataFile)) {
    $data = json_decode(file_get_contents($dataFile), true);
} else {
    $data = [];
}

// Aktualny czas
$currentTime = time();

// Filtrowanie starych wpisów
if (isset($data['timestamps'])) {
    $data['timestamps'] = array_filter($data['timestamps'], function ($timestamp) use ($currentTime, $timeWindow) {
        return ($currentTime - $timestamp) <= $timeWindow;
    });
} else {
    $data['timestamps'] = [];
}

// Sprawdzenie liczby żądań
if (count($data['timestamps']) >= $maxRequests) {
    http_response_code(429); // Kod HTTP 429 - Too Many Requests
    die("Zbyt wiele żądań. Spróbuj ponownie później.");
}

// Rejestracja nowego żądania
$data['timestamps'][] = $currentTime;
file_put_contents($dataFile, json_encode($data));

// Kontynuowanie obsługi żądania
echo "Witaj! Twoje żądanie zostało przyjęte.";
?>

Wyjaśnienie kodu

  1. Identyfikacja użytkownika: Używany jest adres IP jako identyfikator użytkownika. W bardziej zaawansowanych systemach można stosować tokeny sesji lub identyfikatory użytkownika z bazy danych.

  2. Przechowywanie danych: Dane o żądaniach są przechowywane w pliku JSON. Dla prostoty w tym przypadku wykorzystano folder tymczasowy serwera.

  3. Czyszczenie danych: Stare wpisy są filtrowane, aby zachować tylko te z ostatniego okna czasowego.

  4. Blokada: Jeśli liczba żądań przekracza ustalony limit, użytkownik otrzymuje odpowiedź z kodem 429.

  5. Rejestracja nowego żądania: Czas bieżącego żądania jest dodawany do listy.

Rozbudowa mechanizmu

  1. Bazy danych: W przypadku większych systemów warto przechowywać dane o żądaniach w bazie danych (np. MySQL, Redis) w celu lepszej wydajności i skalowalności.

  2. Zaawansowana identyfikacja: Poza adresem IP można uwzględnić nagłówki HTTP lub tokeny sesji, aby uniknąć problemu współdzielonych adresów IP.

  3. Powiadomienia: W przypadku ciągłego naruszania limitów można wysyłać powiadomienia administratorowi lub automatycznie blokować adresy IP.

  4. Dynamiczne limity: Mechanizm może dostosowywać limity w zależności od czasu, rodzaju żądań czy obciążenia serwera.

Mechanizm antiflood jest istotnym elementem ochrony aplikacji internetowych przed przeciążeniem i nadużyciami. Prosta implementacja w PHP może skutecznie zabezpieczyć małe projekty, a w przypadku większych systemów warto rozważyć bardziej zaawansowane podejścia.

22 stycznia 2025 7

Kategorie

programowanie

Dziękujemy!
()

Powiązane wpisy

Ilustracja tematu Basic Authentication i Digest Authentication  porwnanie oraz analiza bezpieczestwa
22 stycznia 2025 3 min 20

Basic Authentication i Digest Authentication – porównanie oraz analiza bezpieczeństwa

Czytaj więcej
Zdjecie zwiazane z Bearer Authorization  mechanizm bezpieczestwo zagroenia i implementacja
22 stycznia 2025 3 min 12

Bearer Authorization – mechanizm, bezpieczeństwo, zagrożenia i implementacja

Czytaj więcej
Obraz ilustrujacy Ataki CSRF XSS SQL Injection DoS DDoS Web Scraping  opis i sposoby zapobiegania w
24 stycznia 2025 3 min 9

Ataki CSRF, XSS, SQL Injection, DoS, DDoS, Web Scraping – opis i sposoby zapobiegania w PHP

Czytaj więcej
Wymiana doświadczeń

Masz podobne doświadczenia?

Chętnie poznam Twoją perspektywę i porozmawiam o tym temacie szerzej.

Napisz do mnie

Każda perspektywa może wnieść coś wartościowego do dyskusji.

Twoja prywatność i pliki cookies

  1. Ta strona internetowa wykorzystuje wyłącznie niezbędne pliki cookies, które są wymagane do jej prawidłowego działania – m.in. do poprawnego wyświetlania treści, zapamiętania podstawowych ustawień przeglądarki oraz zapewnienia stabilności serwisu.
  2. Nie stosuję plików cookies w celach marketingowych, reklamowych ani analitycznych.
  3. Strona ma charakter wyłącznie informacyjny i nie zawiera formularzy kontaktowych, rejestracyjnych ani zakupowych, przez które dane mogłyby być przesyłane na serwer.
  4. Nie zbieram danych osobowych podczas zwykłego korzystania z witryny.
  5. Serwis nie korzysta z certyfikatu SSL, jednak ze względu na informacyjny charakter strony nie jest wymagane przesyłanie poufnych danych. Zalecam jednak, aby nigdy nie wpisywać haseł ani danych osobowych na stronach bez szyfrowanego połączenia.
  6. Korzystając z tej strony, wyrażasz zgodę na używanie wyłącznie niezbędnych plików cookies.

Więcej informacji znajdziesz w mojej polityce prywatności.