Zabezpiecz WordPress za pomocą fragmentu kodu Limit Login Attempts
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:
- 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.
- Znajdź plik: Przejdź do
wp-content/themes/nazwa-twojego-motywu/
i otwórz plikfunctions.php
. Alternatywnie, stwórz nowy plik PHP wwp-content/plugins/
, jeśli wolisz użyć własnej wtyczki. - Dodaj kod: Skopiuj podany kod i wklej go na końcu pliku
functions.php
lub w pliku własnej wtyczki. - Zapisz zmiany: Zapisz zmiany w pliku i upewnij się, że nie ma błędów składniowych.
- Przetestuj wdrożenie: Wyloguj się ze swojej strony WordPress i spróbuj zalogować się wielokrotnie z nieprawidłowymi danymi logowania, aby przetestować funkcjonalność blokady.
- Zweryfikuj komunikat o blokadzie: Po przekroczeniu maksymalnej liczby prób upewnij się, że pojawia się komunikat o blokadzie, wskazujący pozostały czas blokady.
- 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.