Jak zabezpieczyć stronę na wordpress?
Jeśli prowadzisz stronę na Wordpress i nie posiadasz zabezpieczeń to wiesz jak dużo spamu i ataków się tam przytrafia. Raz miałem przypadek że po wrzuceniu strony w piątek, do niedzieli została zaatakowana i wyświetlała powiedzmy dziwne reklamy (wiedziałem co robię, jednak nie spodziewałem się aż takiego szybkiego włamania na stronę - tym bardziej że był to czysty motyw).
Poniżej przygotowaliśmy listę tego co możesz zrobić aby zwiększyć bezpieczeństwo swojej strony postawionej na silniku WordPress
1. Zawsze aktualizuj wordpress'a do najnowszej wersji
Ważne abyś używał nowej wersji wordpress, jeśli w starym oprogramowaniu ktoś znajdzie “dziurę”, od razu wszystkie boty będą próbowały używać tego exploita na wszystkich stronach, aby się do niech włamać. Jeśli od razu zaktualizujesz swoją stronę, wtedy Twoja nie będzie one już podatna na tego typu ataki.
2. Aktualizuj wtyczki wordpress'a
Jeśli na swojej stronie używasz wtyczek, warto sprawdzić czy są one w najnowszych wersjach oraz również je aktualizować, większość ataków odbywa się właśnie przez użycie wtyczek. Ich aktualizowanie potencjalnie zmniejsza ryzyko jednak czasem nie warto instalować wszystkiego jako wtyczki. Jeśli Twoja strona jest napisana od zera, nie jest to żaden gotowy motyw - wtedy warto różne rzeczy napisać samemu - wtyczki często są dość ciężkie i nie dość że spowalniają naszą witrynę, to dodatkowo zmniejszają jej bezpieczeństwo.
3. Skasuj wtyczki które nie są wymagane
Masz na swojej stronie wiele wtyczek ale nie wiesz nawet po co znajduje się tam większość z nich? lub po prostu są one nie używane? Wszystkie wyłączone wtyczki od razu wykasuj - nie ma sensu aby leżały one na serwerze. Pozostałe wtyczki które są włączone, mogą mieć spory wpływ na stronę, dlatego przed wyłączeniem jakiejkolwiek wtyczki przeczytaj do czego ona służy i jeśli dana opcja jest Ci zbędna wyłącz wtyczkę, sprawdź czy na stronie wszystko działa poprawnie i dopiero wtedy ją skasuj. Czym mniej zainstalowanych wtyczek, tym lepiej!
4. Przy instalacji wordpress'a wybieraj inny prefix niż domyśny wp_ ,lub zmień go na swojej stronie
Kiedy tylko bierzesz się za instalację wordpress'a nie pozostawiaj domyślnie prefixu tak jak był, czyli wp_. Staraj się maksymalnie utrudnić możliwość wyciągania danych z Twojej bazy. Dlatego warto tworzyć inne własne prefixy np. xt_ lub bt_. Jeśli Twoja strona już działa możesz taki prefix zmienić, będziesz musiał jednak dokonań zmian w wp-config.php (znajduje się on w głównym folderze strony zazwyczaj public_html), oraz w samej bazie danych. Nie będę tutaj tego tłumaczyć, jednak wystarczy że wpiszesz w google jak zmienić prefix w wordpress i znajdziesz ogromną ilość poradników na ten temat - jeśli chcesz daj znać w komentarzach to również stworzę Taki poradnik dla Ciebie.
5. Ukryj ID i login administratora
Tutaj również będziesz musiał pobawić się w phpmyadmin, a dokładnie w tabelce twoj_prefix_users, czyli domyślnie wp_users. Warto edytować wpis konta z adminem i zmienić jego ID, display_name oraz user_nicename - aby nigdzie nie było to administrator, admin itd. tylko Twoja wymyślona nazwa, nie wskazująca od razu na to że ten użytkownik jest administratorem.
Uwaga: jeśli zmienisz ID administratora, musisz dokonać zmian również w tabeli wp_usermeta, ponieważ tam zapisane jest ID administratora witryny. Aby to zrobić przydadzą się 2 gotowe zapytania do bazy:
UPDATE wp_users SET ID = 1024 WHERE ID = 1; to polecenie zmieni ID użytkownika 1 na ID 1024.
oraz
UPDATE wp_usermeta SET user_id = 1024 WHERE user_id = 1; to polecenie ustawi Administratora z ID 1024.
6. Zastosuj blokadę na .htaccess, możesz zrobić zabezpieczenie na login i hasło lub zablokować panel tylko dla wybranych adresów IP
Bardzo dobrym zabezpieczeniem jest blokowanie dostępu do panelu wordpress. Aby zrobić taką blokadę w głównym folderze strony szukamy pliku .htaccess i dodajmy wpis:
<Files wp-login.php> order deny,allowDeny from all # whitelist Your own IP address allow from xx.xxx.xx.xx #whitelist some other user's IP Address allow from xx.xxx.xx.xx </Files>
w miejscu xx.xxx.xx.xx oczywiście podajesz swój adres IP który sprawdzisz np. w google wpisując mój adres ip, jeśli masz zmienne IP to warto używać jakiegoś stałego VPN lub używać zabezpieczeń serwerowych na login i hasło. Jak coś takiego zrobić? Poszukaj w google frazy .htpasswd generator - wpisz tam swój login oraz hasło jakimi chcesz się logować przed zalogowaniem do panelu wordpress, zostanie Ci wygenerowany zaszyfrowany dostęp. Taki dostęp zapisujesz do pliku i wrzucasz na serwer jak to skonfigurować? Najlepiej stworzyć folder obok naszego public_html np. tajne, a do tego folderu wrzucić plik o nazwie .htpasswd, w tym pliku wrzucamy wcześniej wygenerowany login i hasło w zaszyfrowanej formie. Dodatkowo w naszym public_html musimy wskazać że używamy takiego hasła, tak więc szykamy .htaccess w folderze public_html oraz go edytujemy. Wystarczy dodać wpis:
<Files wp-login.php>AuthUserFile /home/nazwa_na_serwerze/domains/nazwa_mojej_doemny.pl/.htpasswd/.htpasswd AuthType basic AuthName "Restricted Resource" require valid-user</Files>
oczywiście linie AuthUserFile musisz edytować tak aby wskazywała na dokładną ścieżkę do pliku który wrzuciliśmy. Jeśli podałeś poprawną ścieżkę teraz przez wejściem na /wp-admin zostaniesz zapytany od dane które uzupełniłeś w pliku .htpasswd
7. Zmień domyślną stronę logowania z /wp-admin na własną
Domyślnie logowanie do wordpress odbywa się za pomocą /wp-admin, warto więc zmienić tą ścieżkę. Nie polecam tutaj instalowania zbędnych wtyczek tylko dodania wpisu do pliku functions.php który zazwyczaj jest w większości motywów w głównym folderze (public_html/wp-content/themes/nasz-motyw).
Wystarczy dodać małą funkcję:
function custom_login_url() { return home_url( '/nowa-sciezka-do-logowania/' ); }add_filter( 'login_url', 'custom_login_url' );
8. Zablokuj możliwość edytowania plików na serwerze
Warto przejść do głównego folderu naszej strony public_html i wyłączyć opcję edytowania plików na serwerze. Wystarczy że w pliku wp-config.php dodasz jedną linię która może wiele zmienić.
define( 'DISALLOW_FILE_EDIT', true );
9. zablokowanie możliwości wykonywania skryptów w uploads oraz includes
gotowy skrypt .htaccess dla wp-content/uploads/upload/.htaccess
<FilesMatch ".(?i:php)$">Order Deny, AllowDeny From All</FilesMatch>
oraz dla gotowy skrypt .htaccess dla wp-includes/.htaccess
<FilesMatch ".(?i:php)$">Order Deny, AllowDeny From All</FilesMatch><Files wp-tinymce.php>Allow From All</Files><Files ms-files.php>Allow From All</Files>
10. Szyfrowanie SSL
większość serwerów pozwala na wygenerowanie sobie darmowego certyfikatu SSL let's encrypt. Jeśli Twój serwer nie ma darmowych certyfikatów let's encrypt warto przekierować swoje DNS'y na cloudflare.com gdzie taki certyfikat bez problemu wygenerujemy.
11. Wyłączenie rejestracji użytkowników - jeśli Twój motyw nie potrzebuje mieć włączonej rejestracji użytkowników warto ją wyłączyć. Znajdziecie taką opcję w panelu wordpress, a dokładnie Ustawienia a następnie szukamy opcji “Członkostwo Każdy może się zarejestrować”.
12. Zablokowanie komentarzy na stronie
Bardzo dużo ataków jest kierowanych przez formularze na naszej stronie oraz same komentarze, możemy się tutaj spodziewać sporo spamu i różnego rodzaju ataków jak np. zapychanie bazy. Stąd wiele osób mających strony na wordpress używa zewnętrznych paczek do komentarzy jak disqus
13. Używanie trudnych haseł
Ważne lecz nie zawsze przestrzegane, pamiętajcie aby zabezpieczeń trudnymi hasłami swoje konta którymi można przejąć stronę. Przy metodach ataku jak brutal force domyślnie słownikiem będzie szło po słowach i liczbach tak więc często proste hasła jak qwe123 czy admin1 itd. będą bez problemu złamane.
14. Skasowanie dodatkowych motywów
Nasza strona wordpress potrzebuje tylko i wyłącznie jeden motyw na którym działa, tak więc wszystkie dodatkowe są dla nas zbędne. Jeśli więc masz startowe motywy lub jakieś inne to warto je skasować, zajmują one niepotrzebnie miejsce, a dodatkowo mogą posłużyć do ataku jeśli zostanie znaleziona luka w takim motywie.
15. Do zabezpieczeń dodałbym również backupy
Warto wykonywać kopie plików swojej strony aby w razie czego mieć do czego wrócić i nie utracić np. danych ze sklepu lub wpisów na naszym blogu. Niektóre hostingi robią backupy naszych plików oraz baz danych, warto wybierając hosting sprawdzić czy wykonuje takie kopie (to nie jest reklama, a jedynie informacja nic z tego nie mam - używam na codzień mydevil.net i tam mam backup plików i baz do 2 tygodni wstecz co jest naprawdę przydatne).
16. Wygenerowanie kluczy jeśli ich nie masz lub jeśli przenosić wordpress np. po ataku
W pliku wp-config znajdziesz sekcję z SALT tam warto wygenerować klucze (zrobisz to w tym miejscu https://api.wordpress.org/secret-key/1.1/salt/ )
17. Sprawdź uprawnienia plików i folderów na koncie FTP. Prawidłowo powinny one mieć dla plików 644 oraz 755 dla folderów. Jedynie wp-config powinien mieć uprawnienia 600 lub 640, takie ustawienie powinno nam polepszyć bezpieczeństwo naszej stronie ale nie jest oczywiście ono wystarczające.
18. Warto również zablokować XML-RCP, bez problemu zablokujesz go z poziomu .htaccess jeśli oczywiście z niego nie korzystasz
19. Włączenie ochrony WAF
jeśli Twój hosting na to pozwala warto włączyć właśnie “antywirusa” na hostingu który będzie również pomagać zabezpieczyć aplikację
20. Ostatnie co przychodzi mi go głowy to zmiana domyślnej metody logowania loginem na adres email
O zabezpieczeniach wordpress ciąg dalszy
Oczywiście nie musisz używać wszystkich zabezpieczeń które są tutaj wypisane, jednak do większości warto się stosować, ponieważ poza bezpieczeństwem potrafią one mieć inne plusy jak np. przyśpieszyć naszą stronę (mowa tutaj np. o wyłączeniu zbędnych wtyczek). Pamiętaj również o kopii zapasowej aby móc zawsze wrócić do stabilnej wersji strony oraz zabezpieczając formularze np. po to aby nie mieć z nich ogromnej ilości spamu :)
Dajcie znać czy znacie jeszcze jakieś inne dobre sposoby na zabezpieczenie strony pisanej na wordpress! Oraz może co sądzicie o tym silniku? Ja osobiście uważam że sam silnik jest naprawdę bardzo dobry, nie idealny ale dobry z pewnością, strona która jest na nim napisana od zera, dobrze zoptymalizowana, bez miliona wtyczek, nie dość że bardzo dobrze działa to jest bezpieczna. Wiele stron które tworzyłem lata temu mają dziś świetny ruch i są w topce na google, dziennie generują kilka set jak nie tysięcy wejść i nic złego się z nimi nie dzieje. Tak więc ze swojego doświadczenia uważam, że stale na wordpressie można tworzyć naprawdę dobre strony które obsłużą wielu użytkowników i nie będą się ciągle wysypywać :)