Każdego dnia docierają do nas kolejne informacje o tym, że jakaś znana strona internetowa została shakowana, a poufne dane wyciekły z baz danych wielkich korporacji. To niepokoi – i słusznie – każdego właściciela witryny, zwłaszcza jeśli jego strona zaczyna zyskiwać popularność i przyciąga coraz większą uwagę nie tylko użytkowników, ale też… cyberprzestępców. Bo niestety, im bardziej rośniemy w siłę, tym częściej stajemy się potencjalnym celem dla tych, którzy lubią „przy okazji” uszczknąć coś z naszego cyfrowego tortu.
Ale dziś nie będziemy się martwić cudzymi problemami. Skupmy się na swoim podwórku – na własnym blogu, stronie firmowej czy sklepie online opartym na WordPressie. Ten wpis kieruję właśnie do Was – właścicieli witryn, którzy chcą zadbać o bezpieczeństwo swojego biznesu online. Ostatnio na branżowych blogach i forach poświęconych WordPressowi coraz częściej pojawiają się głosy, że liczba włamań i ataków rośnie. Co gorsza, często to my dowiadujemy się o wszystkim jako ostatni – albo gdy złośliwy kod zacznie siać spustoszenie, albo kiedy Google Search Console (o ile mamy ją podpiętą) grzecznie, ale stanowczo poinformuje nas e-mailem o potencjalnym zagrożeniu… oczywiście po tym, jak już usunie naszą stronę z wyników wyszukiwania.
Brzmi źle? Wiem. Bo to jest złe. A Ty na pewno nie chcesz, żeby coś takiego spotkało Twoją stronę. Dlatego dziś pokażę Ci, jak w 10 prostych krokach zabezpieczyć WordPressa. To poradnik nie tylko dla doświadczonych administratorów – nawet początkujący webmaster będzie w stanie wdrożyć większość tych rozwiązań samodzielnie.
Oczywiście, żadna metoda nie daje stuprocentowej gwarancji bezpieczeństwa. Ale jeśli utrudnimy hakerowi zadanie, zwiększamy szansę, że po prostu odpuści – może zirytuje się, przeklnie pod nosem i spróbuje szczęścia gdzie indziej. Może u konkurencji. A my tymczasem będziemy spać spokojnie.
1. Silne hasło to podstawa
Zarówno hasło do bazy danych, jak i do panelu administracyjnego WordPressa czy panelu naszego hostingu powinno być naprawdę silne. I od razu przestrzegam – zapomnijcie o „kreatywnych” pomysłach typu:
admin1
haslo123
- albo moje ulubione:
qwerty
Nie śmiejcie się! Naprawdę wielu ludzi używa właśnie takich haseł do swoich stron. Zdziwilibyście się, jak często się to zdarza – i to nie tylko początkującym.
Kolejnym bardzo częstym (i bardzo niebezpiecznym) błędem jest używanie tego samego hasła do wszystkich kont: do poczty, do Facebooka, do sklepu internetowego, a nawet – o zgrozo – do panelu administracyjnego strony. Tak, wiem, łatwiej zapamiętać jedno hasło niż dziesięć różnych, ale to jak zostawienie jednego klucza do całego domu, samochodu, biura i sejfu.
Mam nawet historię z życia wziętą. Kiedyś, podczas rozmowy ze znajomym, nagle przypomniałem sobie, że muszę coś szybko sprawdzić na Facebooku. Był zalogowany na swoim koncie, więc się przelogowałem na swoje. Potem odruchowo wyczyściłem zapisane hasła w przeglądarce i… no cóż, kolega miał problem. Nie pamiętał swojego hasła. Po chwili zamyślenia rozjaśniło mu się i powiedział z pełną powagą:
„Aaa, przecież mam takie samo hasło do Facebooka jak do Gmaila!”
Serio – mało nie spadłem z krzesła. Nawet nie miałem odwagi zapytać, gdzie jeszcze korzysta z tego „magicznego” hasła. Pomyślcie przez chwilę – jeśli ktoś pozna jedno z takich haseł, nic nie stoi na przeszkodzie, by próbował zalogować się na innych platformach. I często mu się to udaje.
Osobiście polecam tworzyć hasła, które mają co najmniej 10 znaków i zawierają zarówno małe, jak i duże litery, cyfry oraz – jeśli się da – przynajmniej jeden znak specjalny. Takie kombinacje znacząco utrudniają złamanie hasła, nawet przy użyciu zautomatyzowanych narzędzi.
Wiem, że takie hasła są trudne do zapamiętania, zwłaszcza jeśli mamy ich kilka. Ale uwierzcie mi – jeszcze trudniej jest potem przywrócić stronę po udanym ataku, szczególnie gdy nie mamy kopii zapasowej lub nikogo, kto regularnie wykonuje backupy. Wtedy dopiero zaczyna się prawdziwy koszmar… więc lepiej dmuchać na zimne.
2. Zmień domyślną nazwę użytkownika
Ilu z Was, zakładając bloga, poszło na łatwiznę i zostawiło domyślną nazwę użytkownika „admin”? No właśnie. Można powiedzieć: „pal licho hasło” – ale nie, nazwa użytkownika też ma ogromne znaczenie. To właśnie login jest pierwszą połową drogi do złamania zabezpieczeń. Jeśli ktoś już go zna, połowa roboty za nim.
No dobra, jeśli właśnie uświadomiłeś sobie, że Twój login to „admin” – działaj od razu. Zaloguj się do panelu WordPressa, przejdź do zakładki „Użytkownicy” i stwórz nowego użytkownika z rolą Administratora. Ale błagam – wykaż się choć odrobiną kreatywności. Unikaj nazw typu „admin2”, „administrator”, „webmaster” i podobnych oczywistych pomysłów.
Dodatkowo – uzupełnij pola z imieniem i nazwiskiem. A potem koniecznie w sekcji „Wyświetlaj mnie jako” wybierz coś innego niż Twój login. Wiem, że często pod wpisami pokazuje się autor, a po najechaniu na jego nazwę widać w adresie URL login. I właśnie dlatego ta mała zmiana może skutecznie utrudnić życie potencjalnym napastnikom.
Na koniec jeszcze coś, o czym większość zapomina: pierwszy utworzony użytkownik w WordPressie ma ID równe 1. Nowy użytkownik dostanie ID 2. Warto więc – po usunięciu starego konta „admin” – zalogować się do bazy danych (np. przez phpMyAdmin) i zmienić ID nowego konta z 2 na jakąś mniej oczywistą liczbę, np. 123. Może się to wydawać zbędne, ale przy bardziej zaawansowanych atakach, takich jak SQL Injection, zmiana domyślnego ID użytkownika naprawdę robi różnicę.
3. Zawsze aktualizuj
WordPress bardzo często wypuszcza aktualizacje – co chwilę jakaś nowa łatka, bo tu odkryto lukę, tam pojawił się drobny błąd, a innym razem poprawiają coś z pozoru nieistotnego. Czasem wygląda to wręcz jak tradycja: tydzień bez aktualizacji to tydzień stracony. Panel administracyjny co rusz informuje nas o nowej wersji i zachęca, by kliknąć „Zaktualizuj teraz” i wrzucić ją na serwer.
Na pierwszy rzut oka mogłoby się wydawać, że jesteśmy cały czas o krok przed hakerami – przecież aktualizujemy, łatając na bieżąco luki bezpieczeństwa. Ale to złudzenie. To nie my jesteśmy krok przed nimi – to oni najczęściej są krok przed nami. Dlaczego? Bo na naszych stronach często zalegają dziesiątki wtyczek – aktywnych i nieaktywnych – które nie były aktualizowane od miesięcy, a czasem lat. I właśnie w tych „cyfrowych gratkach” czają się dziury tak wielkie, że hakerzy nie muszą wchodzić przez drzwi frontowe – wystarczy, że wejdą przez balkon albo uchylone okno. I robią to bez pukania.
Dlatego nie wystarczy aktualizować tylko samego WordPressa. Trzeba na bieżąco aktualizować wszystkie wtyczki, motywy, a najlepiej wszystko, co tylko się da. Nie da Wam to stuprocentowej gwarancji bezpieczeństwa, ale przynajmniej będziecie mieć świadomość, że zrobiliście wszystko, co możliwe. No… a przynajmniej tyle, żeby móc spokojnie spać – choć może to tylko złudne poczucie bezpieczeństwa? Sam wiem po sobie, że mimo aktualizacji – to nie zawsze wystarcza.
Przed każdą większą aktualizacją pamiętajcie o kopii zapasowej plików i bazy danych. Niektóre motywy źle znoszą zmiany – i zamiast nowej funkcjonalności można dostać w twarz białym ekranem. Wtedy żadne „cofnij” już nie pomoże. Backup to Wasz ostatni bastion – miejcie go zawsze pod ręką.
I jeszcze jedno – warto raz na jakiś czas zrobić audyt wtyczek. Zastanówcie się szczerze: których naprawdę używacie, a które tylko leżą i czekają na okazję, by stać się furtką dla intruza? Po co trzymać naładowany i odbezpieczony pistolet pod poduszką, skoro nikt go nie używa? Lepiej rozbroić i schować – albo po prostu usunąć.
4. Chroń dostęp do strefy admina
Pewnie! Oto zredagowana, bardziej przejrzysta i naturalna wersja tekstu – zachowuje Twój styl, ale podaje informacje w bardziej uporządkowany i profesjonalny sposób, z lekkim luzem technicznego blogera:
Warto wykorzystać moc, jaką daje plik .htaccess
, aby dodatkowo zabezpieczyć stronę – zwłaszcza dostęp do panelu logowania. Wystarczy wkleić na końcu pliku .htaccess
poniższą regułę, która ograniczy dostęp do pliku wp-login.php
tylko z wybranego adresu IP:
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from X.X.X.X
</Files>
Zamień X.X.X.X
na swój rzeczywisty adres IP (bez żadnych dodatkowych znaków czy cudzysłowów). Dzięki temu nikt poza Tobą nie będzie mógł nawet otworzyć strony logowania do WordPressa.
Dobrze jest również chronić sam plik .htaccess
, bo jeśli ktoś się do niego dobierze, może łatwo zdjąć wszystkie nasze blokady. Do ochrony tego pliku dodaj kolejną regułę:
<Files .htaccess>
Order Allow,Deny
Deny from all
Allow from X.X.X.X
</Files>
Znów podmieniamy X.X.X.X
na nasz adres IP.
Zmień domyślny adres logowania do WordPressa
Domyślny adres logowania (/wp-admin/
i /wp-login.php
) to pierwsze, co sprawdzają boty i automatyczne skanery luk bezpieczeństwa. A że WordPressa używa pół internetu, to i takich ataków są dziesiątki tysięcy dziennie. Dlatego warto go zmienić.
Nie musisz być programistą, żeby to zrobić – z pomocą przychodzą dedykowane wtyczki. Choć osobiście wolę autorskie rozwiązania, zdaję sobie sprawę, że większość użytkowników WordPressa po prostu chce szybkiego i wygodnego rozwiązania.
Lockdown WP Admin
- Pozwala zmienić domyślny adres logowania na zupełnie inny.
- Osoby, które spróbują wejść pod stary adres, zobaczą stronę błędu 404.
- Dodatkowo umożliwia włączenie uwierzytelnienia HTTP – czyli dodatkowego loginu i hasła przed właściwym ekranem logowania.
HC Custom WP-Admin URL
- Prosta i lekka wtyczka, która umożliwia dowolną zmianę adresu
/wp-admin/
i/wp-login.php
. - Świetne rozwiązanie dla osób, które chcą utrudnić życie botom i skryptom atakującym WordPressa.
iThemes Security
- Bardzo rozbudowana wtyczka, która oferuje mnóstwo opcji zabezpieczających – w tym również zmianę adresów logowania.
- Uwaga: jest dość zasobożerna i na słabszych hostingach może znacząco spowolnić działanie strony.
- Wymaga też trochę czasu i podstawowej wiedzy, żeby nie namieszać przypadkowo w ustawieniach.
Podsumowując: jeśli poważnie myślisz o bezpieczeństwie swojej strony, nie możesz ignorować dostępu do panelu logowania. Zablokuj nieautoryzowane IP, zabezpiecz newralgiczne pliki i zmień domyślne ścieżki logowania – to może być właśnie ta różnica, która ochroni Cię przed kolejnym atakiem botów lub złośliwych skryptów.
5. Chroń się przed atakami brute force
Pierwszym krokiem w zabezpieczaniu WordPressa powinno być wyłączenie XML-RPC. Serio, do dziś nie wiem, kto wpadł na pomysł, żeby od którejś wersji zostawić tę funkcję domyślnie włączoną – to jak zostawienie otwartych drzwi do serwera z karteczką „wejdź, proszę!”. XML-RPC od lat jest znanym wektorem ataków, wykorzystywanym m.in. do prób logowania metodą brute force czy DDoS-ów. Jeśli z tego nie korzystacie (a większość blogerów nie korzysta), po prostu to wyłączcie.
Kolejnym krokiem niech będzie dodanie captcha przy logowaniu. I nie, proszę – żadnych pytań w stylu „Jak nazywa się stolica Polski?”. Choć znam takich, którzy i z tym mogliby mieć problem, to pamiętajcie: to Wasz blog, Wasze dziecko – warto poświęcić chwilę, by zabezpieczyć je jak należy. Captcha skutecznie odstrasza automaty i boty, które próbują logować się do panelu WordPressa setki razy na minutę.
Wiele firm hostingowych oferuje wbudowane zabezpieczenia przed atakami brute force, ale niestety – równie wiele ich nie posiada. A jeśli korzystacie z VPS-a bez profesjonalnej obsługi, to… no cóż – można się nieźle przejechać. W takiej sytuacji warto zainstalować prostą, ale skuteczną wtyczkę.
Jedną z nich jest Limit Login Attempts – świetna propozycja, szczególnie dla początkujących. Pozwala ustawić limit nieudanych prób logowania, a po jego przekroczeniu blokuje IP intruza na określony czas. Niby nic wielkiego, a potrafi skutecznie przytrzeć nosa wszystkim, którzy kombinują z hasłami.
6. Skanuj w poszukiwaniu malware
Z czystym sumieniem mogę polecić wtyczkę Wordfence – niejednokrotnie uratowała mi skórę. To jedno z najbardziej kompleksowych narzędzi do zabezpieczania WordPressa. Jej największą zaletą jest funkcja porównywania plików z repozytorium WordPressa oraz z oryginalnymi wersjami motywu, którego używamy. Dzięki temu łatwo wykryć, czy ktoś nie podmienił plików lub nie „wstrzyknął” złośliwego kodu.
Wordfence potrafi także powiadomić nas o próbach ataku, zablokować podejrzane adresy IP (czy to z Turcji, Rosji, czy skądkolwiek indziej), a do tego przypomina o dostępnych aktualizacjach wtyczek, motywów i samego WordPressa. Wszystko w jednym miejscu i bardzo intuicyjne w obsłudze.
Jeśli korzystacie z SSH, warto raz na jakiś czas rzucić okiem na daty modyfikacji plików na serwerze. To prosty sposób, by wykryć coś podejrzanego – np. niespodziewane zmiany w plikach, które nie powinny być ostatnio ruszane. Dla bardziej zaawansowanych – warto też przeskanować kod źródłowy w poszukiwaniu podejrzanych funkcji, takich jak base64
czy eval
. To właśnie nimi najczęściej posługują się twórcy złośliwego oprogramowania, by ukryć prawdziwe intencje kodu.
Usuń złośliwy kod
No dobra, znaleźliście coś podejrzanego w kodzie. I co teraz? Przede wszystkim – zachowajcie spokój i nie usuwajcie nic na ślepo. Najpierw sprawdźcie, czy podejrzany plik faktycznie należy do WordPressa lub do używanego motywu. Zdarza się, że złośliwe pliki mają bardzo podobne nazwy do tych oryginalnych – celowo, żeby zmylić administratora. Niejednokrotnie widziałem przypadki, gdzie do katalogów trafiały pliki udające kluczowe elementy systemu, a tak naprawdę były zwykłym malwarem.
Zanim zaczniecie cokolwiek usuwać, koniecznie wykonajcie kopię zapasową plików i bazy danych. Nawet jeśli coś pójdzie nie tak, będziecie mieć możliwość cofnięcia zmian i unikniecie poważniejszych problemów.
A jeśli nie czujecie się na siłach, by czyścić stronę samodzielnie – napiszcie do mnie, a postaram się pomóc. Lepiej poprosić o wsparcie niż przypadkiem uszkodzić całą witrynę.
7. Wybierz odpowiedni hosting
Jeśli zależy Wam na poważnym podejściu do bezpieczeństwa, zdecydowanie polecam przejście na VPS-a – zwłaszcza dla bardziej zaawansowanych użytkowników. Taka opcja daje pełną kontrolę nad środowiskiem serwera, możliwością konfiguracji według własnych potrzeb oraz – co bardzo ważne – możliwość tworzenia osobnych kont i środowisk dla każdej ze stron. To ogromny atut nie tylko z perspektywy bezpieczeństwa, ale również stabilności działania.
Osobiście odradzam hostingi współdzielone (tzw. shared hosting). Nigdy nie wiadomo, z kim dzielicie zasoby – ani jakie dokładnie zabezpieczenia stosuje Wasz dostawca. To trochę jak mieszkanie w akademiku – można trafić na spokojnych sąsiadów, ale równie dobrze obok może zamieszkać ktoś, kto ściąga całe torrenty internetu i zostawia drzwi otwarte na oścież.
Wybierając hosting, warto napisać do obsługi technicznej – nawet kilka razy. Zadawajcie pytania, nawet te, które mogą wydawać się błahe – o backupy, zapory, SSH, aktualizacje PHP itd. Już po odpowiedziach będziecie w stanie wyczuć, czy po drugiej stronie siedzą ludzie, którzy znają się na rzeczy, czy może ktoś, kto tylko odbębnia kolejne zgłoszenie niczym urzędnik z ZUS-u.
Z czystym sumieniem mogę polecić hosting LH.pl – firma, która nie tylko oferuje stabilne VPS-y, ale przede wszystkim podejście do klienta na najwyższym poziomie. Support jest kompetentny, ludzki i faktycznie pomocny – a nie zdarza się to tak często, jak mogłoby się wydawać. Dla osób, które chcą mieć większą kontrolę nad swoim WordPressem i realnie zadbać o bezpieczeństwo, to wybór zdecydowanie wart rozważenia.
8. Czyść swoją stronę jak własną kuchnię
W moim przypadku to byłby kiepski pomysł – kuchnię znam… cóż, gdyby nie żona, pewnie nigdy nie odnalazłbym lodówki, ale to już inna historia.
Jak już wspomniałem, każda wtyczka, a nawet sam WordPress, to taka tykająca bomba, która może wybuchnąć w najmniej oczekiwanym momencie. Dlatego jeśli nie korzystacie z jakiejś wtyczki czy motywu, lepiej się ich pozbądźcie – zamiast trzymać na siłę. Zmiotka, szufelka i prosto do kosza!
Pamiętajcie, że z wtyczkami nie wystarczy je tylko wyłączyć – usuńcie je całkowicie. A jeśli są dobrze napisane, to po deinstalacji same sprzątają też swoje ślady w bazie danych.
9. Kontroluj wrażliwe dane
Jeśli już zabieracie się za sprzątanie swojej strony i usuwacie zbędne śmieci, to koniecznie sprawdźcie, czy nie zostawiliście gdzieś cennych informacji na widoku dla każdego – nawet dla amatora-hakera. Na początek wyrzućcie plik readme.html – po prostu zróbcie to i nie zadawajcie pytań, chyba że chcecie pokazać całemu światu, kiedy ostatnio praliście skarpetki i dlaczego już dziś tak śmierdzą.
Podobnie warto zerknąć na pliki takie jak phpinfo.php czy i.php. One zdradzą hakerom absolutnie wszystko o waszych ustawieniach – to jak mapa topograficzna do waszego cyfrowego domu.
A teraz najlepsze – są ludzie, którzy trzymają publicznie dostępne pliki z rozszerzeniem .sql, czyli zrzuty bazy danych na wypadek awarii. I wiecie, co znajduje się w takim pliku? Loginy i hasze haseł! Haker bez pukania wchodzi do środka, robi… no, powiedzmy, co chce, zostawia ślad na wycieraczce i idzie dalej. A potem kto to sprząta?
10. Bądź czujny
Podłączcie swoją stronę do narzędzia Google Search Console – to absolutna podstawa, jeśli chcecie mieć kontrolę nad tym, co dzieje się z Waszym serwisem w sieci. Dzięki temu narzędziu możecie śledzić indeksowanie, wykrywać błędy oraz dowiadywać się o potencjalnych problemach na bieżąco.
Ale to nie wszystko – raz w tygodniu warto poświęcić chwilę na zapoznanie się z najnowszymi zagrożeniami, które dotyczą nie tylko WordPressa, ale też ogólnie stron internetowych. Cyberprzestępcy nie śpią, a nowe luki i metody ataków pojawiają się cały czas. Dlatego zdecydowanie polecam śledzić profil Securi na Twitterze – to jedno z najlepszych miejsc, gdzie szybko dowiecie się o świeżych zagrożeniach i poradach dotyczących bezpieczeństwa.
Jeśli natomiast chcecie pójść krok dalej i zadbać o bezpieczeństwo na poziomie serwera, warto zainteresować się profesjonalnymi narzędziami do testowania podatności na różne ataki, w tym m.in. na ataki DDoS. Tutaj z czystym sumieniem mogę polecić usługę Penetrator24.com. Mimo że nazwa może nieco zaskakiwać i przywodzić na myśl zupełnie inne rzeczy (może sklep z akcesoriami dla dorosłych?), to znajdziecie tam naprawdę solidne narzędzie – niestety płatne – które pomoże Wam wykryć słabe punkty Waszego serwera i spać spokojniej, wiedząc, że Wasza strona jest pod stałą ochroną.
Podsumowując – świadomość zagrożeń i regularne monitorowanie to klucz do bezpieczeństwa, a odpowiednie narzędzia to Wasza najlepsza tarcza w cyfrowym świecie.
I na koniec napiszę tylko:
„Szanuj wroga swego jak siebie samego”
Zabezpieczymy Twoją stronę za 100 netto, wypełnij formularz poniżej, aby zamówić usługę:
[ninja_form id=2]
Ja bym dodał jeszcze dwie czyli WP Admin Graphic Password (by SiteGuarding.com), nie dość że trzeba szlaczek wymalować (o ile kliknie się w „kłódeczkę” której bot nie widzi, to można dodać zabezpieczenie drugim hasłem ustawić) oraz zabezpieczenie zaplecza dodatkowym loginem i hasłem a w zasadzie w odwrotnej kolejności. Spowoduje to również brak ataków na admina.
A gdzie coś o pliku konfiguracyjnym? htaccess z wyższym priorytetem blokady niż config gdzie na tacy dane dostępowe do bazy? Dodajmy do tego, że niekiedy config po instalacji dostaje uprawnienia maksymalne, na dwóch hostach tak miałem.
I chyba nadal WordPress domyślnie nie blokuje dostępu do wszystkich katalogów, jeżeli nadal tak jest to i o tym must have napisać trzeba.
Fakt jest taki, że wtyczka iThemes Security załatwia większość z wymienionych powyżej kwestii. Oprócz rzeczy, które wymieniłeś powinno się również zabezpieczyć folder uploads. Powinno się także zmienić standardowy prefix wordpressa „_wp”, czy też adminem nie powinnien być user z id 1.
Fajne opisane, ale i tak 99% czytających nie zastosuje się do tych rad, bo myśli, że ich strony to nie dotyczy. Chyba, że masz czas i napiszesz część II „10 sposobów na zaspamowanie i zniszczenie strony opartej o WordPress po jej zhakowaniu” 🙂
Jeszcze 3 miesiące temu miałem włam na jedną ze stron na WP, przejęli cały hosting i zrobili sobie SWL z wszystkich serwisów tam zaparkowanych,. Wszystko w białych rękawiczkach (jeden plugin był niezaktualizowany) i gdyby nie narzędzia Google i powiadomienia to nikt by tego nie zauważył. To tak ku przestrodze 🙂