15.01.2020

Zdarza się, że standardowy formularz logowania do panelu staje się celem ataku botów próbujących zgadnąć nasze hasło. Niestety takie ataki nie dość, że mają niemiłe konsekwencje to jeszcze spowalniają naszą stronę, hosting, serwer.

Najprostszym sposobem zniechęcenia atakujących jest wprowadzenie dodatkowego zabezpieczenia o nazwie HTTP Authorization (czasem nazywane także Basic Authorization lub w skrócie HTTP Auth).

HTTP Auth wprowadza dodatkowy panel logowania do wybranej części strony, a w tym przypadku jest to panel logowania do kokpitu WordPressa. Na szczęście ataki wycelowane w ten panel nie obciążają bezpośrednio naszej strony, ale sam serwer WWW, który jest odpowiedzialny za ten sposób autoryzacji. Dzięki temu nie odczuwamy spowolnienia strony, zmniejszamy szanse na powodzenia ataku oraz zniechęcamy większość botów.

Dodanie takiej autoryzacji jest dość proste. Potrzebujemy jedynie dostępu do plików naszej strony, np. poprzez FTP oraz dwóch plików: .htaccess oraz .htpasswd. Oto lista kroków do wykonania


1. Stworzenie nazwy użytkownika oraz hasła

Najprościej skorzystać z narzędzia: https://www.htaccesstools.com/htpasswd-generator/. Na przykład użytkownik test z hasłem JakiesTrudneHasloABC da nam następujący ciąg znaków: test:$apr1$SEk2n.h1$sUpHEulqMu4.e9wI.vxw51

2. Stworzenie pliku .htpasswd

W katalogu wp-admin/ tworzymy plik .htpasswd i wklejamy do niej ciąg znaków z poprzedniego kroku.

3. Stworzenie pliku .htaccess

W katalogu wp-admin/ tworzymy plik .htaccess i wypełniamy go kodem:

AuthType Basic
AuthName "Protected"
AuthUserFile /pełna/sciezka/do/katalogu/strony/wp-admin/.htpasswd
require valid-user

<Files admin-ajax.php>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Fragment <Files>...</Files> jest wymagany do poprawnego działania strony. Plik admin-ajax.php znajduje się w katalogu wp-admin/, ale nie chcemy aby obejmowała go autoryzacja.

Dodatek

Istnieje możliwość stworzenia HTTP Auth tylko dla wybranych adresów URL, np.: naszastrona.pl/tajny/link/dla/wtajemniczonych/

AuthType Basic
AuthName "Protected"
AuthUserFile /pełna/sciezka/do/katalogu/strony/wp-admin/.htpasswd

SetEnvIf Request_URI .* noauth
SetEnvIf Request_URI /tajny/link/dla/wtajemniczonych/ !noauth

<RequireAny>
  Require env noauth
  Require valid-user
</RequireAny>

Podsumowanie

Po wykonaniu wszystkich kroków powinniśmy zobaczyć ekran logowania jeszcze przed wyświetleniem się standardowego formularza logowania WordPressa.