Jak zabezpieczyć stronę WordPress?
Jak zabezpieczyć stronę WordPress?
Dlaczego WordPress jest atakowany?
Najczęściej występujące ataki na WordPress
Jakie zabezpieczenia wdrożyć na stronie WordPress?
Kolejne procesy zabezpieczenia strony WordPress
Dodatkowe zabezpieczenia WordPressa
Jak zabezpieczyć stronę WordPress?
Jak zabezpieczyć stronę WordPress, aby zminimalizować ryzyko włamań i infekcji? (mowa o wordpress.org, a nie .com). To pytanie zadaje sobie wielu użytkowników, tego popularnego systemu CMS. Najczęściej użytkownicy WordPressa poszukują gotowych rozwiązań, w postaci wtyczek zabezpieczających. Ale czy te wtyczki spełniają swoją rolę?
Gotowe wtyczki zabezpieczające WordPress spowalniają system, co może się przełożyć na spowolnienie prędkości ładowania naszej strony, a do tego, często posiadają luki w zabezpieczeniach, przez co jeszcze łatwiej można włamać się na naszą stronę lub zainfekować szkodliwym skryptem.
Dlaczego WordPress jest atakowany?
Dlaczego występują ataki na stronach WordPress? Odpowiedź jest prosta. Ponieważ jest to jeden z najpopularniejszych systemów CMS na świecie. Szacuje się, że strony i blogi w WordPress stanowią już 43% stron na całym świecie (dane z sierpnia 2022 r.). Można zatem powiedzieć, że prawie połowa stron internetowych na świecie są stronami zbudowanymi w oparciu o system CMS WordPress. W klasyfikacji popularności systemów zarządzania treścią, WordPress jest zdecydowanym liderem i obejmuje 64% tego rynku.
Na dzień 28 grudnia 2022 r. jest już ponad 58 mln. 345 tyś. pobrań wersji 6.1 WordPress, a przecież doskonale wiemy, że nie każdy aktualizuje systematycznie WordPressa i korzysta ze starszych wersji tego popularnego systemu.
Najczęściej występujące ataki na WordPress
Z racji popularności systemu CMS WordPress, jest on najbardziej narażony na różnego rodzaju ataki. Do najczęściej występujących ataków zaliczamy:
- Brute Force;
- Malware;
- DDoS.
Takie ataki mają na celu:
- przekierować użytkownika na inne strony;
- rozesłać spam;
- zarazić inne strony szkodliwymi skryptami;
- zablokować stronę internetową;
- i wiele innych.
Jakie zabezpieczenia wdrożyć na stronie WordPress?
Opisujemy w kilku krokach, jak zabezpieczyć stronę WordPress. Takie zabezpieczenia znacząco utrudnią potencjalne próby ataków na naszą stronę i zapewnią nam spokój. Na samym początku powinniśmy znaleźć dobrego hostingodawcę. Według wpwhitesecurity.com, aż 41% ataków na WordPress udaje się, dzięki nieodpowiedniemu zabezpieczeniu hostingu. Zatem jest to jeden z kluczowych elementów bezpieczeństwa naszej strony internetowej, zbudowanej w tym systemie CMS.
Jak wybrać hosting dla strony WordPress?
Aby wybrać hosting dla naszej strony zbudowanej w WordPress, powinniśmy zwrócić uwagę na kilka ważnych aspektów. Hosting współdzielony jest najlepszą opcją dla osób, które nie potrafią samodzielnie zarządzać całym serwerem, zwłaszcza, jeśli chodzi o jego bezpieczeństwo w aspekcie ochrony przed infekcjami i włamaniami hackerskimi. Jeśli wybieramy hosting, o bezpieczeństwo serwera na którym znajduje się wydzielona część dla naszych zasobów, dba nasz hostingodawca.
Hostingi najczęściej są współdzielone, oznacza to, że zasoby serwera są dzielone na wielu użytkowników (klientów), którzy na swojej przydzielonej części serwera (hostingu), utrzymują stronę internetową lub wiele stron. Tak więc, przy wyborze dostawcy hostingu powinniśmy zwrócić uwagę na:
- możliwość separacji serwisów – pozwala ona na odseparowanie katalogów z plikami stron. W przypadku utrzymywania kilku stron na jednym hostingu i zainfekowania jednej z nich, separacja serwisu zabezpiecza rozprzestrzenianie się infekcji na pozostałe strony, utrzymywane na tym samym hostingu;
- dostępne wersje PHP – im nowsza, tym bezpieczniejsza;
- czy dostawca hostingu zapewnia systemy blokowania ataków DDoS;
- czy zapewnia łączenie SFTP – bezpieczne łączenie przy pomocy klienta FTP;
- zapewnienie szybkiego wsparcia technicznego w postaci infolinii lub skrzynki email, czatu;
- czas przechowywania backupów przez dostawcę hostingu – im dłużej tym lepiej
- opinie użytkowników na temat dostawcy hotingu.
Nie korzystajcie z autoinstalatora WordPress
Nie korzystajcie z autoinstalatora systemu CMS WordPress, oferowanego przez hostingodawcę. WordPressa zainstalujcie manualnie, najlepiej przy użyciu klienta FTP (np. FileZilla). Dzięki temu będziecie mieli pełną kontrolę nad plikami i pewność, że nie są zmodyfikowane. Pobierzcie najnowszą wersję WordPress lub najnowszą, która jest kompatybilna z waszym motywem strony. Wszystkie wersje WordPressa dostępne są tutaj: https://wordpress.org/download/releases/
Hasło do bazy danych MySQL
Powinniśmy zadbać o skomplikowane hasło do bazy danych naszej strony. Jeśli mamy kilka stron, to tworzymy dla każdej strony osobną bazę danych. Hasło do bazy danych powinno być długie i zawierać przemieszane duże i małe litery z cyframi i znakami specjalnymi. Najlepiej, kiedy baza danych nie posiada dostępu zdalnego, w której db_name != db_user
Zmiana prefixu tabel bazy danych
Na początku instalacji CMS WordPress wdrażamy pierwsze zabezpieczenia. Należą do nich:
- silne hasło naszej bazy danych;
- zastosowanie innego prefixu tabel bazy danych, inny niż standardowy wp_;
- hasło do panelu logowania systemu WordPress.
Tak więc, podczas instalacji WordPressa warto zmienić standardowy prefix tabel danych bazy wp_ na inny ciąg liter, np. mojprefix. Jeśli nie zmienimy prefixu tabel wp_ na inny prefix podczas instalacji WordPressa, to możemy zrobić to później, logując się do phpMyAdmin, w którym znajduje się baza danych naszej strony.
Login trudny do odgadnięcia
Zastosuj trudny do odgadnięcia login do panelu zarządzania swoim hostingiem, a później dla swojej strony internetowej w WordPress – inny niż do hostingu. Najlepiej składający się z dużych i małych liter (bez polskich znaków) oraz cyfr. WAŻNE! Nigdy nie stosuj loginu o nazwie takiej samej jak domena, nazwa firmy, której dotyczy strona, a tym bardziej, najbardziej idiotycznego loginu jakim jest słowo admin, admin1 itd.
Stosowanie skomplikowanego hasła
Nigdy nie stosuj łatwego do zapamiętania hasła! Dlaczego? Ponieważ takie hasło jest równie łatwe do złamania – łatwiejsze niż jego zapamiętanie. Hasło do panelu zarządzania hostingiem, jak i do systemu CMS WordPress powinno być skomplikowane. Powinno składać się z dużych i małych liter, cyfr i znaków specjalnych. Im dłuższe, skomplikowane hasło, tym lepiej. Najgorsze hasła na świecie to ciągi liter w kolejności na klawiaturze komputera: qwerty, qwerty1, asdfg itd.
Instalacja certyfikatu SSL dla naszej domeny
SSL zwiększa bezpieczeństwo naszej strony dzięki potwierdzeniu szyfrowania danych, przesyłanych przez nasz serwer do użytkownika. SSL stał się już standardem, zatem każdy właściciel strony internetowej powinien zadbać o wdrożenie SSL.
Kolejne procesy zabezpieczenia strony WordPress
Kolejnym etapem wdrażania zabezpieczeń dla WordPress jest edycja i modyfikacja plików znajdujących się na serwerze. Z tego artykułu dowiedzie się jak wprowadzić ważne, podstawowe zabezpieczenia dla naszej strony. Wszystko opisane krok po kroku, wraz gotowymi skryptami do zamieszczenia we wskazanych plikach. UWAGA! Przed przystąpieniem do niżej opisanych modyfikacji, wykonaj kopię zapasową strony i bazy danych.
Jeśli hostingodawca nie oferuje bezpośredniej edycji plików na serwerze, to możemy dokonać zmian w plikach po wcześniejszym pobraniu pliku z serwera na komputer. Do edycji plików można użyć darmowego programu Visual Studio Code.
Własne klucze dla wp-config
W WordPress, plik wp-config.php jest plikiem konfiguracyjnym, który zawiera ważne informacje dotyczące konfiguracji Twojej witryny. W tym pliku znajdują się również tajne klucze, które są używane do szyfrowania informacji przechowywanych w bazie danych i umożliwiają zabezpieczenie Twojej witryny przed różnego rodzaju atakami. Wyglądają one jak poniżej na obrazku:
Generowanie własnych kluczy dla wp-config.php jest ważne, ponieważ pozwala to na zwiększenie bezpieczeństwa Twojej witryny. Klucze te są wymieniane w kilku miejscach w pliku wp-config.php, a ich wartości są unikalne dla każdej witryny. Jeśli użyjesz domyślnych kluczy, które są dostarczane z WordPress, istnieje większe ryzyko, że ktoś będzie w stanie złamać zabezpieczenia Twojej witryny. Dlatego też zaleca się generowanie własnych, unikalnych kluczy dla wp-config.php, aby zwiększyć bezpieczeństwo Twojej witryny.
Możesz wygenerować własne klucze, korzystając z narzędzia do generowania kluczy dostępnego w WordPress lub skorzystać z online narzędzia do generowania kluczy, takiego jak API WordPress Secret Key. Następnie wystarczy skopiować i wkleić wygenerowane klucze do pliku wp-config.php zastępując domyślne klucze. Pamiętaj, aby zapisać zmiany w pliku po wklejeniu nowych kluczy.
Przeniesienie danych bazy do innego pliku
Kolejnym ważnym elementem, który, dzięki któremu dowiecie się jak zabezpieczyć stronę WordPress, jest zmiana pliku dla danych do naszej bazy danych. Informacje dotyczące połączenia z naszą bazą danych, znajdują się również w pliku wp-config.php. Dzięki temu WordPress łączy się z bazą danych i zapisują się w niej informacje na temat naszej strony. Przeniesienie tych danych do innego pliku bardzo zmniejsza ryzyko włamania. W tym celu najlepiej jest ściągnąć na dysk komputera plik wp-config.php i powielić go. W powielonej kopii pliku zmieniamy jego nazwę dodając jakieś słowo, np. na wp-config-dane.php. Po zmianie kopii nazwy pliku na inny, usuwamy w nim zbędne dane i zostawiamy tylko informacje dotyczące typu kodu, jak na poniższym obrazku (widok pliku edytowanego w darmowym programie Visual Studio Code)
Następnie w pliku wp-config.php szukamy fragmentu kodu zawierającego dane do bazy danych i kopiujemy je. Wygląda to jak poniżej, tyle, że w miejscach takich jak ’moja_baza’ lub 'moj_user’ znajdują się dane Waszej bazy danych:
define(’DB_NAME’, 'moja_baza’);
define(’DB_USER’, 'moj_user’);
define(’DB_PASSWORD’, 'moje_haslo’);
define(’DB_HOST’, 'moj_host’);
define(’DB_CHARSET’, 'utf8′);
define(’DB_COLLATE’, ”);
Następnie wklejamy te dane do pliku ze zmienioną nazwą (w tym przypadku do pliku wp-config-dane.php), jak w poniższym obrazku i zapisujemy plik z wklejonymi informacjami.
Teraz w pliku wp-config.php usuwamy dane do łączenia z naszą bazą i zastępujemy je krótką dyrektywą:
require_once „wp-config-db.php”;
Dzięki tej krótkiej dyrektywie, połączenie z naszą bazą danych uzyskujemy z poziomu pliku wp-config-dane.php, a nie jak dotychczas z pliku wp-config.php
Przeniesienie danych bazy do innego pliku pełni też funkcję ułatwiającą konserwację kodu. Jeśli plik wp-config jest duży i zawiera wiele różnych ustawień, może być trudny do czytania i utrzymania. Przeniesienie danych bazy do osobnego pliku ogranicza ilość informacji, które trzeba przetwarzać w danym pliku.
Wyłączenie możliwości edycji plików wtyczek i motywu
WordPress standardowo umożliwia edytowanie plików motywu i wtyczek w panelu, po zalogowaniu się do systemu CMS WordPress. Dzięki tej możliwości, łatwiej jest się włamać w taki sposób niż przez hosting. Dlatego warto wyłączyć tę opcję, aby uniemożliwić edycję plików z poziomu Edytora w panelu WordPress. Aby tego dokonać w pliku wp-config.php zamieszczamy poniższyfragment kodu:
define(’DISALLOW_FILE_EDIT’, true);
Ukrywanie błędów w WordPress
Dyrektywa define(’WP_DEBUG’, false) jest używana do wyłączenia trybu debugowania WordPress. Kiedy tryb debugowania jest włączony, WordPress wyświetla powiadomienia, ostrzeżenia i błędy na froncie strony. Może to być pomocne podczas tworzenia lub rozwiązywania problemów z witryną WordPress, ale może też być rozpraszające lub mylące dla odwiedzających stronę. Najczęściej za ukrywanie błędów odpowiada nasz dostawca hostingu, ale gdyby tak się nie stało, to warto zamieścić krótki kod, który o to zadba. Odnajdujemy taką dyrektywę jak poniżej:
define(’WP_DEBUG’, false);
znajdującą się w pliku wp-config.php, a następnie doklejamy w kolejnej linijce pod nią, następującą dyrektywę:
if ( ! WP_DEBUG ) {
ini_set(’display_errors’, 0);
}
teraz cała dyrektywa powinna wyglądać jak poniżej:
define(’WP_DEBUG’, false);
if ( ! WP_DEBUG ) {
ini_set(’display_errors’, 0);
}
Blokada dostępu do pliku wp-login.php
Aby zablokować dostęp do pliku wp-login.php, wystarczy wkleić poniższą dyrektywę w pliku .htaccess, który zlokalizowany jest w głównym katalogu strony. Należy pamiętać, że w miejscu RewriteCond %{HTTP_REFERER} !^http://(.*)?.nasza-domena.pl [NC] wpisujemy adres naszej domeny:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^http://(.*)?.nasza-domena.pl [NC]
RewriteCond %{REQUEST_URI} ^/wp-login\.php(.*)$
RewriteRule ^(.*)$ – [R=403,L]
</IfModule>
Blokada dostępu do pliku xmlrpc.php
Plik xmlrpc.php najczęściej nie jest przez nas wykorzystywany. Jeśli nie korzystamy z interfejsu XML-RPC, to możemy go całkowicie zablokować, ponieważ jest on często atakowany. W pliku .htaccess, który znajduje się w katalogu głównym strony, dodajemy poniższą dyrektywę:
<files xmlrpc.php>
order deny,allow
deny from all
</files>
Blokada możliwości podglądu plików wp-config.php, .htaccess, readme.html
Pliki takie jak wp-config.php, .htaccess, readme.html nie powinny być kiedykolwiek podejrzane przez osoby postronne, więc w tym celu blokujemy możliwość ich podglądu, dodając poniższą dyrektywę w pliku .htaccess, który znajduje się w katalogu głównym naszej strony:
<FilesMatch „wp-config.*\.php|\.htaccess|readme\.html”>
Order allow,deny
Deny from all
</FilesMatch>
Zabezpieczenie dla wp-includes
Aby zabezpieczyć katalog wp-includes, należy stworzyć w nim plik .htaccess oraz wkleić do niego poniższą dyrektywę:
<FilesMatch „\.(?i:php)$”>
Order allow,deny
Deny from all
</FilesMatch>
<Files wp-tinymce.php>
Allow from all
</Files>
<Files ms-files.php>
Allow from all
</Files>
Zabezpieczenie dla wp-content
Katalog wp-content zabezpieczamy podobnie jak w przypadku folderu wp-includes. W katalogu wp-content tworzymy plik .htaccess,następnie wklejamy do niego poniższą dyrektywę:
<FilesMatch „\.(?i:php)$”>
Order allow,deny
Deny from all
</FilesMatch>
Możliwe, że nasz motyw lub któraś z wtyczek przestaną prawidłowo działać. W takim przypadku warto zastąpić wtyczkę jakąś działającą, a jeśli nie ma takiej możliwości, to niestety usuwamy ten kod, a katalog pozostanie bez powyższego zabezpieczenia.
Ukrycie informacji o wersji WordPress
Informacje dotyczące obecnie zainstalowanej wersji WordPress są bardzo przydatne podczas próby włamania się na naszą stronę, dlatego warto tę informację ukryć. Aby ukryć informację o obecnej wersji WordPress, wystarczy przejść do pliku functions.php, który zlokalizowany jest w katalogu głównym motywu Waszej strony (ścieżka do pliku functions.php: katalog główny=>wp-content=>themes=>nazwa_twojego_motywu.
Następnie do pliku functions.php wklejamy poniższą dyrektywę (może być na samym końcu w pliku):
function dartcreations_remove_version() { return ”;
} add_filter(’generator’, 'dartcreations_remove_version’);
Drugi sposób na ukrycie informacji o używanej wersji WordPress z pozostałymi obszarami:
// remove version from head
remove_action(’wp_head’, 'wp_generator’);
// remove version from rss
add_filter(’the_generator’, '__return_empty_string’);
// remove version from scripts and styles
function shapeSpace_remove_version_scripts_styles($src) {
if (strpos($src, 'ver=’)) {
$src = remove_query_arg(’ver’, $src);
}
return $src;
}
add_filter(’style_loader_src’, 'shapeSpace_remove_version_scripts_styles’, 9999);
add_filter(’script_loader_src’, 'shapeSpace_remove_version_scripts_styles’, 9999);
Podobnych sposobów zabezpieczeń w postaci zamieszczanych skryptów w różnych plikach jest mnóstwo, ale wymaga to sporo czasu. My opisujemy kilka z podstawowych, które na ogół dobrze zabezpieczają stronę WordPress, lecz nie gwarantują pełnego bezpieczeństwa. Z pewnością bardzo podwyższają bezpieczeństwo strony zbudowanej w WordPress.
Dodatkowe zabezpieczenia WordPressa
Uwierzytelnienie dwuskładnikowe logowania do panelu WordPress
Warto wprowadzić uwierzytelnianie dwuskładnikowe podczas logowanie do panelu WordPress. Dzięki temu bardzo zwiększymy bezpieczeństwo logowania. Możemy to zrobić np. przy pomocy Google Authenticator, który generuje kody uwierzytelniające o ograniczonym czasie ważności, wymagane podczas logowania.
Usunięcie nieużywanych wtyczek
Często zdarza się, że mamy zainstalowane wtyczki, które są wyłączone, ponieważ są zbędne i nie wymagane do działania motywu strony. Takie wtyczki najlepiej odinstalować, aby nie stwarzały większego ryzyka włamań do naszej strony.
Aktualizacje wtyczek, motywu i systemu wersji WordPress
Wielu użytkowników WordPress zapomina o bieżących aktualizacjach wtyczek, systemu i motywu. Aktualizacje powinny być wykonywane bezzwłocznie po pojawieniu się nowej aktualizacji. Dotyczy to zarówno wtyczek jak i wersji WordPress oraz motywu. Aktualizacje wtyczek i systemu możemy ustawić w tryb automatyczny, dzięki któremu zaktualizują się samodzielnie, wraz z pojawieniem się nowej aktualizacji. Należy jednak sprawdzać czy któraś z aktualizacji nie uszkodziła naszej strony. W takim przypadku powinniśmy przywrócić kopię zapasową strony z dnia, w którym działała prawidłowo. Dlatego ważne jest, aby wykonywać kopie zapasowe jak najczęściej, najlepiej każdego dnia.
Instalacja wtyczek z repozytorium WordPress
Jeśli mamy potrzebę zainstalować wtyczkę o konkretnej funkcjonalności, to robimy to sprawdzając czy dana wtyczka znajduje w repozytorium WordPress Dzięki wyszukiwarce z powyższego odnośnika, możemy sprawdzić czy wtyczka, która nas interesuje znajduje się w repozytorium WordPress
Motywy WordPress z zaufanych źródeł
Jeżeli nie jesteście programistami i nie posiadacie umiejętności tworzenia własnych motywów, to zaopatrujcie się w motywy wyłącznie ze sprawdzonych i zaufanych źródeł. Nie warto korzystać z motywów nieznajomego pochodzenia, zwłaszcza, kiedy mamy możliwość skorzystania z motywu za darmo, który normalnie jest płatny. Pirackie motywy prawie zawsze zawierają szkodliwe skrypty, które prędzej czy później zaczną sprawiać problemy.
Podsumowanie
Opisaliśmy jak zabezpieczyć stronę WordPress. Większości osób, wdrożenie wyżej opisanych zabezpieczeń nie powinno sprawić trudności, ale jeśli tak by się zdarzyło, to można skorzystać z usług profesjonalistów, którzy wdrożą zabezpieczenia na Waszej stronie internetowej. Wdrożenie wyżej opisanych kroków pozwoli Wam zneutralizować większość ataków hakerskich, zwłaszcza tych, które wykonują zautomatyzowane boty hackujące.