Blog 24/7

zabezpieczenie katalogu hasłem

TAB. 1Hasłoobie formy
Po angielskuHTTP basic authentication (password-protecting wp-admin)
Którą formą pisaćobie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski.
Inne formyHTTP Basic Authentication · Basic Auth · htpasswd · dodatkowe hasło do wp-admin · ochrona katalogu hasłem
KategoriaStrony WWW, WordPress i hosting

Zabezpieczenie katalogu hasłem (HTTP Basic Authentication) to dodatkowe hasło, którego żąda sam serwer WWW, zanim przekaże żądanie do aplikacji. W WordPressie stosuje się je zwykle przed formularzem logowania albo katalogiem /wp-admin/. Dokumentacja WordPressa opisuje taką ochronę po stronie serwera jako drugą warstwę wokół panelu, ekranu logowania i plików [1]. Atakujący albo bot musi najpierw pokonać tę warstwę, a dopiero potem dociera do właściwych plików panelu [1].

Jak działa

Mechanizm opisuje RFC 7617. Schemat „Basic” przesyła dane uwierzytelniające jako parę identyfikator użytkownika i hasło, zakodowaną w Base64 [3]. Klient łączy identyfikator, dwukropek i hasło, a wynik koduje w Base64 [3]. Base64 to kodowanie, a nie szyfrowanie. Dlatego RFC zastrzega, że schemat nie jest bezpieczną metodą uwierzytelniania bez zewnętrznego zabezpieczenia, takiego jak TLS, bo identyfikator i hasło idą przez sieć otwartym tekstem [3].

Przeglądarka pokazuje wtedy własne okienko logowania, a nie formularz strony. Przebieg pierwszego wejścia pokazuje schemat poniżej.

RYS. 1Hasło serwera przed wp-login.php

Nazwa obszaru chronionego (realm) ma dwie funkcje. Przeglądarka pokazuje ją w oknie hasła i na jej podstawie decyduje, które hasło wysłać dla danego obszaru [4]. Po zalogowaniu w jednym obszarze przeglądarka sama ponawia to hasło dla innych miejsc na tym samym serwerze z tą samą nazwą [4].

Składniki

Konfiguracja składa się z pliku z hasłami i kilku dyrektyw serwera. W Apache można je umieścić w głównej konfiguracji albo w pliku .htaccess; druga droga wymaga, by serwer zezwalał na to dyrektywą AllowOverride AuthConfig [4]. Szerzej o tej drodze mówi hasło zabezpieczenia w .htaccess.

ElementApachenginx
Włączenie ochronyAuthType Basic [4]auth_basic [6]
Nazwa obszaruAuthName [4]argument auth_basic [6]
Plik z hasłamiAuthUserFile [4]auth_basic_user_file [6]
Kto ma dostępRequire valid-user [4]każdy użytkownik z pliku [6]

Plik z hasłami tworzy program htpasswd. Program zapisuje skróty haseł algorytmem bcrypt, zmodyfikowanym MD5, SHA-1 albo funkcją systemową crypt() [5]. Domyślny od wersji 2.2.18 jest MD5, a przełącznik -B wybiera bcrypt, który dokumentacja określa jako obecnie bardzo bezpieczny [5]. SHA-1 i klasyczny crypt() dokumentacja uznaje za niebezpieczne według dzisiejszych standardów [5]. Plik trzyma więc skróty, a nie hasła wprost.

Dokumentacja Apache zaleca, by plik z hasłami leżał w miejscu niedostępnym z sieci, tak by nikt nie mógł go pobrać [4]. Przykład: gdy strona jest serwowana z /usr/local/apache/htdocs, plik haseł można trzymać w /usr/local/apache/passwd [4].

W WordPressie

Sekurak w poradniku zabezpieczania WordPressa wskazuje standardowy mechanizm HTTP Basic Authentication jako jedną ze zmian w konfiguracji serwera, obok dopuszczania dostępu do panelu tylko z wybranych adresów IP [7]. Ta druga metoda to biała lista adresów IP.

Podstawowy problem dotyczy pliku admin-ajax.php. Leży on w katalogu /wp-admin/, a korzysta z niego także front strony. Dokumentacja WordPressa ostrzega, że samo zabezpieczenie katalogu /wp-admin/ może zepsuć część funkcji, na przykład obsługę AJAX w wp-admin/admin-ajax.php [1]. Nowszy rozdział o atakach siłowych idzie dalej. Wymienia BasicAuth na całym /wp-admin wśród starszych zaleceń, które psują wtyczki oparte na AJAX albo pogarszają wygodę [2]. Zaleca, by blokady na poziomie serwera obejmowały wąski zakres, na przykład /wp-login.php i /xmlrpc.php, oraz by opisać wyjątki potrzebne stronie [2].

Poniższy fragment jest ilustracją takiego wąskiego zakresu dla Apache. Ścieżka do pliku haseł jest przykładowa i leży poza katalogiem strony.

<Files "wp-login.php">
  AuthType Basic
  AuthName "Panel example.com"
  AuthUserFile "/home/example/.htpasswd"
  Require valid-user
</Files>

Gdy chroniony jest cały katalog /wp-admin/, wyjątek dla admin-ajax.php buduje się z dyrektywy Require all granted, która przepuszcza wszystkie żądania [8]. Dokumentacja WordPressa w przykładach dla serwera radzi też kierować odpowiedzi 401 i 403 do statycznych stron błędu [2].

Znaczenie i ograniczenia

Zysk polega na tym, że boty nie docierają do uwierzytelniania WordPressa. Dokumentacja podkreśla, że wiele ataków na WordPressa prowadzą automatycznie złośliwe boty [1]. Najczęstsze ataki dzieli na dwie grupy: żądania z ładunkiem dla znanych podatności oraz zgadywanie haseł metodą siłową [1]. Zabezpieczenie katalogu hasłem pomaga głównie na tę drugą grupę, obok takich środków jak limit prób logowania i ochrona przed atakami brute force.

Ograniczenia są trzy.

  • Poufność zależy od HTTPS. Apache przypomina, że Basic wysyła hasło od klienta do serwera niezaszyfrowane i nie powinien chronić danych wrażliwych bez mod_ssl [4].
  • Wspólne hasło. Sekurak zauważa, że gdy do panelu potrzebuje dostępu większa grupa osób, pojawia się pokusa współdzielenia poświadczeń, a rozwiązanie traci elastyczność [7]. Dla takich przypadków poradnik wskazuje uwierzytelnianie wieloskładnikowe [7].
  • Nie łata podatności. Warstwa hasła nie chroni wtyczek dostępnych z frontu, w tym admin-ajax.php i REST API; zob. niezabezpieczony endpoint REST API.

Dobre praktyki

Rozdział WordPressa o atakach siłowych jako główne środki wymienia silne i unikalne hasła, menedżer haseł i uwierzytelnianie dwuskładnikowe dla wszystkich administratorów [2]. Zabezpieczenie katalogu hasłem jest dodatkiem do tych środków, a nie ich zamiennikiem.

  1. Chroń wąski zakres: wp-login.php, ewentualnie xmlrpc.php, zamiast całego /wp-admin/ [2].
  2. Wymuś HTTPS dla chronionego obszaru [3].
  3. Twórz plik haseł z przełącznikiem -B (bcrypt) [5] i trzymaj go poza katalogiem publicznym [4].
  4. Zmiany testuj najpierw na kopii strony; dokumentacja WordPressa zaleca sprawdzenie przykładów serwerowych na środowisku testowym przed produkcją [2].
  5. Zapisz wyjątki, których strona potrzebuje, na przykład aplikacje mobilne, Jetpack albo SSO [2].
TAB. 2

Przypisy

8
  1. [1] Hardening WordPress — Advanced Administration Handbook · WordPress.org
  2. [2] Brute Force Attacks — Advanced Administration Handbook · WordPress.org
  3. [3] RFC 7617: The 'Basic' HTTP Authentication Scheme · IETF
  4. [4] Authentication and Authorization — Apache HTTP Server 2.4 · Apache Software Foundation
  5. [5] htpasswd — Manage user files for basic authentication · Apache Software Foundation
  6. [6] Module ngx_http_auth_basic_module · nginx
  7. [7] Jak zabezpieczyć WordPress? Poradnik krok po kroku · Sekurak
  8. [8] mod_authz_core — Apache HTTP Server 2.4 · Apache Software Foundation
TAB. 3

Hasła w tym artykule

12
TAB. 4

Linkują tutaj

4

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com