Skąd biorą się włamania na strony firmowe
Bezpieczeństwo WordPressa rzadko przegrywa z wyrafinowanym atakiem. Za większością typowych incydentów stoją trzy rzeczy: nieaktualna wtyczka ze znaną podatnością, przejęte hasło administratora i hosting współdzielony z innymi, zaniedbanymi stronami. Boty skanują internet bez przerwy i nie wybierają ofiar - szukają konkretnej wersji konkretnego dodatku. Jeśli ją masz, trafią do Ciebie w ciągu kilku dni od publikacji luki.
Skutki bywają mniej spektakularne niż wyciek bazy, ale kosztowne: przekierowania na strony hazardowe widoczne tylko dla osób wchodzących z Google, ukryte linki spamowe, wysyłka phishingu przez formularz kontaktowy, czerwone ostrzeżenie w przeglądarce. Wyobraź sobie kancelarię prawną, która dowiaduje się o problemie od klienta: jej strona po kliknięciu w wynik wyszukiwania przenosi na sklep z podróbkami. Źródłem okazuje się slider kupiony kilka lat temu i nigdy nieaktualizowany, bo „przecież działał”. To jeden z najbardziej typowych scenariuszy.
Poniżej lista, którą warto przejść raz porządnie, a potem powtarzać co kwartał.
Lista kontrolna: aktualizacje i dodatki
- Rdzeń WordPressa - aktualizacje poprawkowe są domyślnie automatyczne, ale sprawdź, czy nikt ich nie wyłączył w
wp-config.php. Duże wersje instaluj po teście na kopii. - Inwentaryzacja wtyczek - wypisz wszystkie dodatki i przy każdym odpowiedz: czy jest używany, kiedy autor ostatnio go aktualizował, czy pochodzi z oficjalnego repozytorium lub od znanego producenta. Wtyczka bez aktualizacji od ponad roku to kandydat do wymiany.
- Usuń, a nie wyłączaj - nieaktywna wtyczka nadal leży na serwerze, a jej podatny plik często da się wywołać bezpośrednio z internetu.
- Motywy - zostaw aktywny motyw i jeden domyślny jako zapasowy. Stare motywy potomne i pakiety demo usuń.
- Zero wersji „nulled” - pirackie kopie płatnych wtyczek bardzo często mają wszytego backdoora. Oszczędność kilkudziesięciu dolarów kończy się sprzątaniem całej instalacji.
- Wersja PHP - zajrzyj do panelu hostingu i upewnij się, że strona nie działa na gałęzi PHP, która nie dostaje już poprawek bezpieczeństwa.
Lista kontrolna: konta i logowanie
- Każda osoba ma własne konto. Wspólny login „admin” używany przez agencję, marketing i szefa to proszenie się o kłopoty.
- Rola Administrator tylko dla 1-2 osób. Osoby piszące teksty dostają rolę Redaktor lub Autor.
- Logowanie dwuskładnikowe (aplikacja TOTP albo klucz sprzętowy) dla wszystkich kont z prawem publikacji.
- Limit prób logowania i czasowa blokada adresu po serii nieudanych prób.
- Konta byłych pracowników i poprzednich wykonawców usuń, a ich wpisy przypisz komuś innemu.
- Hasła do bazy danych, SFTP i panelu hostingu inne niż do WordPressa, trzymane w menedżerze haseł.
- Wyłącz
xmlrpc.php, jeśli nie korzystasz z aplikacji mobilnej WordPressa ani Jetpacka - to popularna furtka do ataków słownikowych.
Lista kontrolna: serwer i konfiguracja
| Ustawienie | Co sprawdzić | Dlaczego to ważne |
|---|---|---|
| Edycja plików z kokpitu | DISALLOW_FILE_EDIT ustawione na true |
przejęte konto nie podmieni kodu motywu jednym kliknięciem |
| Uprawnienia plików | katalogi 755, pliki 644, wp-config.php jeszcze ciaśniej |
ogranicza skutki włamania do sąsiednich stron na tym samym koncie |
| Klucze i sole | unikalne, zmienione po każdym incydencie | unieważniają skradzione ciasteczka sesji |
| HTTPS | ważny certyfikat, przekierowanie z HTTP, brak mieszanej treści | hasła i dane z formularzy nie lecą otwartym tekstem |
| Nagłówki bezpieczeństwa | HSTS, X-Content-Type-Options, polityka osadzania w ramkach | utrudniają część ataków po stronie przeglądarki |
PHP w katalogu uploads |
wykonywanie zablokowane | wgrany „obrazek” nie uruchomi się jako skrypt |
| Listowanie katalogów | wyłączone | nikt nie przegląda zawartości folderów z zewnątrz |
Osobna sprawa to hosting. Jeśli na jednym koncie współdzielonym trzymasz stronę firmową, stary blog i testową instalację sprzed trzech lat, to włamanie do najsłabszej z nich otwiera drogę do pozostałych. Porządek zaczyna się od rozdzielenia albo skasowania tego, co zbędne.
Zapora aplikacyjna i monitoring
Wtyczka bezpieczeństwa w rodzaju Wordfence czy Solid Security to rozsądne minimum dla małej strony: skanuje pliki, porównuje je z oryginałami i odrzuca część podejrzanych żądań. Ma jednak ograniczenie - działa wewnątrz WordPressa, więc złośliwe żądanie musi najpierw do niego dotrzeć i zużyć zasoby serwera. Skuteczniejszą warstwą jest zapora aplikacji webowych (WAF) postawiona przed serwerem, na poziomie CDN lub reverse proxy. Odsiewa skanery, próby wykorzystania znanych luk i ataki na formularz logowania, zanim w ogóle dotrą do PHP.
Dwie rzeczy łatwo przeoczyć. Pierwsza to formularze: bez ochrony przed botami (honeypot, Cloudflare Turnstile albo reCAPTCHA) formularz kontaktowy staje się bramką do rozsyłania spamu z Twojej domeny, a to szybko psuje reputację poczty firmowej. Druga to wyciek nazw użytkowników. Domyślnie WordPress ujawnia loginy autorów w adresach archiwów i w REST API, co ułatwia zgadywanie haseł. Ogranicz publiczny endpoint użytkowników i ustaw nazwy wyświetlane inne niż login.
Oprócz tego przydają się:
- monitoring dostępności z powiadomieniem, gdy strona przestaje odpowiadać,
- kontrola integralności plików, czyli alert, gdy zmieni się coś w
wp-includesbez aktualizacji, - Google Search Console podpięta pod firmową skrzynkę - tam pojawi się komunikat o zhakowanej treści,
- logi dostępu trzymane dłużej niż kilka dni, bo bez nich trudno ustalić, którędy wszedł atakujący.
Kopie zapasowe, które da się odtworzyć
Kopia robiona przez wtyczkę i zapisywana w tym samym katalogu co strona chroni przed Twoją pomyłką, ale nie przed włamaniem. Ktoś, kto ma dostęp do plików, ma też dostęp do archiwów. Rozsądny układ to codzienna kopia bazy i plików wysyłana poza serwer (magazyn obiektowy, osobne konto) i przechowywana co najmniej 30 dni. Skąd tak długo? Infekcję wykrywa się często po kilku tygodniach, a wtedy tygodniowa rotacja zawiera już wyłącznie zarażone wersje.
Kopia zapasowa, której nigdy nie odtworzono na próbę, jest tylko nadzieją. Raz na kwartał postaw ją na serwerze testowym i sprawdź, czy strona działa, a formularz wysyła wiadomości.
Jeśli do włamania już doszło, samo wgranie plików z kopii nie wystarczy. Trzeba ustalić wektor ataku, zmienić wszystkie hasła i klucze, przejrzeć użytkowników w bazie, sprawdzić zadania cron i dopiero wtedy poprosić Google o ponowną weryfikację. Tym zajmujemy się w ramach usługi przywracania strony po awarii.
Co zrobić w tym tygodniu
Nie musisz wdrażać wszystkiego naraz. Kolejność, która daje najwięcej przy najmniejszym wysiłku:
- Usuń nieużywane wtyczki i motywy, zaktualizuj resztę.
- Przejrzyj konta użytkowników i włącz 2FA dla administratorów.
- Sprawdź, dokąd trafiają kopie i czy da się z nich odtworzyć stronę.
- Dodaj
DISALLOW_FILE_EDITi zablokuj PHP w katalogu z mediami. - Rozważ WAF przed serwerem, szczególnie jeśli strona ma formularze albo sklep.
Większość tych punktów to jednorazowa praca na kilka godzin. Trudniej utrzymać porządek przez kolejne miesiące: cotygodniowe aktualizacje, reakcja na świeżo opublikowane podatności, sprawdzanie kopii. Jeśli nikt w firmie nie ma na to czasu, możesz przekazać to zadanie w ramach opieki nad stroną. Wszystko robimy zdalnie i co miesiąc wysyłamy raport: co zaktualizowaliśmy, co zablokowaliśmy i co wymaga Twojej decyzji.
Redakcja Apply
Rozwój oprogramowania i e-commerce