WordPress: Komunikat błędnego logowania

Spis treści

Jest kilka rzeczy, które mogą zdradzić dane logowania do serwisu WordPressa. Nie będę tutaj opisywał tej najbardziej oczywistej, czyli posługiwania się loginem bezpośrednio na blogu, tylko skupię się na nieco bardziej chytrej opcji, która zakłada odpytywanie formularza logowania w celu ustalenia, które loginy są dostępne w bazie danych. To tak jak grać w statki i strzelać na oślep, aż w końcu się trafi w któryś z nich, a skąd wiemy, że trafiliśmy? Po zwracanej odpowiedzi od drugiego gracza. I podobnie jest w przypadku formularza logowania WordPressa, z tym, że jeśli chodzi o strony www, to mamy nieco zawężone pole strzału, bo administrator/użytkownik zwykle wybiera niezbyt skomplikowany login często kojarzący się z pewnymi elementami jego życia, a gdy potencjalny atakujący ustali taki login, to będzie w stanie dokonać ataku Brute Force na hasło do tego konta.

Wiadomości przy logowaniu

By przekonać się jak działa powyżej opisany schemat, spróbujmy zalogować się na nieistniejące konto na naszym blogu. Powinniśmy dostać poniższy komunikat:

wordpress-bledny-komunikat

Z kolei, jeśli spróbujemy zalogować się na istniejące konto ale bez znajomości hasła do niego, to dostaniemy nieco inny monit:

wordpress-bledny-komunikat

Komunikaty są bardzo oczywiste i na ich podstawie możemy bez problemu stwierdzić, które konto istnieje w bazie, a które nie. Jeśli prowadzimy blog samotnie i mamy do tego zaprzęgnięty system komentarzy, np. z disqusa, to powinniśmy zastanowić się jak zabezpieczyć się przed takim próbkowaniem loginów. Oczywiście możemy zabronić dostępu do pliku wp-login.php ale to tylko pod warunkiem, że administratorzy lub/i autorzy wpisów mają stały adres IP. W przeciwnym wypadku musimy pomyśleć o innym rozwiązaniu.

Niejednoznaczny komunikat

Istnieje możliwość ujednolicenia tych dwóch powyższych komunikatów, tak by nie rezygnować z samej informacji o wprowadzeniu błędnych danych logowania ale też by nie zdradzać czy dane konto faktycznie istnieje w systemie.

Jeśli interesuje nas taki mechanizm, to do pliku functions.php w motywie bloga dodajemy poniższy kod:

// Filter Wordpress admin error message
function rs_custom_login_error( $message ) {
    global $errors;

    if (isset($errors->errors['invalid_username']) || isset($errors->errors['incorrect_password'])) :
        $message = __('ERROR: Invalid username or password combination.', 'morfik') . ' ' .
        sprintf(('%3$s?'),
        site_url('wp-login.php?action=lostpassword', 'morfik'),
        __('Password Lost and Found', 'morfik'),
        __('Lost Password', 'morfik'));
    endif;

    return $message;
}
add_filter( 'login_errors', 'rs_custom_login_error' );

I teraz już nie będzie miało znaczenia czy wprowadzimy zły login czy hasło, zawsze zostanie nam wyrzucony ten sam błąd:

wordpress-bledny-komunikat

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.