Zabezpieczenie WordPressa: ochrona wp-login.php i wp-admin za pomocą hasła .htaccess

Jednym z najczęstszych źródeł obciążenia serwerów z WordPressem są automatyczne próby logowania do panelu administracyjnego. Boty wysyłają tysiące żądań typu POST /wp-login.php, co nie tylko spowalnia stronę, ale także zajmuje zasoby PHP i CPU. Najprostszym i zarazem najskuteczniejszym sposobem, by temu zapobiec, jest zabezpieczenie plików wp-login.php oraz katalogu wp-admin hasłem HTTP (Basic Auth) w pliku .htaccess.

Dlaczego warto chronić wp-login.php

  • boty nie uruchamiają w ogóle PHP (blokada odbywa się na poziomie Apache),
  • brute-force i skanery przestają działać,
  • serwer zużywa mniej zasobów,
  • login WordPressowy pozostaje dodatkową warstwą ochrony — użytkownik musi znać dwa hasła.

Jak działa zabezpieczenie Basic Auth

Mechanizm Basic Auth działa jeszcze przed uruchomieniem PHP. Gdy ktoś próbuje wejść na stronę wp-login.php lub wp-admin, serwer Apache sprawdza, czy użytkownik przesłał poprawny nagłówek Authorization. Jeśli nie, odsyła odpowiedź 401 Unauthorized, a przeglądarka wyświetla okienko logowania.

Dzięki temu WordPress nie wykonuje żadnego kodu, a sam serwer odcina dostęp do plików jeszcze przed uruchomieniem interpretera PHP.

Krok 1. Utwórz plik .htpasswd

Plik .htpasswd powinien znajdować się poza katalogiem publicznym, np.:

/home/[USER]/.htpasswds/.htpasswd

Można go wygenerować poleceniem:

htpasswd -c /home/[USER]/.htpasswds/.htpasswd admin

lub online — za pomocą generatora https://pro-link.pl/md5

Krok 2. Dodaj zabezpieczenie do głównego pliku .htaccess

W katalogu głównym WordPressa (public_html) należy dopisać na początku pliku .htaccess poniższy fragment:

<Files "wp-login.php">
AuthType Basic
AuthName "Protected Area"
AuthUserFile /home/[USER]/.htpasswds/.htpasswd
Require valid-user
</Files>

Ta reguła sprawia, że każde wejście na adres /wp-login.php będzie wymagało wcześniejszego podania loginu i hasła z pliku .htpasswd.

Krok 3. Zabezpiecz katalog wp-admin

W katalogu /wp-admin należy utworzyć lub uzupełnić plik .htaccess o wpis:

<FilesMatch "admin-ajax\.php|async-upload\.php">
Satisfy any
Allow from all
</FilesMatch>

AuthType Basic
AuthName "Protected Area"
AuthUserFile /home/[USER]/.htpasswds/.htpasswd
Require user username

Dzięki temu cały panel administracyjny (/wp-admin) również będzie wymagał logowania przez to samo hasło. Reguła FilesMatch pozwala przy tym zachować dostęp do plików AJAX potrzebnych WordPressowi do działania strony.

Krok 4. Testowanie zabezpieczenia

Po zapisaniu plików spróbuj wejść na adres:

https://[DOMAIN]/wp-login.php

Jeśli pojawi się okienko logowania przeglądarki (a nie formularz WordPressa), wszystko działa prawidłowo.

Można też sprawdzić z wiersza poleceń:

curl -I https://[DOMAIN]/wp-login.php

Odpowiedź powinna zawierać:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Protected Area"

Przykładowe logi serwera (zamaskowane)

Poniżej przykład realnego ataku brute-force widocznego w logach Apache:

157.230.45.41 - - [06/Nov/2025:08:54:54 +0100] "POST //wp-login.php HTTP/1.1" 200 11063 "https://<span class="mask">[DOMAIN]</span>//wp-login.php" "Mozilla/5.0 ..."
157.230.45.41 - - [06/Nov/2025:08:54:57 +0100] "POST //wp-login.php HTTP/1.1" 200 11063 "https://<span class="mask">[DOMAIN]</span>//wp-login.php" "Mozilla/5.0 ..."
83.3.53.218 - - [06/Nov/2025:09:07:05 +0100] "GET /wp-admin HTTP/2.0" 401 490 "-" "Mozilla/5.0 ..."
83.3.53.218 - - [06/Nov/2025:09:07:28 +0100] "GET //wp-login.php HTTP/2.0" 200 3531 "-" "Mozilla/5.0 ..."

Widać tu typowy schemat: bot wysyła kolejne zapytania do wp-login.php, ale katalog wp-admin od razu odpowiada kodem 401 — dzięki poprawnie ustawionej autoryzacji Basic Auth.

Podsumowanie

  • Zawsze chroń zarówno wp-login.php, jak i wp-admin.
  • Używaj jednej wspólnej ścieżki do pliku .htpasswd dla obu lokalizacji.
  • Przenieś .htpasswd poza katalog public_html — jest to bezpieczniejsze.
  • Po każdej migracji lub reinstalacji WordPressa upewnij się, że te wpisy nadal znajdują się w plikach .htaccess.

Zastosowanie prostego zabezpieczenia na poziomie serwera eliminuje 99% ataków typu brute-force i znacząco zmniejsza zużycie zasobów na hostingu. To jedna z najskuteczniejszych i najprostszych metod ochrony WordPressa.

Zamów wycenę
Polityka prywatności | Regulamin
Pro-link 2005-2020