Poradnik

Jak zabezpieczyć stronę WordPress: 12 kroków z prawdziwych włamań

Dwanaście kroków, które zamykają najczęstsze drogi włamania do WordPressa, ułożonych od najważniejszych. Przy wielu z nich przykład z infekcji, które sami czyściliśmy.

Szymon Przybylski
Szymon PrzybylskiWłaściciel Advertise24
Aktualizacja: 6 min czytania
Mężczyzna dotyka hologramu tarczy z kłódką i listy zabezpieczeń odhaczonych na zielono

Krótka odpowiedź: WordPressa nie zabezpiecza jedna wtyczka, tylko kilka nawyków: aktualizacje, logowanie dwuetapowe dla administratorów, regularny przegląd kont i haseł aplikacji, kopie zapasowe poza serwerem i oddzielenie stron od siebie. Poniżej 12 kroków ułożonych od najważniejszych. Przy wielu z nich podajemy przykład z infekcji, które sami czyściliśmy.

Jak atakujący dostają się do WordPressa

Najczęściej jedną z trzech dróg:

  • Nieaktualna wtyczka albo motyw ze znaną luką. Po opublikowaniu poprawki atakujący wiedzą, czego szukać na stronach, które jej nie zainstalowały.
  • Wykradzione albo słabe hasło administratora, często używane jeszcze w kilku innych miejscach.
  • Podrzucony kod: piracka wersja płatnej wtyczki, menedżer plików w panelu albo plik wgrany przez inną zainfekowaną stronę na tym samym koncie hostingowym.

Dwa przykłady z naszej pracy, bez nazw klientów. W pracowni reklamy 13 stron stało na jednym koncie hostingowym. Znaleźliśmy tam 157 plików z tylnymi furtkami i 14 obcych kont administratora, a infekcja siedziała od 2021 roku, bo wcześniejsze sprzątanie usuwało objawy, ale nie mechanizmy powrotu. W sklepie internetowym malware ukrywał się w fałszywej wtyczce, zadaniach cron i pliku .user.ini, a po pierwszym czyszczeniu napastnik wrócił z wykradzionym hasłem. Żaden administrator sklepu nie miał logowania dwuetapowego.

12 kroków, żeby zabezpieczyć stronę WordPress

1. Aktualizuj rdzeń, wtyczki i motyw

To najważniejszy krok, bo zamyka znane luki, zanim ktoś je wykorzysta. Rób to z kopią zapasową i testem formularzy po każdej zmianie. Jak to zrobić bez psucia strony, opisujemy w poradniku aktualizacja WordPressa krok po kroku.

2. Usuń wtyczki i motywy, których nie używasz

Wyłączona wtyczka dalej leży na serwerze i dalej może mieć lukę. Zostaw tylko to, co naprawdę pracuje. Nigdy nie instaluj pirackich wersji płatnych wtyczek: to jeden z najprostszych sposobów, żeby samemu wgrać sobie złośliwy kod.

3. Włącz logowanie dwuetapowe dla każdego administratora

Drugi krok logowania, na przykład kod z aplikacji w telefonie, sprawia, że samo hasło nie wystarczy. W sklepie z przykładu wyżej to właśnie wykradzione hasło pozwoliło napastnikowi wrócić po pierwszym czyszczeniu. Po naprawie wymusiliśmy logowanie dwuetapowe dla wszystkich administratorów.

4. Przejrzyj listę administratorów

Wejdź w Użytkownicy i sprawdź, kto ma rolę administratora. Każde konto, którego nie rozpoznajesz, to sygnał alarmowy. W pracowni reklamy było ich 14. Konta byłych pracowników i dawnych wykonawców usuń albo obniż im uprawnienia. Każda osoba powinna mieć własne konto, a nie jedno wspólne hasło.

5. Usuń nieznane hasła aplikacji

W profilu użytkownika jest sekcja Hasła aplikacji. Takie hasło pozwala logować się do strony przez interfejs programistyczny bez podawania głównego hasła i przetrwa jego zmianę. Atakujący chętnie je zostawiają, żeby wrócić po sprzątaniu. Jeśli nie korzystasz z aplikacji, które ich wymagają, lista powinna być pusta.

6. Ogranicz próby logowania i wyłącz XML-RPC

Limit nieudanych logowań zatrzymuje zgadywanie haseł. XML-RPC to stary mechanizm do zdalnego publikowania, przez który da się próbować wielu haseł w jednym zapytaniu. Jeśli nie używasz aplikacji mobilnej WordPressa ani usług, które go potrzebują, wyłącz go. W sklepie z naszego przykładu zrobiliśmy obie rzeczy.

7. Wyłącz edycję plików z panelu

Wpis define( 'DISALLOW_FILE_EDIT', true ); w pliku wp-config.php usuwa edytor motywów i wtyczek z panelu. Ktoś, kto przejmie konto administratora, nie wklei wtedy kodu jednym kliknięciem. Z tego samego powodu nie instaluj wtyczek do zarządzania plikami z poziomu panelu, jeśli nie musisz.

8. Ustaw właściwe uprawnienia plików

Standard to 644 dla plików, 755 dla katalogów i 600 albo 640 dla wp-config.php, w którym są dane do bazy. Katalog z uprawnieniami 777 pozwala zapisywać w nim każdemu procesowi na serwerze.

9. Rób kopie zapasowe poza serwerem i sprawdzaj je

Kopia leżąca na tym samym koncie może zostać zaszyfrowana albo zainfekowana razem ze stroną. Trzymaj ją w osobnym miejscu i co jakiś czas sprawdź, czy da się ją przywrócić. Kopia, której nikt nigdy nie przywracał, jest tylko nadzieją. Harmonogram, miejsce zapisu i test przywracania opisujemy w poradniku kopia zapasowa WordPress.

10. Jedna strona, jedno konto hostingowe

Kilka stron na jednym koncie to jedno mieszkanie z kilkoma wejściami: infekcja jednej strony ma dostęp do plików wszystkich. W pracowni reklamy infekcja wracała po kilku dniach, dopóki usuwano pojedyncze objawy. Wyczyściliśmy wszystkie 13 stron naraz i każdą zamknęliśmy w osobnym środowisku.

11. Aktualne PHP i zapora na serwerze

Stare wersje PHP przestają dostawać poprawki bezpieczeństwa. Dobry hosting ma też zaporę aplikacyjną, która blokuje znane ataki, zanim dotrą do WordPressa. To jeden z powodów, dla których warto wybierać hosting pod WordPressa, a nie najtańszy serwer.

12. Monitoruj stronę

Włącz powiadomienia o zmianach w plikach, na przykład w Wordfence, i o niedostępności strony. W Google Search Console sprawdzaj raport Problemy dotyczące bezpieczeństwa: Google często widzi infekcję wcześniej niż właściciel, na przykład po spamie w wynikach wyszukiwania. W pracowni reklamy Google miał w indeksie 12 837 adresów z kasynowym spamem.

Czego nie robić

  • Nie instaluj kilku wtyczek bezpieczeństwa naraz. Dublują się, spowalniają stronę i potrafią się wzajemnie blokować. Jedna dobrze ustawiona wystarczy.
  • Nie traktuj wtyczki jak gwarancji. Żadna nie zastąpi aktualizacji, logowania dwuetapowego i kopii zapasowej.
  • Nie dziel jednego konta administratora między kilka osób ani wykonawców. Nie da się wtedy sprawdzić, kto co zmienił, i nie da się odebrać dostępu jednej osobie.
  • Nie usuwaj podejrzanych plików na ślepo, jeśli strona już jest zainfekowana. Samo usunięcie objawu zwykle kończy się powrotem infekcji po kilku dniach.

Co zrobić, jeśli strona już jest zainfekowana

Zmień hasła, zrób kopię obecnego stanu jako dowód i nie aktualizuj niczego na siłę. Pierwsze kroki opisujemy w poradniku wirus na stronie WordPress: co zrobić od razu. Jeśli wolisz oddać to w ręce specjalistów, usuwanie wirusów i malware z WordPressa kosztuje u nas od 1000 zł, zależnie od rodzaju infekcji, a cenę znasz przed startem prac.

Najczęstsze pytania o bezpieczeństwo WordPressa

Nie. Wtyczka pomaga ograniczyć logowania i wykryć zmiany w plikach, ale nie zaktualizuje za Ciebie strony, nie włączy logowania dwuetapowego wszystkim administratorom i nie zrobi kopii poza serwerem. Przed zalogowaniem się wykradzionym hasłem, jak w sklepie z naszego przykładu, chroni dopiero logowanie dwuetapowe.
Zacznij od trzech rzeczy: czy w panelu czekają aktualizacje, czy na liście administratorów są tylko znane Ci osoby i czy w Google Search Console raport Problemy dotyczące bezpieczeństwa jest pusty. Wpisz też w Google site:twojadomena.pl i sprawdź, czy w wynikach nie ma stron, których nie tworzyłeś.
Częściowo. Hosting odpowiada za serwer, zaporę i często za kopie zapasowe. Za wtyczki, motyw, konta użytkowników i hasła odpowiada właściciel strony albo firma, która się nią opiekuje. Hosting nie zaktualizuje za Ciebie wtyczki ani nie usunie obcego administratora.
Sklep albo stronę z częstymi zmianami najlepiej kopiować codziennie, prostą stronę firmową co najmniej raz w tygodniu i zawsze przed aktualizacją. Ważniejsze od częstotliwości jest to, żeby kopia leżała poza serwerem i dało się ją przywrócić.