Jak zabezpieczyć blog WordPress – 21 sprawdzonych sposobów
Jeśli zastanawiasz się jak zabezpieczyć swój nowy blog oparty o WordPress to przeczytaj uważnie poniższy artykuł.
Znajdziesz tutaj 21 sprawdzonych trików na to jak zabezpieczyć blog WordPress.
W dniu kiedy piszę ten post WordPress w wersji 4.7 został pobrany 30 780 347 razy. Robi wrażenie! Te dane znajdziesz na tej stronie. Przy tak dużej liczbie oznacza to tyle, że pole do popisu dla hakerów, którzy chcieliby się włamać na strony postawione na WordPressie jest naprawdę duże.
Po co ktokolwiek miałby się włamywać na Twoją stronę? Powodów może być bardzo wiele. Najważniejsze z nich to chęć umieszczenia spamu na Twojej stronie, czyli linków albo przekierowań do innych stron sprzedających co tylko się da lub wyłudzających dane osobowe. Automatyczne rozsyłanie spamu za pomocą Twojej strony, ataki DDoS i wiele innych powodów, o których strach pomyśleć.
WordPress jest oparty o skrypty open source. Czyli każdy kto chce może je dokładnie przestudiować, żeby znaleźć ich słabą stronę. Z jednej strony to może być wada ale z drugiej strony WordPress na bieżąco aktualizuje swoje skrypty, żeby były jak najbardziej bezpieczne.
To Twoja wina, że ktoś zhakował Ci blog na WordPressie
Myślisz sobie, jak to moja wina?! To, że ktoś niepowołany dostał się do Twoje strony to w gruncie rzeczy konsekwencja Twoich zaniedbań bezpieczeństwa. Jako właściciel strony musisz sam zadbać o zabezpieczenie swojej witryny.
Na szczęście jest kilka prostych trików, które możesz wykorzystać, żeby mocno utrudnić włamywaczowi zadanie. Stosując poniższe wskazówki prawdopodobnie unikniesz 99% ataków.
1. Wybierz bezpieczny hosting
Jeśli dopiero zastanawiasz się nad stworzeniem strony i nie wybrałeś jeszcze firmy hostingowej to upewnij się, że spełnia podstawowe wymogi bezpieczeństwa.
Sprawdź czy w razie problemów support będzie w stanie szybko pomóc i zareagować.
Czy backupy są robione regularnie i czy możesz je pobrać.
Czy masz dostęp do swojego konta przez SFTP.
Czy hosting wspiera najnowszą wersję PHP.
Czy ma jakieś mechanizmy blokujące ataki DDoS.
I wreszcie jakie ma opinie innych klientów.
Wybierając hosting dla tej strony kierowałem się powyższymi wymaganiami. Dodatkowo we wpisie jak założyć bloga opisuję więcej ich zalet. Jeśli masz już hosting w innej formie i jesteś średnio zadowolony to polecam przeprowadzkę na ZenBox.
2. Instalować czy nie instalować wtyczki bezpieczeństwa? O to jest pytanie.
Na szczęście nie trzeba być specjalistą od zabezpieczeń, żeby podnieść poziom bezpieczeństwa swojej strony opartej o WordPress. Jest kilka wtyczek, które zrobią to za nas. I tu pojawia się wątpliwość. Kod tych wtyczek tak samo jak kod WordPrerssa jest powszechnie znany. Tak samo jak skrypt WordPressa są wystawione na ciągłe ataki. Może się zdarzyć tak, że w końcu jakiś sprytny hacker znajdzie lukę bezpieczeństwa w takiej wtyczce i dostanie się na naszą stronę.
Zatem czy warto je instalować? Moja odpowiedź brzmi TAK. Osobiście podejmuję to ryzyko i używam kilku wtyczek poprawiających bezpieczeństwo tego bloga. Część osób mogłaby się ze mną nie zgodzić ale według mnie lepie jest mieć taką ochronę niż żadną.
Główną wtyczką bezpieczeństwa, z której korzystam jest WordFence. W jednym z poprzednich wpisów opisałem dlaczego wybrałem właśnie tę wtyczkę.
Funkcjonalności z jakich korzystam na co dzień to wbudowany Firewall, blokowanie adresów IP, skanowanie zmienionych plików, monitorowanie rzeczywistego ruchu gdzie widzę próby dostania się na moją stronę (głównie botów), ukrywanie wersji WordPressa czy nazw użytkowników.
3. Blokuj kolejne nieudane próby logowania do Twojej strony
Blokowanie nieudanych prób logowań rozwiąże problem z atakami typu brute force. Spamerskie boty ciągle próbujące się zalogować do Twojej strony będą próbowały niezliczonych kombinacji loginów i haseł z nadzieją, że w końcu im się uda. Takie działanie obciąża Twój serwer i warto się przed nim uchronić.
Polecam dwie wtyczki, które mogą pomóc rozwiązać ten problem: Wordfence lub Limit login Attemts. Obydwie opisałem w poprzednim wpisie. Osobiście korzystam z Wordfence. Mogę w ustawianiach określić ile ma być prób logowań zanim strona zostanie zablokowana. Jakie adresy IP oraz nazwy użytkowników blokować.
4. Używaj 2 factor authentication (2FA)
Po co używać 2 factor authenitication czy jak kto woli dwuetapowego uwierzytelniania? Jeśli nawet ktoś zna Twój logi i hasło to nie zaloguje się bez drugiego składnika bezpieczeństwa. Może to być dodatkowy kod, który generuje się automatycznie co minutę, i który trzeba podać podczas logowania.
Wtyczka Wordfence ma taką funkcjonalność w swojej płatnej wersji ale jest też dobry darmowy odpowiednik. Możesz skorzystać z rozwiązania Google Authenticator. Na tej stronie sprawdza się wyśmienicie.
Na smartphonie trzeba zainstalować aplikację ze sklepu Google Play, która się nazywa Google Authenticator.
Następnie trzeba dodać w niej naszą aplikację czyli blog na WrodPress. Zrobimy to skanując kod wyświetlany przez wtyczkę WordPress o tej samej nazwie co aplikacja od Google.
Od tej pory możemy się cieszyć bardziej bezpiecznym dostępem do naszego bloga.
5. Zmień link do domyślnej strony logowania WordPress
Domyślny URL do logowania się do każdej strony opartej na WordPressie to po prostu wp-admin lub wp-login.php dodane na końcu adresu URL strony. Są domyślnie dostępne dla każdego kto wchodzi na Twoją stronę.
Ukrycie tego domyślnego adresu uchroni Cię przed atakami typu brute force. Spamboty zazwyczaj próbują się dostać na powszechnie znane adresy URL. Dlatego warto zmienić Twój URL logowania.
Możesz do tego wykorzystać darmową wtyczkę WPS Hide Login. Zmień domyślny adres wp-admin na przykład na moje_logowanie lub coś co uznasz za odpowiednie dla Ciebie. Następnie dodaj swój nowy adres logowania do ulubionych zakładem w przeglądarce internetowej, żebyś go nie zapomniał.
6. Ostatecznie zabezpiecz plik wp-login.php przed atakami typu brute force
W poprzednik kroku częściowo zabezpieczyłeś swój plik wp-login.php przez jego ukrycie. Nadal jednak nawet gdy plik nie jest widoczny każde żądanie dostępu do tego pliku zużywa zasoby Twojego serwera. Wtyczka Wordfence jest napisana w PHP dlatego ukrywając plik logowania i tak zużywa zasoby serwera takie jak czas procesora.
Dlatego atak na stronę logowania warto zablokować zanim dotrze do Twojej strony. Zrobimy to na poziomie serwera HTTP.
Połącz się po SFTP do swojego konta hostingowego lub przez SSH lub z poziomu przeglądarki logując się do swojego panelu administracyjnego po HTTPS, żeby zmodyfikować plik .htaccess
Wpisz w nim na początku poniższy kod:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.*)?.kierunekwolnosc.pl [NC]
RewriteCond %{REQUEST_URI} ^/wp-login\.php(.*)$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>
Zmień adres kierunekwolnosc.pl na domenę swojej własnej strony!
Teraz wszystkie, żądania to pliku wp-login.php typu POST i GET będą skutecznie blokowane. Pamiętaj, żeby stworzyć swoją alternatywną stronę logowania opisaną w poprzedniej metodzie.
7. Zabezpiecz plik xmlrpc.php
Jeśli do pisania postów na swoim blogu nie wykorzystujesz zewnętrznych programów wysyłających zdalnie wpisy na Twoją stronę to zabezpiecz dostęp do pliku xmlrcp.php
W pliku .htaccess wpisz poniższy kod:
<files xmlrpc.php>
Order deny,allow
Deny from all
</files>
Gratuluję, właśnie pozbyłeś się 99% ataków typu brute force na swoją drogocenna stronę!
8. Zabezpiecz dostęp do najważniejszych plików WordPressa
W pliku .htaccess wpisz poniższy kod:
<FilesMatch "wp-config.*\.php|\.htaccess|readme\.html"> Order allow,deny Deny from all </FilesMatch>
W ten sposób zablokujesz dostęp do pliku wp-config.php, .htaccess oraz readme.html. Nikt oprócz Ciebie (i adminitratorem histingu) nie powinien mieć do nich dostępu.
9. Czas na zabezpieczenia w sercu Twojej strony WordPress, czyli w pliku wp-config.php
Wyłącz tryb debudowania strony.
Znajdź w pliku wp-config.php poniższy wpis:
define('WP_DEBUG', false);
i zmień go na:
define('WP_DEBUG', false); if ( ! WP_DEBUG ) { ini_set('display_errors', 0); }
W ten sposób wyłączysz między innymi powiadomienia o błędach PHP, które mogłyby zawierać informacje o wersjach wtyczek czy, nazwach tabel w bazie danych lub innych rzeczach interesujących dla internetowych włamywaczy.
10. Wyłącz edytor plików wtyczek oraz motywów
W pliku wp-config.php dodaj poniższy kod:
define('DISALLOW_FILE_EDIT', true);
Dzięki temu zminimalizujesz ryzyko dopisania złośliwego kodu na Twojej stronie przez osoby, którym udało się dostać do panelu administracyjnego WordPressa.
11. Włącz automatyczną aktualizację WordPressa
WordPress jako skrypt open source może być podatny na ataki. Dlatego trzeba go regularnie aktualizować. Jeśli nie chcesz tego robić samodzielnie lub nie masz na to czasu. Możesz włączyć automatyczne aktualizacje w pliku wp-config.php, wystarczy że dodasz w nim poniższy wpis:
define('WP_AUTO_UPDATE_CORE', true);
Dzięki temu zminimalizujesz ryzyko dopisania złośliwego kodu na Twojej stronie przez osoby, którym udało się dostać do panelu administracyjnego WordPressa.
12. Zmień klucze WordPressa na własne
Podmień cztery klucze oraz cztery sole uwierzytelniania na własne. Są wykorzystywane w ciasteczkach generowanych przez WordPressa na przykład do śledzenia sesji użytkownika.
Aby podmienić klucze na wygenerowane przez siebie wystarczy, że w pliku wp-config.php znajdziesz coś podobnego do:
define('AUTH_KEY', 'Y(55pI75fu)uw+QFd!;#%$kjP1%2Ed-#1hg{%Apx5vK8|n5{pfY/wb7qNTxb?|>#'); define('SECURE_AUTH_KEY', 'mC -*h4S:A7D^/^}7qHT#s--#aS7Kl#>^l!3?Qn!qXd0G B+Gkidt5&Y:FR.TKR,'); define('LOGGED_IN_KEY', '#m^l$^a4c{=J2-rlsFW;j@{TV4t(zs$k{Rei[:^+M:Wk1KMbmjCgzlQL/>r<>r(d'); define('NONCE_KEY', 'bGK%rO9Ld&G*L1OZohW)@G2[!;4:[L1=cJE(/YsL1p]PvS-*zJW~+L)O4}y>yZp`'); define('AUTH_SALT', '$rOWj,~3tif2yd0rk`O`R~5-Zpg@(RkOba|0c-7tr;e; uyesR6.gJB8E%${MGdN'); define('SECURE_AUTH_SALT', '-@mL0,d+by*JiRgpgRj TVyE; m|zJ#-ppSI5,V-4,|v/bq-c?Q5[5l(rG]VI>]w'); define('LOGGED_IN_SALT', 'YbAoo&3I/gI+gbxo<.@=#PNuz/%t BQ7N#(bjwF7(lcI$nAOeFt+!^3wSKmSU|c7'); define('NONCE_SALT', 'W!tcZW-XfyW-_JXuM_.!7L15RWd*5_,xp@bzq922mk=G bZ,glfx(BpDZu-e6:o(');
następnie wejdź na stronę https://api.wordpress.org/secret-key/1.1/salt/, żeby wygenerować tam własne klucze oraz sole. Skopiuj je a następnie podmień je w pliku wp-config.php.
13. Korzystaj z certyfikatu SSL
Kup lub wygeneruj darmowy certyfikaty SSL (Secure Socket Layer) i poprawnie go zainstaluj.
Główną zaletą certyfikatu SSL jest ochrona informacji przesyłanych pomiędzy Twoją stroną a osobą, która właśnie ją odwiedza. Szyfrowanie danych chroni przed “podsłuchaniem” danych przez hakerów. Zatem jest to dodatkowa ochrona nie tylko dla Ciebie ale i osób, które odwiedzają Twoją stronę.
Dodatkowym plusem jest lepsza pozycja w wynikach wyszukiwania Google. Strony uznane za bezpieczne, mające połączenie SSL są premiowane przez Google.
Certyfikat możesz kupić najprawdopodobniej u dostawcy swojego hostingu. Jeśli on go nie oferuje możesz kupić taki sam jak ja mam w nazwa.pl. Całkowity koszt to kilkanaście złotych rocznie. Warto wydać te pieniądze na poprawę bezpieczeństwa Twoich czytelników.
Gdy będziesz już miał certyfikat SSL możesz wymusić bezpieczne połączenie w ramach całej swojej strony. To rozwiązanie trochę ją spowolni ale zapewni Ci maksymalny poziom bezpieczeństwa. Jeśli martwisz się, że Twoja stroną będzie trochę wolniejsza to przeczytaj mój kolejny artykule na tym blogu gdzie pokazuję jak w prosty sposób maksymalnie przyspieszyć bloga na WordPressie.
Aby wymusić połączenie HTTPS w obrębie całej Twojej strony dodaj poniższy kod w pliku .htaccess
RewriteEngine On RewriteCond %{HTTPS} !^on$ RewriteRule ^(.*)$ https://kierunekwolnosc.pl/$1 [R=301,L]
dodatkowo możesz w ustawieniach ogólnych swojego WordPressa w sekcji Adres WordPressa (URL)
podać domenę z przedrostkiem HTTPS (w taki sposób: https://kierunekwolnosc.pl)
14. Ukryj nazwy użytkowników
W WordPressie bardzo łatwo sprawdzić jaką nazwę ma pierwszy użytkownik, który jest administratorem. Wystarczy wpisać na końcu adresu swojej strony /?author=1
Można się przed tym zabezpieczyć w prosty sposób. Wystarczy, że dodasz poniższy kod w pliku .htaccess
RewriteCond %{QUERY_STRING} author=\d RewriteRule ^ /? [L,R=301]
W ten sposób przekierujesz podglądacza na swoją stronę główną.
15. Ukryj wersję WordPressa
Możesz ukryć wersję skryptu WordPress, którego używasz. Dzięki temu nie pokażesz w oczywisty sposób czy wersja, z której korzystasz jest narażona na konkretne niebezpieczeństwa. Generalnie polecam korzystanie z zawsze aktualnej, najnowszej wersji skryptu.
Tym razem wprowadzimy zmiany w pliku functions.php który znajduje się w folderze z motywem Twojej strony.
Po prostu dodaj w tym pliku poniższy kod:
function ukryj_wersje() { return ''; } add_filter('the_generator','ukryj_wersje'); remove_action('wp_head', 'wp_generator');
16. Używaj silnych haseł nie tylko do swojego konta administracyjnego ale również do bazy danych
Pamiętaj, żeby używać silnych haseł wszędzie gdzie się da. Mowa tutaj o Twoim głównym koncie do strony WordPress, o haśle do bazy danych, które jest przechowywane w pliku wp-config.php. Pamiętaj również o dobrych hasłach dla połaczenia SFTP oraz do panelu administracyjnego u dostawcy hostingu.
Silne hasło to takie, które zawiera duże i małe litery, znaki specjalne oraz cyfry. Jeśli nie masz pomysłu na dobre hasło to użyj generatora haseł.
17. Nie używaj jako nazwy użytkownika ADMIN
WordPress domyślnie instaluje się z pierwszym kontem o nazwie ADMIN o ile nie zmienimy tego podczas instalacji. Jeśli Twoje główne konto nazywa się właśnie tak to proponuję je zmienić na coś mniej oczywistego.
Jeśli haker zna już tak oczywistą nazwę użytkownika jak ADMIN to pozostaje mu już tylko złamać hasło, żeby dostać się do panelu administracyjnego Twojej strony.
Jeśli zdecydowałeś się korzystać z wtyczki Wordfence jest tam opcja blokowania adresów IP, z których ktoś próbuje się logować jako ADMIN. Proponuję ją włączyć 🙂
18. Monitoruj każdą zmianę Twoich plików
Możesz być automatycznie powiadomiony za każdym razem, gdy ktoś zmieni Twoje pliki. Wtyczka Wordfence ma taką funkcjonalność. Porówna oryginalny plik z jego zmienioną wersją i Cię o tym poinformuje. Jeśli ktoś podmienił plik i umieścił w nim złośliwy kawałek kodu, dowiesz się się o tym bardzo szybko.
19. Rób często backupy i przechowuj je w bezpiecznym miejscu
Nie ważne jak dobrze jest zabezpieczona Twoja strona. Backupy czyli kopie bezpieczeństwa Twoje całej strony wraz z bazą danych to podstawa. Musisz je mieć. Twój dostawca hostingu zapewne wykonuje je regularnie ale to do Ciebie należy zapewnienie dodatkowych backupów i przechowywanie ich w bezpiecznym miejscu.
Na szczęście jest kilka dobrych wtyczek, które będą robiły regularnie backupy za Ciebie. Polecam UpdraftPlus, korzystam z niej na tym blogu i nigdy mnie nie zawiodła. Za każdym razem gdy backup jest gotowy dostaję powiadomienie na email. Ale to nie wszystko. Wtyczka automatycznie przesyła backupy całej mojej strony na mój dysk google oraz dropbox. Są zatem przechowywane w kilku miejscach w razie awarii.
20. Zmień domyślny prefiks tabel w bazie danych
Domyślnie WordPress tworzy tabele w swojej bazie danych z prefiksem wp_
Polecam zmienić go na coś unikalnego.
W ten sposób uchronisz się przed atakami typu SQL injection gdzie ktoś próbuje tak spreparować zapytania do Twojej bazy danych, żeby umieścić w niej niepożądane dane.
Są gotowe wtyczki, które mogą wykonać tę akcję za Ciebie ale osobiście polecam wykonać ją samodzielnie, żeby mieć pełną kontrolę nad całym procesem.
Zanim zaczniesz cokolwiek zmieniać zrób koniecznie backup całej bazy danych.
Pierwszym krokiem będzie odnalezienie w pliku wp-config.php wpisu:
$table_prefix = 'wp_';
zmień w nim prefiks na unikalny ciąg małych liter i cyfr, może być coś takiego (możesz użyć tylko kombinacji małych liter, cyfr oraz znaku podkreślenia):
$table_prefix = 'edko392aq_';
Następnym krokiem będzie zmiana prefiksów we wszystkich tabelach. Najprościej jest to zrobić bezpośrednio w aplikacji phpMyAdmin.
Jeśli tak jak ja korzystasz z hostingu ZenBox to z panelu administracyjnego wybierze opcję Zarządzanie bazami MySQL a następnie kliknij na przycisk phpMyAdmin, żeby uruchomić aplikację. Zaloguj się do aplikacji podając nazwę użytkownika i hasło Twojej bazy danych. Jeśli ich nie pamiętasz to masz je w pliku wp-config.php
W phpMyAdmin, żeby zmienić prefiks wszystkich tabel jednocześnie wystarczy, że wybierzesz checkbox “Zaznacz wszystko” aby wybrać wszystkie tabele. Następnie wybierze w menu rozwijalnego opcję Prefix > Zmień przedrostek tabeli.
Wpisz przedrostek do zmiany wp_ oraz swój nowy przedrostek edko392aq_
kliknij przycisk Kontynuuj, żeby zapisać zmiany. Teraz wszystkie Twoje tabele mają już nowy przedrostek.
To jeszcze nie wszystko. Musisz wprowadzić zmiany w dwóch tabelach.
Tabela Option
W tabeli Options szukamy teraz pól, które używają wp_ jako swojego przedrostka. Tutaj też trzeba go zamienić na edko392aq_
Wykonaj poniższe zapytanie SQL, żeby wyszukać takie tabele.
SELECT * FROM `edko392aq_options` WHERE `option_name` LIKE '%wp_%'
Liczba wpisów zależy od tego ile masz zainstalowanych wtyczek. Nie musisz wszystkich zmieniać, tylko te które mają prefiks wp_.
Tabela UserMeta
W tabeli UserMeta robimy to samo co w tabeli Options czyli szukamy teraz pól, które używają wp_ jako swojego przedrostka. Tutaj też trzeba go zamienić na edko392aq_
Wykonaj poniższe zapytanie SQL, żeby wyszukać takie tabele.
SELECT * FROM `edko392aq_usermeta` WHERE `meta_key` LIKE '%wp_%'
Liczba wpisów zależy od tego ile masz zainstalowanych wtyczek. Nie musisz wszystkich zmieniać, tylko te które mają prefiks wp_.
UWAGA: Pamiętaj, żeby ustawić swój własny prefiks. Nie używaj przykładowego prefiksu z tego poradnika.
Przetestuj nowe ustawienia
Jeśli wykonałeś powyższe kroki to wszystko powinno działać poprawnie. Wyczyść cache przeglądarki, odśwież stronę i ciesz się bezpieczniejszą bazą danych.
Zrób kolejny backup bazy danych już z nowymi ustawieniami.
21. Przetestuj swoją stronę skanerem bezpieczeństwa
Na koniec dla pewności przetestuj swoją stronę skanerem bezpieczeństwa działającym online. Polecam Sucuri.
Powinieneś mieć wynik podobny do mojego:
22. Zabezpiecz nagłówki HTTP – BONUSOWA METODA 🙂
Aby ręcznie zabezpieczyć nagłówki HTTP, w pliku .htaccess wklej poniższe wiersze.
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-XSS-Protection "1; mode=block"
Header set X-Frame-Options "sameorigin"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval' https: data:";
Jeśli wykonałeś wszystkie powyższe kroki to już nie musisz się zastanawiać jak zabezpieczyć swój blog WordPress. Jesteś już po jasnej stronie Mocy!
Napisz w komentarzu jeśli znasz inne metody zabezpieczania WordPressa lub jeśli masz jakieś pytania.