Zabezpiecz WordPress za pomocą fragmentu kodu Limit Login Attempts

Jak ograniczyć próby logowania w WordPressie; Wtyczka do ochrony przed atakami brute force w WordPressie; Najlepsza wtyczka do ograniczania prób logowania w WordPressie; Zapobiegać atakom brute force w WordPressie; WordPress Limit Login Attempts Reloaded; Zabezpieczona strona logowania WordPress; Wtyczka do zabezpieczeń logowania w WordPressie; Samouczek dotyczący ograniczania prób logowania w WordPressie; Zatrzymać ataki brute force na WordPressie; Wtyczka WordPress do blokowania prób logowania;

Objaśnienie

Ten kod pomaga chronić Twoją stronę WordPress przed atakami typu brute force, ograniczając liczbę prób logowania, które użytkownik może wykonać. Oto jak to działa:

  • Początek sesji: Rozpoczyna się od uruchomienia sesji, jeśli jeszcze nie została uruchomiona. Jest to konieczne, aby śledzić próby logowania.
  • Maksymalna liczba prób: Możesz ustawić maksymalną liczbę prób logowania (w tym przypadku 5). Jeśli użytkownik przekroczy tę liczbę, zostanie tymczasowo zablokowany.
  • Czas blokady: Okres blokady wynosi 15 minut. W tym czasie użytkownik nie może ponownie próbować się zalogować.
  • Sprawdzenie logowania: Za każdym razem, gdy podejmowana jest próba logowania, kod sprawdza, czy nazwa użytkownika i hasło są poprawne. Jeśli nie, zwiększa licznik prób.
  • Udane logowanie: Jeśli logowanie jest udane, licznik prób jest resetowany do zera.
  • Sprawdzenie blokady: Jeśli użytkownik jest zablokowany, zobaczy komunikat informujący, jak długo musi poczekać przed ponowną próbą.
  • Reset sesji po wylogowaniu: Gdy użytkownik się wylogowuje, jego dane sesji związane z próbami logowania są usuwane, co pozwala mu na rozpoczęcie od nowa przy następnej próbie.

To podejście pomaga zabezpieczyć stronę logowania, zapobiegając powtarzającym się próbom logowania, które są powszechną metodą stosowaną w atakach typu brute force.

Kod

<?php

// Add action to initialize the login attempt limiter
add_action('init', 'wp_dudecom_limit_login_attempts');

function wp_dudecom_limit_login_attempts() {
    if (!session_id()) {
        session_start();
    }

    // Set the maximum number of login attempts
    $max_attempts = 5;
    // Set the lockout duration in seconds (e.g., 15 minutes)
    $lockout_duration = 15 * 60;

    // Check if the user is trying to log in
    if (isset($_POST['wp-submit'])) {
        $username = isset($_POST['log']) ? sanitize_user($_POST['log']) : '';
        $password = isset($_POST['pwd']) ? $_POST['pwd'] : '';

        // Check if the login attempt is valid
        if (!empty($username) && !empty($password)) {
            $user = wp_authenticate($username, $password);

            if (is_wp_error($user)) {
                // Increment the login attempt count
                if (!isset($_SESSION['login_attempts'])) {
                    $_SESSION['login_attempts'] = 0;
                }
                $_SESSION['login_attempts']++;

                // Check if the maximum number of attempts has been reached
                if ($_SESSION['login_attempts'] >= $max_attempts) {
                    $_SESSION['lockout_time'] = time();
                }
            } else {
                // Reset the login attempt count on successful login
                $_SESSION['login_attempts'] = 0;
            }
        }
    }

    // Check if the user is locked out
    if (isset($_SESSION['lockout_time'])) {
        $time_since_lockout = time() - $_SESSION['lockout_time'];

        if ($time_since_lockout < $lockout_duration) {
            wp_die('Too many login attempts. Please try again in ' . ($lockout_duration - $time_since_lockout) . ' seconds.');
        } else {
            // Reset lockout after the duration has passed
            unset($_SESSION['lockout_time']);
            $_SESSION['login_attempts'] = 0;
        }
    }
}

// Add action to clear session on logout
add_action('wp_logout', 'wp_dudecom_clear_login_attempts');

function wp_dudecom_clear_login_attempts() {
    if (!session_id()) {
        session_start();
    }
    unset($_SESSION['login_attempts']);
    unset($_SESSION['lockout_time']);
}

?>

Instrukcja

Aby wdrożyć kod ograniczający próby logowania i chroniący Twoją stronę WordPress przed atakami typu brute force, wykonaj następujące kroki:

Lokalizacja pliku: Dodaj kod do pliku functions.php swojego motywu lub stwórz plik własnej wtyczki.

Wymagania wstępne: Nie są wymagane dodatkowe wtyczki ani ustawienia.

Kroki wdrożenia:

  1. Dostęp do plików WordPress: Użyj klienta FTP lub menedżera plików swojego dostawcy hostingu, aby uzyskać dostęp do plików instalacyjnych WordPress.
  2. Znajdź plik: Przejdź do wp-content/themes/nazwa-twojego-motywu/ i otwórz plik functions.php. Alternatywnie, stwórz nowy plik PHP w wp-content/plugins/, jeśli wolisz użyć własnej wtyczki.
  3. Dodaj kod: Skopiuj podany kod i wklej go na końcu pliku functions.php lub w pliku własnej wtyczki.
  4. Zapisz zmiany: Zapisz zmiany w pliku i upewnij się, że nie ma błędów składniowych.
  5. Przetestuj wdrożenie: Wyloguj się ze swojej strony WordPress i spróbuj zalogować się wielokrotnie z nieprawidłowymi danymi logowania, aby przetestować funkcjonalność blokady.
  6. Zweryfikuj komunikat o blokadzie: Po przekroczeniu maksymalnej liczby prób upewnij się, że pojawia się komunikat o blokadzie, wskazujący pozostały czas blokady.
  7. Sprawdź udane logowanie: Zaloguj się z poprawnymi danymi logowania, aby zweryfikować, że licznik prób logowania się resetuje.

To wdrożenie pomoże zabezpieczyć stronę logowania WordPress, ograniczając liczbę prób logowania i zapewniając okres blokady w przypadku powtarzających się niepowodzeń.

Jeśli potrzebujesz pomocy przy tym wdrożeniu lub wymagasz bardziej zaawansowanej funkcjonalności, rozważ skontaktowanie się z ekspertami z wp-dude.com.