Home / Jak zabezpieczyć stronę WordPress?

Jak zabezpieczyć stronę WordPress?

Strony WordPress narażone są na atak hakerskie tak samo, jak wszystkie inne strony. Można jednak zrobić wiele, by o bezpieczeństwo strony po prostu zadbać. Jak ograniczyć ryzyko ataków hakerskich na stronach WordPress? Sprawdź nasz kompleksowy poradnik.

Zaraz zaraz… a czy WordPress nie jest bezpieczny sam w sobie?

Tak. WordPress jest do granic możliwości bezpieczny sam w sobie. Gdyby jednak ten poziom granic możliwości był maksymalny – ten artykuł nie miałby racji bytu. Dlaczego więc mówi się o zabezpieczaniu stron WordPress, skoro z założenia to jeden z najbezpieczniejszych systemów CMS na świecie?

Mit związany z kodem źródłowym stron WordPress

Mit dotyczący dużego poziomu narażenia WordPressa na ataki hakerskie wynika w dużej mierze z faktu, że ludzie błędnie interpretują określenie „oprogramowanie open source”. Rzeczywiście – WordPress jest oprogramowaniem typu open source, co oznacza, że jego kod źródłowy jest powszechnie dostępny. W tym tkwi jednak jego siła, a nie słabość.

Najlepszy system kryptograficzny jest bezpieczny właśnie wtedy, kiedy znane są wszystkie mechanizmy jego działania, a mimo to jest niemożliwy do zhakowania (zasada Kerckhoffsa, holenderskiego kryptologa). Powszechnie dostępny kod WordPressa jest więc jego niesamowitą siłą. Skoro każdy ma do niego dostęp, to każdy jest w stanie wytworzyć najlepsze zabezpieczenia – niemożliwe do złamania.

Przykład bezpiecznej strony WordPress z autorskim projektem.

System nie zawodzi – zawodzi człowiek

Tak naprawdę zdecydowana większość ataków na strony WordPress wynika nie z błędu systemu, a z błędu człowieka. Instalowanie przypadkowych wtyczek, niezrobiona na czas aktualizacja oprogramowania, nieużywanie szyfrowanego połączenia https… to wręcz proszenie się o wpuszczenie na stronę www złośliwego kodu. Niestety zagrożenie najczęściej sprowadzamy na siebie sami. 

Czy strona na WordPress jest w pełni bezpieczna?

Tak, sama strona WordPress jest w pełni bezpieczna. Jeżeli nie jest „zepsuta” przez osobę, która nie ma pojęcia o bezpieczeństwie w sieci, to naprawdę nic jej nie zagraża. I na tym właściwie ten akapit mógłby się skończyć, ale ze względu na szerzące się negatywne opinie odnośnie bezpieczeństwa WordPressa należy go jednak rozwinąć i rozwiać pewne wątpliwości.

WordPress jest niezwykle popularny. Obecnie około 40% wszystkich stron www opartych jest o ten system CMS. Za tak wielką popularnością w ślad idzie oczywiście zwiększone ryzyko. Malware (ang. malicious software – złośliwe oprogramowanie) tworzony z myślą o jak największej ilości zainfekowanych serwisów nie będzie celował w mniejszych graczy na rynku CMS, kiedy może uderzyć w lidera. W tym miejscu odbywa się odwieczny wyścig między społecznością i twórcami WordPressa a hakerami. Pierwsi starają się jak najszybciej udoskonalać zabezpieczenia, hakerzy natomiast stale szukają luk.

Warto jednak wspomnieć, że krytycznych luk bezpieczeństwa w WordPress nigdy nie było wiele. Były to sytuacje bardzo sporadyczne i szybko były naprawiane przez twórców.

Zabezpieczenie strony www kluczem do jej bezpieczeństwa.

Popularność WordPressa od lat nie spada

WordPress od wielu lat jest najpopularniejszym systemem CMS. Historia WordPressa sięga 2003 roku, kiedy to ujrzał światło dziennie jako system specjalizujący się w serwisach stricte blogowych. Prawie 20 lat rozwoju sprawiło, że na dzień dzisiejszy WordPress stał się bardzo elastycznym rozwiązaniem, które znajduje swoje zastosowanie nie tylko dla blogów, ale również dla pełnoprawnych stron www, sklepów internetowych, a nawet sprawdza się jako fundament niestandardowych aplikacji, często w formie wersji MVP.

Czy w takim razie WordPress będzie odpowiednim wyborem dla mnie?

Rynek systemów CMS jest dość obszerny i naprawdę jest w czym wybierać (piszemy o tym więcej w naszym artykule o systemach CMS). Czy są platformy bezpieczniejsze niż WordPress? Trudno tu o jednoznaczną odpowiedź. Faktem jest natomiast to, że główny konkurent WordPressa, czyli Joomla, według serwisu CVS details ma zaraportowane około 20% więcej luk bezpieczeństwa niż właśnie WordPress. 

Różne opcje wyboru systemu CMS

To może najlepiej (najbezpieczniej) byłoby zlecić budowę serwisu od podstaw? WordPress, jak już wskazaliśmy na wstępie, to oprogramowanie z otwartym kodem źródłowym – każdy może zajrzeć 'do środka’ i przeanalizować prawie pół miliona linijek kodu szukając w poszukiwaniu luk bezpieczeństwa. W przypadku projektów budowanych od zera tylko osoby biorące udział w budowie projektu mają dostęp do kodu i już to w dużej mierze powoduje, że serwis jest bezpieczniejszy. Tak projektowany serwis to unikalny produkt, więc wszelkie masowe malware po prostu omijają go. Tutaj zwykle siła zabezpieczeń testowana jest indywidualnie, w momencie, gdy po drugiej stronie monitora siada osoba, która celowa szuka luki tylko w naszej stronie internetowej. Wtedy weryfikowana jest wiedza, umiejętność przewidywania i poziom wprowadzonych przez programistę zabezpieczeń. Jeżeli będą na wysokim poziomie – zapewne oprą się atakom. 😉 

Jak zabezpieczyć WordPress? Przykładowa strona.

Bezpieczeństwo strony WordPress

Trzeba jednak zdawać sobie sprawę z tego, że budowa serwisu posiadającego przynajmniej kluczowe funkcjonalności CMS WordPress, zwykle niesie za sobą ogromne koszta. Strony WordPress założymy dużo szybciej, dużo taniej i często również dużo bezpieczniej. System CMS WordPress również – tak samo jak autorską stronę – można dobrze zadbać o bezpieczeństwo WordPressa i niemal do zera ograniczyć możliwość infekcji. 

Jak zabezpieczyć stronę WordPress?

Zabezpieczenie WordPressa to proces wielopoziomowy. Odpowiada za niego:

  • hosting,
  • użytkownik (administrator) serwisu,
  • programista (w przypadku wprowadzenia niestandardowych rozwiązań).

Już na tym etapie – tworzenia strony WordPress – możemy mniej lub bardziej zadbać o jej bezpieczeństwo. 

1) Wybierz odpowiedni hosting

Wybór hostingu jest pierwszy krokiem w kwestii bezpieczeństwa twojej strony opartej o WordPress. Poniżej wskazujemy podstawowe cechy, które powinien spełniać dobry hosting.

Wersja PHP minimum 7.4

Dobry hosting powinien oferować wersję PHP minimum 8.0. Jeżeli masz na oku hosting z niższą wartością – poszukaj innego. 

regularne Backupy

Niezależnie od poziomu zabezpieczeń zawsze należy posiadać backupy serwisu – w tym kopie bazy danych oraz plików. Jeśli hosting oferuje takie rozwiązania, to na pewno powinien być to dla nas dodatkowy atut.

Separacja domen

Jest to mechanizm, który chroni domeny między sobą. Bardzo często na jednym hostingu posiadamy różne strony WordPress i separacja domen zapobiega temu, by ewentualna infekcja nie rozprzestrzeniła się po kilku naszych serwisach.

System antywirusowy

Hosting powinien być wyposażony w mechanizmy blokujące najbardziej powszechne typy ataków, jak np. DDoS . Popularnym oprogramowaniem do zabezpieczenia hostingu jest Imunify 360.

Protokół SFTP

Jest to szyfrowana forma połączenia z serwerem pozwalająca chociażby na przesyłanie plików. Znacznie wolniejszy niż klasyczne FTP, ale jednocześnie pozwalający na dużo lepsze zabezpieczenie strony.

Certyfikat SSL

Certyfikaty SSL można zakupić niezależnie od hostingu, jednak wielu hostingodawców oferuje instalację certyfikatu SSL za darmo – w cenie hostingu. Warto się tym zainteresować, bo dla zdecydowanej większości użytkowników posiadanie certyfikatu SSL jest w pełni wystarczające w kwestii podstawowego bezpieczeństwa strony.

Dostęp do logów

Możliwość uzyskania dostępu do logów WWW/HTTP, FTP oraz MTA jest bardzo ważna kwestia w przypadku prób ustalenia przyczyny infekcji strony.

2) Poprawnie zainstaluj WordPress

Etap instalacji jest kolejnym momentem, w którym warto wprowadzić kilka zabezpieczeń. Lista zadań na tym etapie nie jest długa.

Instalacja

Wystrzegaj się używania autoinstalatorów oferowanych przez hosting. Często rozwiązania te posiadają już wbudowane pewne zmiany czy wtyczki. Kontroluj wszystkie pliki, które znajdą się na serwerze. Instaluj WordPress samodzielnie. Wygodnym narzędziem jest wp-cli dla hostingów, które oferują połączenie SSH.

Baza danych

Dla każdego serwisu utwórz osobną bazę danych. W każdej bazie danych przechowywane są wrażliwe dane, dlatego pamiętaj, aby nadać trudne do odgadnięcia hasło do każdej bazy danych. Jeśli nie masz potrzeby, możesz także dla bezpieczeństwa zupełnie wyłączyć dostęp zdalny do bazy danych.

Pierwszy użytkownik

Ustawiając pierwszego użytkownika, ustawiamy jednocześnie dane do logowania do naszego panelu administracyjnego na stronie WordPress. Warto zadbać o trudny login administratora oraz skomplikowane hasło – przede wszystkim takie, którego nie używamy nigdzie indziej. Wszelkie hasła powinny posiadać minimum 8 znaków – w tym mała litera, wielka litera, cyfra i znak specjalny, np.: ! .

Nazwa użytkownika również powinna być unikalna. Jeżeli obecnie logujesz się przez „admin” – jak najszybciej zmień login na bardziej oryginalny. Najczęściej boty zaczynają próby logowania od właśnie tego najpopularniejszego loginu, a jeśli rzeczywiście jest on używany – dajemy atakującemu już połowę danych do logowania. Dlatego żeby dobrze zabezpieczyć WordPressa, zawsze na początku zmień domyślną nazwę administratora.

Zmień adres logowania z wp-admin

Bardzo istotny jest również adres logowania, czyli fraza, którą dopisujemy do naszej domeny, by znaleźć się na stronie logowania. Adres logowania powinien być inny niż /wp-admin, ponieważ ochroni nas to przed atakami typu brute force (wycelowanymi właśnie w domeny logujące się do WordPressa poprzez /wp-admin). 

3) Dodatkowo zabezpiecz swój system WordPress (niezależnie od wersji WordPressa)

Po przejściu wszystkich poprzednich kroków mamy już właściwie gotową do pracy instancję WordPressa. Tutaj rozpoczyna się kolejny etap zabezpieczania. Jest on bardzo ważny dla każdej wersji WordPressa – także najnowszej. 

Poniżej wskazujemy szereg czynności, które warto wykonać przed instalacją wtyczek czy wyborem motywu. Ostrzegamy jednak, że są to czynności polegające na edycji kodu WordPressa czy konfiguracji serwera, bądź ostrożny 🙂

1) Zmień lokalizację danych do połączenia z bazą (bazy danych)

Utwórz nowy plik php w root folderze aplikacji. Nazwij go np my-db-connect.php i tam umieść dane do połączenia bazy danych. 

require_once "my-db-connect.php";
<?php
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** MySQL database username */
define( 'DB_USER', 'wordpress' );

/** MySQL database password */
define( 'DB_PASSWORD', 'wordpress' );

/** MySQL hostname */
define( 'DB_HOST', 'database' );

2) Zmień klucze autentykacyjne przy pomocy tego narzędzia.

define( 'AUTH_KEY',         '(vPuc5~OwaAJr95.,hdqIz3#=Q0,+0zM)7Pjx!gvu.!{_n_j*L!W91t< ;n_n^hq' );
define( 'SECURE_AUTH_KEY',  'M]Bk|L6>F<N3W|pdyRc-[Is|H91^q+oE][{LNu: tdyyd=$]u8dVH)?0I<=L.rB>' );
define( 'LOGGED_IN_KEY',    '@)uT~P-!@yb4^LfzZ%56k~XW}FAxvIuBi][s%|3^6O1U_U8U4S8)Ic-HQE^;0M(K' );
define( 'NONCE_KEY',        '{*6WMT^o*L]disB[@|cPBr2^ZqxH?nrR>+YL$h6}G~)&C%I.[XN@_h?jBHQ%>jaM' );
define( 'AUTH_SALT',        '>JVm%X!8,;YvG6=FInq1.:(*;d)$?H9-1T7t$uq_KdGX8?)TpiS,=BL!8y]X;7 E' );
define( 'SECURE_AUTH_SALT', 'VK_*0qspBcArM!E5]3)5EJGK<q= *q[b8!M[o-GM Lfj@W)~hLixpsh^CcpTrH6,' );
define( 'LOGGED_IN_SALT',   '1xq5i|7>P/Tz5`cU~I}PX,%6yU .okT9~i({jI6wAwPqxOW`i|EiaUNK.jUB`s*C' );
define( 'NONCE_SALT',       '#U~@tAwW7u^3&Ic `KG]#eR<5JQ=Oxu^uVykBsP$+Es@j6uG3o*G8huZW6=q}TlY' );

3) Wyłącz debugowanie błędów i zablokuj edycję plików z panelu WordPressa

Podstawową instrukcję podajemy poniżej, ale temu tematowi poświęciliśmy też osobny artykuł: Debugowanie WordPress). 

define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MOD', true);
define('WP_DEBUG', false);
if (!WP_DEBUG) {
    ini_set('display_errors', 0);
}

4) Zablokuj dostęp do kluczowych plików poprzez wp-config.php

Wyłącz edycję plików wtyczek oraz motywów za pomocą pliku wp-config.php. Wystarczy dodać do pliku wp config.php polecenie widoczne poniżej.

<FilesMatch "wp-config.*\.php|\.htaccess|readme\.html">
    Order allow,deny
    Deny from all
</FilesMatch>

5) Dodaj 7G Firewall

Dzięki 7G Firewall każda witryna jest chroniona przed wieloma rodzajami ataków, np.: przed atakami XSS, wstrzykiwaniem kodu, zatruwaniem pamięci podręcznej czy dzieleniem odpowiedzi.

6) Ukryj wersję WordPress

Ukryj wersję WordPressa Twojej strony. Możesz to zrobić poprzez edycję pliku functions.php wybranego motywu.

remove_action('wp_head', 'wp_generator');
function my_version_generator($generator, $type)
{
    return '';
}
add_filter('the_generator', 'my_version_generator', 10, 2);

function remove_src_wp_version( $src ) {
	global $wp_version;

	$version_str = '?ver='.$wp_version;
	$offset = strlen( $src ) - strlen( $version_str );

	if ( $offset >= 0 && strpos($src, $version_str, $offset) !== FALSE )
		return substr( $src, 0, $offset );

	return $src;
}
add_filter( 'script_loader_src', 'remove_src_wp_version' );
add_filter( 'style_loader_src', 'remove_src_wp_version' );

7) Zablokuj xmlrpc oraz plik manifestu

Poniżej znajdziesz instrukcje blokowania obu tych plików.

<Files xmlrpc.php>
  Order deny,allow
  Deny from all
</Files>
<Files "wlwmanifest.xml">
    Require all denied
</Files>

8) Chroń wp-admin

Wykorzystaj .htpasswd dla ochrony wp-admin. Pomoże Ci to narzędzie.

AuthType Basic
AuthGroupFile /dev/null
AuthName "Strefa administrator"
AuthUserFile /sciezka_do_pliku_htpasswd/.htpasswd
require valid-user

<FilesMatch "admin-ajax\.php|admin-post\.php">
    Order allow,deny
    Allow from all
    Satisfy any
</FilesMatch>

9) Ukryj loginy użytkowników

Pamiętaj, że aby to zadziałało, ustaw różne wartości dla loginu i nazwy wyświetlanej użytkownika. Nie rób tego przez żadne wtyczki zabezpieczające.

RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ /? [L,R=301]

10) Dodaj reguły zabezpieczające katalog wp-includes

Zrób to poprzez dodanie odpowiedniego pliku .htaccess.

<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>

11) Dodaj reguły zabezpieczające katalog wp-content

Również zrób to poprzez dodanie odpowiedniego pliku .htaccess.

<FilesMatch "\\.(?i:php)$">
    Order allow,deny
    Deny from all
</FilesMatch>

12) Zadbaj o to, co pojawia się w katalogu uploads

To także zrób poprzez dodanie tam pliku .htaccess. Zwróć uwagę, że wskazujesz tutaj listę plików, które są dopuszczane do katalogu i podkatalogów uploads.

<Files ~ ".*..*">
Order Allow,Deny
Deny from all
</Files>
<FilesMatch ".(jpg|jpeg|jpe|gif|png|tif|tiff|pdf|docx|doc|xls|xlsx|js|html|css|mp4|gif|mov|webp)">
Order Deny,Allow
Allow from all
</FilesMatch>

13) Zablokuj edycję plików .htaccess i wp-config.php 

Zrób to poprzez zmianę uprawnień na 444.

14) Dodaj narzędzie do tworzenia kopii zapasowych

Najlepiej jest, kiedy backupy są przechowywane na innym serwerze niż główna strona internetowa. Wtedy, jeżeli wystąpią jakieś błędy po stronie serwera i nawet utracimy swoją stronę internetową, będziemy mieli dostęp do jej kopii zapasowych.

Jak dbać o strony WordPress?

Poniżej znajdziesz małe podsumowanie tego artykułu, a w nim podstawowe sposoby, które pozwolą Ci zabezpieczyć stronę przed potencjalnymi atakami w przyszłości.

Zadbaj o wtyczki

Wtyczki to potęga WordPressa. Nawet te z darmowego repozytorium pozwalają znacznie rozszerzać funkcjonalność WordPressa. Miej natomiast na uwadze, że to kolejny otwarto źródłowy kod, który może stać się celem ataku. Według pewnych statystyk ponad 30% infekcji WordPress pochodzi z wtyczek. Dlatego ilość zainstalowanych wtyczek powinna ograniczać się do niezbędnego minimum. Wtyczki powinny pochodzić z pewnych źródeł i posiadać pełne wsparcie autora w kwestii aktualizacji bezpieczeństwa. 

Zainstaluj wtyczkę tylko wtedy, kiedy jest Ci absolutnie niezbędna. Na bieżąco usuwaj wszystkie zbędne wtyczki i motywy, ponieważ mogą one być przyczyną ataków hakerskich. Ponadto regularnie aktualizuj wtyczki, które są Ci potrzebne. 

Zadbaj o motyw

Podobnie jak wtyczki, tak samo motyw może być najsłabszym punktem Twoich zabezpieczeń. Instaluj tylko aktualne motywy, które posiadają wsparcie autora. Jeśli pojawi się konieczność utworzenia unikalnego motywu – zleć to profesjonalistom.

Hasła i nazwy użytkowników panelu WordPress

Oprócz wcześniej wspomnianej polityki silnych haseł, warto wyposażyć konta użytkowników o dodatkowe zabezpieczenia. Łatwym do wdrożenia i bardzo skutecznym rozwiązaniem jest logowanie dwuskładnikowe, np. z wykorzystaniem aplikacji Google Authenticator.

Na koniec pamiętaj o jednym – strony internetowe i tak zawsze będą celem ataków hakerskich

Wskazany powyżej zestaw czynności powinien w znacznym stopniu zwiększyć bezpieczeństwo instancji WordPress. Niestety nie ma narzędzia, które odpowiedziałoby na pytanie, jak zabezpieczyć stronę permanentnie. Każde oprogramowanie – niezależnie od tego, czy jest to WordPress, system operacyjny Windows, czy MacOs – powinno być stale aktualizowane i 'doglądane’. Dzięki temu w przypadku jakiejkolwiek infekcji reakcja będzie tak szybka, jak to możliwe, a dodatkowe zabezpieczenia skierowane zostaną na lukę, z której malware skorzystał.