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

Ta strona korzysta z ciasteczek

Niezbędne ciasteczka umożliwiają prawidłowe funkcjonowanie strony internetowej, zapewniając podstawowe funkcje, takie jak nawigacja po stronie i dostęp do jej zabezpieczonych obszarów. Bez tych ciasteczek strona nie może działać prawidłowo.

Niezbędne

Niezbędne ciasteczka umożliwiają prawidłowe funkcjonowanie strony internetowej, zapewniając podstawowe funkcje, takie jak nawigacja po stronie i dostęp do jej zabezpieczonych obszarów. Bez tych ciasteczek strona nie może działać prawidłowo.

Zgoda na Analitykę

Wyrażam zgodę na wykorzystywanie plików cookie Google Analytics w celu prowadzenia anonimowych statystyk, analizy sposobu korzystania ze strony oraz jej ulepszania, przy czym część danych może być także używana przez Google do personalizacji i pomiaru skuteczności reklam.

Zgoda na Reklamy spersonalizowane

Wyrażam zgodę na wykorzystywanie przez Google plików cookie i podobnych technologii w celu wyświetlania reklam spersonalizowanych, pomiaru ich skuteczności oraz zapewnienia bezpieczeństwa strony poprzez odróżnianie użytkowników od botów.

Informacje

Ciasteczka (cookies) to małe pliki tekstowe, które mogą być wykorzystywane przez strony internetowe, by usprawnić doświadczenie użytkownika. Zgodnie z przepisami prawa, możemy przechowywać na Twoim urządzeniu ciasteczka, które są ściśle niezbędne do funkcjonowania tej strony. W przypadku wszystkich innych typów ciasteczek potrzebujemy Twojej zgody. Oznacza to, że ciasteczka klasyfikowane jako niezbędne są przetwarzane na podstawie art. 6 ust. 1 lit. f RODO. Wszystkie pozostałe ciasteczka, czyli te z kategorii preferencji i marketingu, są przetwarzane na podstawie art. 6 ust. 1 lit. a RODO. Nasza strona korzysta z różnych rodzajów ciasteczek. Niektóre ciasteczka są umieszczane przez usługi stron trzecich, które pojawiają się na naszych stronach. W każdej chwili możesz zmienić lub wycofać swoją zgodę z Oświadczenia o ciasteczkach na naszej stronie internetowej. Dowiedz się więcej o tym, kim jesteśmy, jak możesz się z nami skontaktować i jak przetwarzamy dane osobowe, zapoznając się z naszą Polityką Prywatności.