Zabezpieczanie WordPressa: podstawy

Zabezpieczanie WordPressa
WordPress jest bardzo popularnym narzędziem – szacuje się, że działa na nim ponad 50 milionów stron internetowych. Wzrost popularności idzie niestety w parze ze wzrostem ilości niszczycielskich działań, dokonywanych przez osoby wykorzystujące dziury w źle zabezpieczonych serwisach. Na szczęście można łatwo ochronić się przed takimi atakami (a przynajmniej zmniejszyć ryzyko ich powodzenia) stosując się do kilku prostych zasad.
Bardziej zaawansowanych użytkowników WordPressa proszę o wyrozumiałość – ponieważ tekst ten jest skierowany do osób początkujących, zawarłem w nim wszystkie, nawet najbardziej banalne zalecenia.

Aktualizuj WordPressa, wtyczki i szablony

To najważniejsza zasada – jeśli nie będziemy jej przestrzegali, to możemy darować sobie wszystkie kolejne. Aktualizacje WordPressa nie tylko dodają nowe funkcje, ale poprawiają błędy, w tym te związane z bezpieczeństwem. To samo tyczy się aktualizacji wtyczek i (w mniejszym stopniu) szablonów. Co ważne, należy aktualizować również nieaktywne rozszerzeniatutaj napisałem o tym kilka słów, więc nie będę się powtarzał.

Jeśli obawiamy się (lub – co gorsza – jesteśmy pewni), że nasza strona nie będzie działać poprawnie z najnowszą wersją WordPressa, to powinniśmy jak najszybciej poprosić o pomoc fachowca, który zdiagnozuje i usunie problemy z kompatybilnością. Im dłużej będziemy z tym zwlekać, tym bardziej narażona będzie nasza strona.

Instaluj wtyczki i szablony tylko ze sprawdzonych źródeł

W Internecie pełno jest stron oferujących darmowe szablony i wtyczki. Niestety, nie wszystkim tego typu źródłom można ufać. Często znajdujące się tam produkty zawierają „zaciemniony” (trudny do odczytania) kod, który z reguły zawiera niegroźne linki do strony autora, ale równie dobrze może mieć szkodliwe przeznaczenie.

Najpewniejszym miejscem do pobierania rozszerzeń i motywów dla WordPressa jest oficjalne repozytorium. Trafiające tam wtyczki i szablony przed udostępnieniem przechodzą proces weryfikacyjny, w ramach którego sprawdzane są one między innymi pod kątem występowania w nich złośliwego kodu. Na dodatek z repozytorium korzystają codziennie tysiące użytkowników, którzy bardzo szybko wyłapują i zgłaszają wszelkie problemy. Warto śledzić fora wtyczek, z których korzystamy – to tam najszybciej pojawiają się informacje o błędach czy problemach z bezpieczeństwem.

Jeśli koniecznie chcemy skorzystać z szablonu pochodzącego z niesprawdzonego źródła, warto sprawdzić go za pomocą wtyczki Theme Check (używają jej osoby weryfikujące motywy trafiające do oficjalnego repozytorium). Mimo że część ze zgłaszanych problemów można spokojnie zignorować, to niektóre z nich (na przykład te dotyczące „zaciemnionego” kodu) powinny być dla nas sygnałem, że coś z danym szablonem jest nie tak.

Warto dodać, że serwisy oferujące płatne szablony i wtyczki (takie jak ThemeForest czy CodeCanyon) również dbają o bezpieczeństwo sprzedawanych produktów.

Nie używaj loginu „admin”

WordPress w wersjach niższych niż 3.0 tworzył przy instalacji konto administratora o nazwie „admin”. Od wersji 3.0 użytkownik sam może ustalić nazwę głównego konta, tym niemniej jednak w Internecie sporo jest stron, które istniały znacznie wcześniej i których administratorzy do dzisiaj zostawili domyślny login. Niestety, również nowi użytkownicy często korzystają z nazwy „admin”.

Problem z loginem „admin” nie jest może jakoś szczególnie niebezpieczny (szczególnie jeśli zastosujemy się do kolejnych zaleceń), ale dla świętego spokoju lepiej go nie używać.

Używaj silnego hasła

Żadne zabezpieczenia nie będą skuteczne jeśli będziemy używać słabego, łatwego do złamania hasła. Atakujący korzystając z metody słownikowej (używając listy popularnych haseł) ma spore szanse na „odgadnięcie” naszego hasła, tak więc starajmy się wymyślić możliwie trudne do odgadnięcia. Warto też od czasu do czasu je zmienić. Ważne jest, aby nie korzystać z tego samego hasła w wielu miejscach – dla każdego konta powinniśmy ustalić inne. To zalecenie dotyczy z resztą nie tylko WordPressa, ale każdej naszej aktywności w Internecie.

Ogranicz ilość prób logowania

Aby uniemożliwić ataki słownikowe warto ograniczyć ilość prób logowania. Można to zrobić na przykład za pomocą darmowej wtyczki Limit Login Attempts, która dodatkowo pozwala na zapisywanie informacji o wszystkich próbach logowania.

Wyłącz tryb debugowania

Jeśli nie włączaliśmy nigdy debugowania, to możemy pominąć to zalecenie. Jeśli jednak pracowaliśmy nad naszym serwisem z włączonym trybem debugowania (co jest zalecane), to po przeniesieniu strony na publicznie dostępny serwer należy go bezwzględnie wyłączyć.

Aby to zrobić poszukajmy w pliku wp-config.php następującej linii:

i usuńmy ją. Jeśli nie możemy jej znaleźć, to oznacza to, że tryb debugowania nie był włączony.

Zmień domyślny prefiks tabel

Podczas instalacji WordPress pozwala na ustalenie prefiksu nazw tabel w bazie danych. Domyślnym prefiksem jest „wp_”. Teoretycznie funkcja ta istnieje po to, abyśmy mogli w jednej bazie danych zainstalować kilka instancji WordPressa, ale dobrze jest ustawić własny prefiks aby utrudnić nieco atakującemu ustalenie nazw tabel w naszej bazie.

Wyłącz możliwość edycji plików w panelu administracyjnym

Panel administracyjny WordPressa posiada wbudowany prosty edytor motywów i wtyczek. Jeśli (odpukać!) komuś, kto ma złe zamiary, uda się zalogować do panelu, to będzie mógł za jego pomocą dowolnie zmodyfikować kod naszej strony. Warto więc wyłączyć wbudowany edytor, bo nam i tak na wiele się on nie przyda (praca w nim zdecydowanie nie jest komfortowa). Aby to zrobić wystarczy do pliku wp-config.php dodać następującą linię:

Regularnie wykonuj kopie zapasowe

Większość firm hostingowych regularnie tworzy kopie zapasowe kont swoich klientów. Mimo to zdecydowanie polecam wykonywanie własnego backupu danych. Można do tego wykorzystać darmową wtyczkę BackWPup, która automatycznie lub na żądanie wykona kopię plików naszej strony oraz bazy danych, a następnie prześle ją we wskazane przez nas miejsce. Ponieważ trzymanie pliku z kopią danych na serwerze, na którym stoi nasza strona, to proszenie się o kłopoty (w przypadku awarii dysku tracimy zarówno stronę, jak i jej kopie), warto przesłać go na jakiś zewnętrzny serwer lub na dysk naszego komputera. BackWPup umożliwia automatyczne przesłanie archiwum na wybrany serwer FTP, na wskazany adres e-mail lub do jednej z obsługiwanych „chmur” (Dropbox, Amazon S3, Google Storage, Microsoft Azure, RackSpaceCloud lub SugarSync).

Niezależnie od tego jak często na naszej stronie pojawiają się nowe treści, sugeruję wykonywanie kopii codziennie. W razie jakiegoś problemu z naszą stroną będzie istniała szansa, że któreś z naszych archiwów zawiera „czyste” pliki.

Korzystaj ze sprawdzonej firmy hostingowej

Łatwiej powiedzieć niż wykonać. Ilość istniejących w Polsce firm hostingowych jest przytłaczająca i naprawdę ciężko jest wybrać tę jedną, z której usług będziemy korzystać i której powierzymy opiekę nad naszą stroną – tym bardziej że wielkość i wieloletnia obecność na rynku wcale nie gwarantują jakości. Jeśli nie mamy kogoś, kto bazując na co najmniej kilkuletnim doświadczeniu jest w stanie polecić nam konkretnego usługodawcę, warto przejrzeć fora dyskusyjne poświęcone hostingowi (na przykład dział Hosting i domeny w serwisie WebHelp).

Z punktu widzenia bezpieczeństwa najważniejsze są regularne aktualizacje oprogramowania na serwerach oraz doświadczeni administratorzy. Niestety, o ile tę pierwszą rzecz łatwo zweryfikować w czasie bezpłatnego okresu testowego, o tyle tę drugą będziemy mieli okazję sprawdzić dopiero w razie ewentualnych poważniejszych problemów.

Regularnie sprawdzaj swoją stronę

Większość złośliwych skryptów atakujących strony oparte na WordPressie nie ma na celu zniszczenia zdobytego serwisu. Z reguły doklejają one do stron kod przekierowujący użytkowników na różne dziwne witryny lub ładujący złośliwe strony do ukrytej ramki iframe. Często jest to robione w taki sposób, że ani użytkownicy, ani właściciel zainfekowanego serwisu nie są w ogóle świadomi, że coś jest nie tak. Dlatego tak ważne jest regularne skanowanie strony pod kątem występowania na niej złośliwego kodu.

Serwis Sucuri udostępnia bezpłatny skaner online – wystarczy wpisać adres naszej strony i nacisnąć przycisk Scan Website, aby po chwili otrzymać raport na temat naszej witryny. Można również skorzystać z darmowej wtyczki Sucuri Scanner, która wykona ten sam test w panelu administracyjnym naszej strony.

Nic nie stoi na przeszkodzie aby wypróbować inne wtyczki skanujące naszą stronę pod kątem występowania na niej złośliwego kodu. Niektóre z nich wskażą nam również słabe punkty naszego serwisu, takie jak brak odpowiednich uprawnień dla katalogów i plików czy problemy z konfiguracją serwera.

Sprawdź uprawnienia katalogów

Ogólna zasada jest taka, że katalogi powinny mieć ustawione uprawnienia 755 lub 750, a pliki 644 lub 640. Plik wp-config.php może mieć ustawione nieco bardziej restrykcyjne uprawnienia 600.

Brzmi to niezrozumiale? Na szczęście na większości serwerów katalogi i pliki domyślnie dostają takie właśnie uprawnienia. Jeśli jednak mamy wątpliwości co do poprawności uprawnień katalogów i plików w naszym serwisie, zawsze możemy skontaktować się z firmą hostingową utrzymującą nasz serwer i poprosić o pomoc (niech to będzie test na jakość obsługi klienta).

Czego nie ma sensu robić?

Jest kilka czynności, opisywanych często jako poprawiające bezpieczeństwo WordPressa, których wbrew pozorom nie ma sensu wykonywać. Oczywiście zastosowanie się do tych rad w niczym nie zaszkodzi, ale również nie pomoże.

Pierwszą z bezsensownych rzeczy jest usuwanie informacji o używanej wersji WordPressa z nagłówka strony (znacznik „generator”). Jest to bez sensu z dwóch powodów. Po pierwsze dlatego, że złośliwe skrypty najczęściej w ogóle ignorują tę informację i po prostu sprawdzają witrynę pod kątem występowania każdej z luk. Po drugie dlatego, że istnieje co najmniej kilka innych sposobów na sprawdzenie używanej na stronie wersji WordPressa.

Drugą bezcelową czynnością jest zmiana nazwy katalogu wp-content oraz katalogów wtyczek i szablonów (odpowiednio wp-content/pluginswp-content/themes). Jest to bez sensu (z punktu widzenia bezpieczeństwa – możemy chcieć to zrobić z zupełnie innych powodów), ponieważ większość wtyczek dodaje do naszej strony pliki z arkuszami stylów CSS lub skryptami JavaScript, przez co bardzo łatwo jest sprawdzić gdzie przenieśliśmy te katalogi.

Moja strona została zainfekowana! Co teraz?!

Przede wszystkim bez paniki – trzeba podjąć szybkie, ale jednocześnie przemyślane działania, bo reagując nerwowo możemy tylko pogorszyć sytuację. Najpierw spróbujmy samodzielnie przywrócić naszą stronę do działania. Jeśli nie czujemy się na siłach albo nasze działania nie odniosły oczekiwanego skutku, to niestety nie pozostaje nam nic innego jak zwrócić się o pomoc do bardziej doświadczonych osób.

Zdjęcie: Armin Hanisch

Bezpośredni link

  • Rep

    Witam.

    Odnośnie katalogu wp_config.php

    1) Plik ma osiem sekretnych, unikatowych kluczy.
    Należy je zmienić dzięki stronie serwisu WordPress, który generuje tajne klucze:
    https://api.wordpress.org/secret-key/1.1/salt/

    Dlaczego>? -> te klucze są bardzo ważne. Pomagają w szyfrowaniu haseł w w bazie danych.

    Ps. Poz mianie kluczy wszystkie istniejące ciasteczka staną się nieważne.
    Użytkownicy korzystający z bloga WordPress w danej chwili będą musieli
    się ponownie zalogować.

    2) Plik zawiera również inne bardzo ważne informacje. Np. bezcenne dane logowania
    do bazy danych. WordPress
    od wersji 2.6 w góre nie nie ma problemów po przeniesieniu katalogu wp_config.php
    na inne miejsce docelowe.

    Ps. Gdy wejdzie ktoś w posiadanie hasła blogu WordPress to przynajmniej nie dostanie się się do bazy danych bo nie
    będzie miał miał dostępu do tego pliku.

  • Rep

    Witam
    Dlaczego należy usunąć tryb debugowania?

    • Ponieważ w trybie debugowanie wyświetlane są wszystkie błędy, ostrzeżenia i informacje. Oczywiście, nie powinno ich być w ogóle, ale generalnie w działającym serwisie komunikaty te powinny być ukryte.

  • Wygląda na to, że wtyczka Limit Login Attempts nie jest już aktualizowana, polecasz ją nadal czy może lepiej skorzystać z innej? Poza tym artykuł na pewno przydatny, mimo upływu ponad dwóch lat od publikacji. Serwisu Sucuri nie znałem – będę korzystał.

    • Wtyczka ta wciąż się sprawdza, ale nie zaszkodzi poszukać innej, robiącej to samo, ale aktualizowanej (chociaż sam nie wiem co w tak prostej wtyczce można aktualizować ;)). Od czasu publikacji tego tekstu powstało wiele narzędzi poprawiających bezpieczeństwo WP, w tym bardziej kompleksowe, jak WordFence czy iThemes Security.

  • Miałeś chyba na myśli motywy a nie szablony. 😛

  • Mar

    Witam, mam pytanie dotyczące uprawnień do plików i folderów. Po masowej zmianie uprawnień co trzeba zrobić aby nowe pliki i foldery otrzymywały bezpieczniejsze uprawnienia – 755/644? Czy jest to możliwe?

    • Spróbuj dodać takie dwie linie do pliku wp-config.php:

      define(‚FS_CHMOD_DIR’, (0755 & ~ umask()));
      define(‚FS_CHMOD_FILE’, (0644 & ~ umask()));