Bez wątpienia WordPress jest naszym ulubionym Systemem Zarządzania Treścią (CMS). Spośród wszystkich stron internetowych posiadających wspomniany CMS – to właśnie WordPress jest najczęściej wybieranym, bo aż w ponad 63% przypadków (według oficjalnych danych od W3techs). Niestety z uwagi na swoją popularność, jest on również najczęściej atakowanym. Z raportu od Sucuri z roku 2019, wynika, że ze wszystkich zainfekowanych stron, które posiadały system CMS, aż w 94% przypadków był to WordPress.
Jedną z najczęstszych przyczyn infekcji na stronach z systemem CMS jest zwlekanie z aktualizacją. Jedynie 44% spośród zainfekowanych stron, miało w chwili infekcji zainstalowaną najnowszą dostępną wersję swojego systemu.
Ciekawą rzecz można zaobserwować na wykresie z podziałem na systemy, w których wyraźnie widać, że właściciele stron e-commerce, zwlekają z aktualizacją najczęściej.
Powodem tego oczywiście jest obawa przed tzw. “wysypaniem się“ strony. Czyli, innymi słowy, przerwanie poprawnego funkcjonowania sklepu internetowego, a tym samym utratę pieniędzy za okres, w którym ten sklep będzie niedostępny.
W poniższym artykule przedstawimy Wam kilka sposobów, na zabezpieczenie swojej strony opartej o WordPress, dzięki którym zmniejszycie szansę na dołączenie do statystyk zainfekowanych witryn.
Wtyczki zabezpieczające
Oczywiście, jeśli komuś nie zależy na dobrym zabezpieczeniu swojej strony, a jedynie na szybkim załatwieniu sprawy, wtyczka będzie lepszym rozwiązaniem, niż brak jakichkolwiek działań. Większość zabezpieczeń na stronie można wdrożyć bez wykorzystywania dodatkowych rozszerzeń, które mogą tylko ją obciążyć. Jeśli jednak zdecydujemy się na wykorzystanie wtyczki – warto sprawdzić: Sucuri Security, WordFence Security czy iThemes Security.
Ukrycie wersji WordPressa
Dlaczego warto to zrobić? Atakujący nie znając aktualnie zainstalowanej wersji, będzie miał trudność w dobraniu odpowiedniego sposobu infekcji naszej strony. W internecie jest publicznie dostępna baza wszystkich znanych luk w zabezpieczeniach dla danej wersji WordPressa. Łatwo można też znaleźć gotowe do wykorzystania exploity, dzięki którym atakujący będzie mógł np. dostać się na naszą stronę.
Aby to zrobić, wystarczy wkleić poniższy kod do pliku functions.php (najlepiej na samym dole pliku) dla aktywnego na stronie motywu.
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');
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);
Regularna aktualizacja WordPressa
Patrząc na statystyki podane na początku tego artykułu, nie trzeba mówić o tym, jak istotne jest regularne aktualizowanie naszego WordPressa. Ważnym jest również, by poza samym CMS, aktualizować też wszystkie wykorzystywane wtyczki i motywy – dzięki czemu pozbędziemy się chociaż części luk w zabezpieczeniach naszej witryny. Cały proces można zautomatyzować przy użyciu kilku linijek kodu.
Automatyczna aktualizacja wtyczek
Poniższy kod należy umieścić w pliku functions.php (najlepiej na samym dole pliku), aktualnie aktywnego motywu.
add_filter( 'auto_update_plugin', '__return_true' );
Automatyczna aktualizacja motywu
Poniższy kod należy umieścić w pliku functions.php (najlepiej na samym dole pliku), aktualnie aktywnego motywu.
add_filter( 'auto_update_theme', '__return_true' );
Automatyczna aktualizacja WordPressa
Poniższy kod należy umieścić w pliku wp-config.php
define( 'WP_AUTO_UPDATE_CORE', true );
Dodatkowo, jeśli interesują Was wyłącznie ważne aktualizacje jak np. Bezpieczeństwa, a chcecie pominąć mniejsze – należy dodać w pliku functions.php (najlepiej na samym dole), aktualnie aktywnego motywu poniższy kod:
add_filter( 'allow_dev_auto_core_updates', '__return_false' );
Wtyczka do automatycznych aktualizacji
Jeśli ktoś nie jest zbyt chętny do mieszania w kodzie i plikach swojej strony – może oczywiście jako alternatywę wybrać wtyczkę do automatycznych aktualizacji. W tym miejscu możemy polecić: Easy Updates Manager – Darmowe i łatwe w obsłudze rozszerzenie, którym bez problemu uruchomimy proces uaktualnienia motywów, wtyczek lub samego Core WordPressa. Dodatkowo może ona wysyłać Wam powiadomienia mailowe o wykonanej aktualizacji lub ewentualnych napotkanych problemach.
Zmiana domyślnego prefiksu tabel WordPressa w bazie danych
Domyślnie WordPress podczas instalacji proponuje dla wszystkich tabel prefiks “wp_”. Można go oczywiście zmienić na dowolny ciąg znaków, np. “prefiks123xyz_”. Zmiana tego prefiksu na trudniejszy do odgadnięcia pomoże uchronić naszą stronę przed atakiem typu SQL Injection. Atak ten w dużym skrócie pozwala bez bezpośredniego dostępu do bazy danych, wykonywać na niej różnego rodzaju zapytania (kwerendy) co finalnie pozwala atakującemu uzyskać dostęp do naszej strony, a nawet całkowicie ją zniszczyć. Jeśli Wasza strona posiada już zainstalowany system WordPress – nadal możecie zmienić prefiks tabel. A o tym, jak to zrobić, możecie przeczytać poniżej.
Kopia zapasowa
Zanim przystąpicie do jakichkolwiek operacji na bazie danych, wykonajcie jej kopię zapasową. Większość hostingów automatycznie, w regularnych odstępach czasu robi kopię zapasową Waszej bazy. Jeśli tak jest również w Waszym przypadku, możecie przejść do następnego kroku. Kopię zapasową możecie wykonać z poziomu hostingu, jednak z uwagi na różnice w ich budowie, pokażemy jak ją wykonać bezpośrednio w panelu phpMyAdmin.
Po zalogowaniu się do panelu phpMyAdmin (najczęściej adres to: domena.pl/phpmyadmin) wybieramy zakładkę “Eksport”. Następnie wybieramy metodę “Custom” i klikamy na bazę danych, której kopię chcemy zrobić. Na koniec wystarczy na samym dole kliknąć “Go”, a plik bazy danych zostanie pobrany na nasz dysk.
Zmień domyślny prefiks w bazie danych
Po zalogowaniu do phpMyAdmin i wybraniu interesującej nas bazy, należy wybrać zakładkę SQL.
W polu tekstowym należy wkleić poniższe polecenie (kwerendę).
Wcześniej oczywiście trzeba zmodyfikować to polecenie zgodnie z wybranym przez siebie prefiksem tabel. W naszym przypadku będzie wyglądać tak:
RENAME table `wp_termmeta` TO `prefiks123xyz_termmeta`;
RENAME table `wp_term_taxonomy` TO `prefiks123xyz_term_taxonomy`;
RENAME table `wp_commentmeta` TO `prefiks123xyz_commentmeta`;
RENAME table `wp_links` TO `prefiks123xyz_links`;
RENAME table `wp_terms` TO `prefiks123xyz_terms`;
RENAME table `wp_comments` TO `prefiks123xyz_comments`;
RENAME table `wp_term_relationships` TO `prefiks123xyz_term_relationships`;
RENAME table `wp_users` TO `prefiks123xyz_users`;
RENAME table `wp_options` TO `prefiks123xyz_options`;
RENAME table `wp_usermeta` TO `prefiks123xyz_usermeta`;
RENAME table `wp_postmeta` TO `prefiks123xyz_postmeta`;
RENAME table `wp_posts` TO `prefiks123xyz_posts`;
Po wykonaniu powyższego polecenia domyślny prefiks tabel zostanie zmieniony na wybrany przez nas. Jeśli pozostały jakieś dodatkowe tabele, które mogły zostać dodane przez różnego rodzaju wtyczki, należy dodać je do powyższego polecenia lub wykonać jeszcze jedno, które zmieni również ich prefiks.
Zmień prefiks w pliku wp-config.php
W plikach WordPressa należy odnaleźć plik wp-config.php. W nim należy znaleźć linijkę “$table_prefix 'wp_’;” i zmienić prefiks na wybrany przez siebie. W tym przypadku linijka po zmianach będzie wyglądać tak: “$table_prefix 'prefiks123xyz_’;”
Regularne kopie zapasowe
Jeśli działania zabezpieczające witrynę, okażą się nieskuteczne i witryna zostanie uszkodzona lub zainfekowana, wtedy z pomocą przyjdzie kopia zapasowa witryny. Większość hostingów oferuje kopie zapasowe w swoim planie, jednak z uwagi na zajmowaną przestrzeń – są one tylko na krótki czas wstecz. Warto trzymać przynajmniej kilka takich kopii witryny na swoim dysku lub w innym bezpiecznym miejscu. Dzięki temu zawsze będziemy mogli przywrócić swoją stronę do pierwotnego stanu. Oczywiście również do tego istnieją przygotowane wtyczki. Przy ręcznej kopii zapasowej, wystarczy skopiować wszystkie pliki naszej strony przez FTP oraz pobrać kopię bazy danych np. przez phpMyAdmin. Wtyczki mogą pomóc zautomatyzować ten proces i wykonywać kopię naszej strony cyklicznie. Niektóre wtyczki są również zsynchronizowane z Dyskiem Google / DropBoxem – co pozwoli na posiadanie kopii zapasowej zawsze pod ręką.
Zabezpieczenie pliku wp-login.php
Plik odpowiadający za logowanie do kokpitu administratora, praktycznie bez przerwy jest poddawany próbie złamania hasła przy użyciu ataków Brute Force, czy metodą słownikową. Każde takie zapytanie do pliku wp-login.php pochłania trochę zasobów serwera. Przy tysiącach zapytań dziennie, jest to już pokaźna ilość, która znacznie spowalnia działanie naszej strony. Najlepiej i jednocześnie najskuteczniej jest zabezpieczyć ten plik z poziomu serwera. Wszystko, co trzeba zrobić, by to ograniczyć – to w pliku .htaccess dodać poniższą formułę:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^https://(.*)?.domena.pl [NC]
RewriteCond %{REQUEST_URI} ^/wp-login\.php(.*)$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>
Przy okazji warto również zabezpieczyć plik xmlrpc.php, jeśli nie łączymy się z witryną z zewnątrz – np. przez aplikację od WordPressa. By go zabezpieczyć, wystarczy w pliku .htaccess dokleić poniższą formułę:
<files xmlrpc.php>
order deny,allow
deny from all
</files>
Zmiana adresu logowania do kokpitu administratora
Domyślnie do panelu administratora logujemy się przy wykorzystaniu adresu “/wp-admin” zaraz po nazwie domeny. Jest to dobrze wszystkim znany adres i właśnie dlatego powinno się go zmienić. W tym celu można skorzystać z wtyczki jak np.: WPS HIDE LOGIN. Pozwoli ona zmienić domyślny adres na dowolny ciąg znaków. Dla przykładu: z adresu “/wp-admin” na “/sekretny-adres-logowania-123”.
Dodatkowe zabezpieczenia
Poniżej wspomnimy również o prostszych metodach zabezpieczenia naszej witryny.
Mocne hasło i login
Jedną z najważniejszych metod jest po prostu mocne hasło oraz trudny do odgadnięcia login. Nikt nie powinien korzystać z tak popularnych loginów, jak np.: admin, admin1, root, qwerty, test. Takie nazwy użytkowników bardzo często padają bowiem ofiarą ataków Brute force. Aby ułatwić sobie korzystanie z bardziej złożonych i bezpiecznych danych do logowania, warto korzystać z programów typu KeePass, które pozwalają nam przechowywać długie i trudne do zapamiętania hasła.
CAPTCHA
Każdy słyszał lub widział już stosowaną od wielu lat technikę, pozwalającą (mniej lub bardziej skutecznie) odfiltrować wszystkie boty, próbujące przesłać różnego rodzaju dane – będące najczęściej spamem. Warto na swojej stronie dodać CAPTCHA do wszystkich formularzy. Pozwoli to nie tylko zabezpieczyć stronę przed spamem, ale też odciążyć serwer Waszej strony. Samo zabezpieczenie można nawet dodać do logowania do panelu administratora. Dzięki czemu ograniczymy działania botów, próbujących odgadnąć hasło do kokpitu.
Certyfikat SSL
Warto go zainstalować na swojej witryny nie tylko z uwagi na lepsze pozycjonowanie swojej strony, ale też na bezpieczeństwo. W dużym uproszczeniu certyfikat SSL pozwoli Wam szyfrować ruch pomiędzy Waszą stroną internetową a użytkownikiem, który ją przegląda. Po zakupie takiego certyfikatu wystarczy przekierować cały ruch na https przez odpowiednie wpisy w pliku .htaccess lub po prostu instalację wtyczki takiej jak np.: Simple SSL
Podsumowując
Dziś pokazaliśmy wiele sposobów, dzięki którym Wasza witryna stanie się bezpieczniejsza. Warto zastosować chociaż kilka z nich, gdyż z pewnością pomoże nam to uchronić się przed utratą danych, zarówno tych własnych, jak i tych należących do odwiedzających Waszą stronę.