publikacja: 25 września 2008, 3:26; autor: Szymon Skulimowski http://wpninja.pl/artykuly/11-sposobow-na-zabezpieczenie-wordpressa/

11 sposobów na zabezpieczenie WordPressa

11 sposobów na zabezpieczenie WordPressa

Koszmar każdego WordPressowca dosięgnął wczoraj Antyweba. Jego blog został „zhakierowany” (przez Grzegorza). W mojej opinii „atak” miał charakter żartobliwy a Grzegorz zapewne chciał jedynie zwrócić uwagę posiadaczy WP na istniejące luki i jednocześnie zachęcić do zwiększania poziomu bezpieczeństwa.

W poniższym artykule przedstawię podstawowe sposoby, które zwiększą bezpieczeństwo naszego bloga. Lektura obowiązkowa! :-)

1. Aktualizuj skrypt

Wykryto nową wersję

Wykryto nową wersję

Nowe wersje WordPressa wypuszczane są stosunkowo często (większe wydania raz na 3-5 miesięcy, poprawki miesiąc później). Powinieneś zdać sobie sprawę, że nowa wersja nie zawiera tylko nowych funkcji ale także poprawki starych błędów (często krytycznych) oraz lepsze zabezpieczenia.

O nowej wersji powiadomi Cię sam WordPress - w panelu administracyjnym, tuż pod główną belką nawigacyjną pojawi się wówczas żółty boks ze stosowną informacją. Jeśli to dla Ciebie za mało to możesz jeszcze zapisać do swojego czytnika kanał RSS developerów.

2. Rób kopie bezpieczeństwa

Wtyczka WP-DB-Backup

Wtyczka WP-DB-Backup

Kopie powinieneś wykonywać cyklicznie co pewien okres czasu (w zależności od popularności bloga). Kopia taka powinna zawierać wszystkie pliki oraz bazy danych.

  • Kopię plików możesz wykonać poprzez połączenie z serwerem (FTP, SSH itp.) lub poprzez wywołanie specjalnej opcji w panelu administracyjnym serwera (niestety nie wszystkie firmy hostingowe oferują taką możliwość).
  • Kopię bazy danych możesz wykonać np. poprzez phpMyAdmina (eksport) lub wtyczkę specjalną wtyczkę, która pomoże Ci zautomatyzować cały proces.

Posiadając konto w profesjonalnej firmie hostingowej możesz liczyć także na automatyczny backup robiony przez administrację.

3. Usuń informację o używanej wersji skryptu

WordPress wyświetla w nagłówku informację o wersji skryptu:

<meta name="generator" content="WordPress x.x.x" />
Wersja skryptu jak na dłoni

Wersja skryptu jak na dłoni

Aby usunąć tą informację powinieneś otworzyć plik functions.php (lub go utworzyć jeśli go nie ma), który znajduje się w katalogu skórki, i dodać w nim następujące polecenie:

<?php remove_action('wp_head', 'wp_generator'); ?>

Warto sprawdzić jeszcze zawartość pliku header.php. Możliwe bowiem, że autor skórki wstawił dodatkowy zapis w następującej postaci:

<meta name=“generator” content=“WordPress <?php bloginfo(’version’) ?>” />

Jeśli coś takiego znajdziesz - usuń koniecznie.

4. Ogranicz dostęp do katalogu wp-admin

Ogranicz dostęp do katalogu tylko dla jednego numeru IP. Zrobisz to ustalając odpowiednie wpisy w pliku .htaccess:

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Example Access Control"
AuthType Basic
 
order deny,allow
deny from all
allow from xx.xx.xxx.xx

Plik należy umieścić w katalogu wp-admin (a nie w głównym). W miejsce xx.xx.xxx.xx wpisujemy nasz adres IP. Należy tutaj dodać, że sposób zadziała gdy mamy stały adres IP, przy zmiennym (np. Neostrada) nie osiągniemy zamierzonego efektu.

Jak sprawdzić czy blokada faktycznie działa? Spróbuj zalogować się do panelu administracyjnego z komputera o innym IP lub wejdź przez dowolną bramkę proxy - np. Anonymouse.

5. Nie pozwól na wyświetlanie zawartości katalogu wtyczek i skórek

Ogólnodostępna lista skórek

Ogólnodostępna lista skórek

Informacja o tym jakich używasz wtyczek może być źródłem cennych danych dla wszelakich szkodników sieciowych. Wtyczki są bowiem z reguły tworzone przez fanów a nie przez programistów WordPressa i mogą zawierać błędy.

Aby zapobiec wyświetleniu zawartości katalogu należy umieścić w nim pusty plik index.html.

6. Używaj bezpieczniejszego połączenia z serwerem

Połączenie przez SSH

Połączenie przez SSH

Jeśli Twój hosting udostępnia (często bezpłatnie) możliwość łączenia się z serwerem przez SSH, wykorzystaj to. Przesyłane w tej sposób dane dostępowe w postaci loginu i hasła będą dużo bezpieczniejsze.

7. Zabezpiecz kluczowe foldery przed indeksacją

Zaindeksowane katalogi wtyczek

Zaindeksowane katalogi wtyczek

W katalogu głównym stwórz plik robots.txt i za jego pomocą ogranicz dostęp robotów wyszukiwarek do kluczowych folderów.

Zobacz przykład pliku robots.txt.

8. Zmień standardowy login administratora (admin)

Zmiana loginu

Zmiana loginu

Połącz się z bazą danych np. poprzez phpMyAdmina, odszukaj tabelę wp_users a w niej rekord z nazwą „admin”. Uzupełnij pola „user_login” oraz „user_nicename” o nową nazwę loginu.

9. Wyłącz możliwość rejestracji użytkowników

Wyłączenie rejestracji

Wyłączenie rejestracji

(Oczywiście jeśli nie jest Ci ona do niczego potrzebna. :-))

W panelu administracyjnym wejdź w zakładkę ustawienia-ogólne i odznacz checkboks znajdujący się przy „funkcje użytkowników” - „każdy może się zarejestrować”.

10. Dbaj o podstawowe zasady bezpieczeństwa

  • zabezpiecz dostęp do swojego konta silnym hasłem,
  • nie używaj jednego hasła do wszystkich swoich kont w internecie,
  • nie korzystaj z ogólnie dostępnych komputerów a jeśli już to po pracy dokładnie usuń wszystkie prywatne dane zgromadzone przez przeglądarkę,
  • korzystaj z bezpiecznych przeglądarek (np. Firefox, Opera),
  • używaj oprogramowania antywirusowego.

11. Twój własny sposób na zabezpieczenie

Jeśli znasz jeszcze jakiś inny sposób na zabezpieczenie WordPressa to podziel się nim z nami w komentarzach do artykułu. :-)

Podobał się artykuł? Dodaj kanał RSS / Atom do swojego czytnika lub zapisz się na bezpłatny newsletter i dołącz do grona stałych czytelników.

Komentarze (58)

  1. Tomek Goździewicz Tomek Goździewicz 1226 dni temu:

    Znam i się dzielę, tzn. się podzieliłem kiedyś dawno temu u siebie: http://bloggerpl.com/2007/09/zabezpiecz-swoj-blog/ chociaż to w zasadzie to samo tylko innymi słowy ;)

    Tak się właśnie spodziewałem, że ktoś napisze o bezpieczeństwie WP w kontekście „ataku” na Antyweb ;)

    odpowiedz
  2. aniec2 aniec2 1226 dni temu:

    Bardzo dobry art! Rewelacja. O to własnie mi chodzilo, piszac komentarz nie spodziewałem sie, że tak szybko ktoś zareaguje a tu prosze. WP Ninja działa z zaskoczenia. Pozdrawiam

    odpowiedz
  3. palmiak palmiak 1226 dni temu:

    Co do tej najnowszej wersji to tak nie do końca. Były wpadki, kiedy programistą się coś omsknęło i dziura się pojawiała w apdejcie. Najlepiej podejść do tego zdroworozsądkowo i nim apdejta zrobimy poczekajmy trochę czasu i zobaczmy jak środowisko, które już zainstalowało apdejta, będzie się wypowiadać. Reguła o tym, że jeżeli coś nie jest zepsute to nie warto naprawiać ma sens ;)

    A i tak najbezpieczniejszyesą regularne backupy, które siedzą na dysku.

    odpowiedz
  4. kamil kamil 1226 dni temu:
    <meta name=“generator” content=“WordPress ” />

    Usuwanie tego nie wpłynie na SEO? Po tym Google rozpoznaje worrdpress‘a? ja usunąłem tylko „version” .

    odpowiedz
  5. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    @Palmiak,
    Masz rację, wpadki zdarzają się każdemu ale są to sporadyczne przypadki.

    Jeśli poprawka nie likwiduje żadnych błędów krytycznych to pewnie można poczekać na ewentualną reakcję blogosfery ale nie tak długo jak to zrobił Antyweb (ponad 3 miesiące). ;-)

    I, co ważne, nie można polegać tylko na jednej metodzie zabezpieczenia. Gdyby Antyweb nawet nie zaktualizował skryptu ale zastosował się do sposobu 3. (usunięcie informacji o numerze wersji) lub 4. (blokada panela na IP) lub 8. (zmiana loginu administratora) lub 9. (wyłączenie rejestracji) to pewnie nikt by się nie włamał (a przynajmniej nie tak łatwo i nie w ten sposób).

    Wniosek: sposoby zabezpieczenia trzeba łączyć.

    odpowiedz
  6. kamil kamil 1226 dni temu:

    @WPNinja,
    Co do IP to można dodać zakres z gwiazdkami prawda?

    odpowiedz
  7. Marcin Marcin 1226 dni temu:

    Temat rzeka pisze się o tym cały czas :D
    http://iworks.pl/przedstaw-sie-zostaniesz-zhakowany/

    No i to, że usuwanie wersji z plików szablonów … to … kosmetyka:
    http://iworks.pl/jeszcze-o-bezpieczenstwie-wordpressa/

    odpowiedz
  8. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    @kamil,

    Co do IP to można dodać zakres z gwiazdkami prawda?

    Nie znam się na tym dobrze ale wyczytałem, że można dodać zakres ale nie gwiazdkami tylko kropkami. I tak np.
    192.168.1. będzie miał zakres 192.168.1.xxx
    192.168. będzie miał zakres 192.168.xxx.xxx
    192. będzie miał zakres 192.xxx.xxx.xxx

    Trzeba dokopać się do podręcznika .htaccess i sprawdzić.

    Usuwanie tego nie wpłynie na SEO? Po tym Google rozpoznaje worrdpress‘a? ja usunąłem tylko „version” .

    Z tego co mi wiadomo nie będzie to miało żadnego wpływu. Wątpię żeby Google rozpoznawał skrypt WordPressa a jeśli nawet to z tego powodu traktował go jakoś inaczej.

    odpowiedz
  9. Magda Magda 1226 dni temu:

    świetny artykuł, świetne rady :)
    Dzięki

    odpowiedz
  10. kamil kamil 1226 dni temu:

    Moje Ip Pplusa w tej chwili to: 77.113.101.127 zatem powinno działać jako 77.xxx.xxx.xxx nie działa .

    odpowiedz
  11. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    @kamil,
    Sprawdziłem u siebie i u mnie działa. W pliku .htaccess wpisałeś 77. jako numer IP? Sprawdź też wcześniej czy zabezpieczenie działa Ci z pełnym adresem.

    odpowiedz
  12. kamil kamil 1226 dni temu:

    Z pełnym działa.

    odpowiedz
  13. kamil kamil 1226 dni temu:

    Ok, tak zadziałało sprawdź czy możesz teraz wejść :) ja mogę ty nie powinieneś mieć takiej możliwości. Pozdrawiam.

    odpowiedz
  14. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    Nie mogę, pokazuje mi się eror404. :-)

    odpowiedz
  15. kamil kamil 1226 dni temu:

    Haker musiałby kupić simdatę:) bo takiego proxy nie znajdzie:P chyba, że samo korzysta z Iplusa:P

    odpowiedz
  16. ADIHC1 ADIHC1 1226 dni temu:

    A miałem wczoraj pisać w komentarzach na antywebie, że pewnie pojawi się odpowiedni art (dot. zabezpieczenia WP) na WPNinja i nie myliłem się - na pewno się przyda ; )

    odpowiedz
  17. Ravicious Ravicious 1226 dni temu:

    Usunąłem informację o wersji, ale punkt 4. nie jest dla mnie - zbyt często wykonuję jakieś czynności związane z blogiem u znajomego.

    odpowiedz
  18. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    @Ravicious,

    ale punkt 4. nie jest dla mnie - zbyt często wykonuję jakieś czynności związane z blogiem u znajomego

    Możesz tam wpisać kilka adresów IP:
    allow from xx.xx.xxx.xx
    allow from xx.xx.xxx.xx
    allow from xx.xx.xxx.xx
    (...)

    odpowiedz
  19. kamil kamil 1226 dni temu:

    @Ravicious:
    Dodanie nowego wpisu ip via ftp to 2 minuty:)

    odpowiedz
  20. Ravicious Ravicious 1226 dni temu:

    Czyli mogę nad tym pomyśleć ;) Dzięki.

    odpowiedz
  21. dzg dzg 1226 dni temu:

    a jak ma się zmienne ip? ;>

    odpowiedz
  22. aniec2 aniec2 1226 dni temu:

    to się wpisuje
    „zmienne.xxx.xxx.xxx.’ :P

    odpowiedz
  23. mario mario 1226 dni temu:

    zobacz jak ten „hakier” zerznął od ciebie artykuł
    http://www.kminek.pl/antyweb-zhakierowany/

    i to ma byc znawca, śmiech na sali

    odpowiedz
  24. kamil kamil 1226 dni temu:

    Ale plagiat:) Tragedia.

    odpowiedz
  25. Szymon Skulimowski Szymon Skulimowski 1226 dni temu:

    E tam, przesadzacie :-). Ja tej wiedzy nie wziąłem z kosmosu, Grzegorz pewnie korzystał z podobnych źródeł lub bazował na podobnych doświadczeniach…

    odpowiedz
  26. kamil kamil 1226 dni temu:

    :P

    odpowiedz
  27. mario mario 1226 dni temu:

    no tak, ale opracowales sam, sam napisales, a on nie dosc ze sie wlamal na antyweba i okrzyknal Hazana wordperssowym nobem to terasz szpanuje wiedza ktora zaczerpna od ciebie z bloga juz po wlamaniu.
    dla mnie ten czlowiek to zwykla kpina nie hacker ani znawca

    odpowiedz
  28. m1chu m1chu 1226 dni temu:

    Witam,

    Co do punktu trzeciego warto wspomnieć o usunięciu wersji skryptu także z kodu subskrypcji RSS/RSS2/Atom/RDF. W pliku general-template.php należy zmodyfikować funkcję get_the_generator ( $type ) poprzez usunięcie get_bloginfo_rss( ‘version’ ).

    Pozdrawiam,
    m1chu

    odpowiedz
  29. Szymon Skulimowski Szymon Skulimowski 1225 dni temu:

    Słuszna uwaga m1chu - dzięki :-).

    odpowiedz
  30. taniaodziez.com.pl taniaodziez.com.pl 1212 dni temu:

    Dziekuje za informacje

    odpowiedz
  31. kavillock kavillock 1207 dni temu:

    a co jeśli się niema wartości z punktu 8. Zmień standardowy login administratora (admin)

    odpowiedz
  32. Szymon Skulimowski Szymon Skulimowski 1207 dni temu:

    Tzn? Nie rozumiem zbytnio pytania.

    odpowiedz
  33. Lukasz Lukasz 1158 dni temu:

    Skorzystałem z opcji nr 4 u siebie, o ile przy wpisaniu adres/wp-admin pojawia sie 403 i haslo o zablokowanym dostepie to przy adres/wp-login.php pojawia sie juz panel administracyjny (mam na mysli dostep przez IP spoza listy), czy to normalna sytuacja?

    odpowiedz
    1. Szymon Skulimowski Szymon Skulimowski 1158 dni temu:

      Tak, to normalna sytuacja. wp-login i tak później przenosi do wp-admin więc i tak się nie zalogujesz (z innego niż podanego w pliku .htaccess IP).

      odpowiedz
  34. Lukasz Lukasz 1158 dni temu:

    Dzieki

    odpowiedz
  35. NGrafik NGrafik 1138 dni temu:

    Dzięki.

    odpowiedz
  36. Łukasz Więcek Łukasz Więcek 1096 dni temu:

    Co do kroku 8 - skleiłem małą wtyczkę, która pozwala bezboleśnie zmienić login admina. To z głównie z myślą o tych mniej technicznych użytkownikach ;)

    Wtyczka: http://wiecek.biz/projekty/wordpress/admin-renamer

    odpowiedz
  37. ma ma 1096 dni temu:

    Zastanawiam się, na ile bezpieczne jest udostępnienie opcji rejestracji użytkowników. To pozwala na zbudowanie nowych funkcjonalności, ale też pewnie generuje na starcie problemy (SPAM, włamania). Jak bezpieczny jest panel użytkownika w WP?

    odpowiedz
  38. Szymon Skulimowski Szymon Skulimowski 1095 dni temu:

    @Łukasz,

    Co do kroku 8 - skleiłem małą wtyczkę, która pozwala bezboleśnie zmienić login admina.

    Świetna sprawa. Ręczne grzebanie w bazie danych nigdy nie należało do najprzyjemniejszych rzeczy :-).

    odpowiedz
  39. me@djohnsc me@djohnsc 1090 dni temu:

    Witam

    Co do kroku 3 w pliku functions.php, w folderze z skórką NIE mam nic związanego z

    W żadnej skórce tego nie mam, aktualnie używam colorvoid.
    Więc co zrobić? A i gdzie wpisać w tym kodzie ?????

    odpowiedz
  40. me@djohnsc me@djohnsc 1090 dni temu:

    Sorki za 2 koment, ale też nie mam pliku .htaccess

    Używam wersji 2.7 i jak zrobić te dwa kroki?

    Z góry dziękuję za pomoc ;)

    odpowiedz
  41. Szymon Skulimowski Szymon Skulimowski 1089 dni temu:

    Jeśli nie posiadasz plików functions.php lub .htaccess to zawsze możesz stworzyć je ręcznie.

    odpowiedz
  42. palmiak palmiak 1089 dni temu:

    Co do .htaccess to może nie tyle co go nie masz co jest ukryty. Uważaj, żebyś potem się nie zdziwił, że Ci ładne urle przestały działać

    odpowiedz
  43. wojTrek wojTrek 1044 dni temu:

    A ja sobie teraz odpocznę.
    Jutro wezmę się do naprawiania szkód, które spowodowało korzystanie z tego poradnika. Wiem, ze to pewnie moja wina, ale naprawdę nie wiem gdzie popełniłem błąd. Może to wina skórki, która nie pozwala na modyfikacje czy może coś innego. Faktem jest, ze nie mogę się zalogować.
    Wezmę i sobie odpocznę. Albo nie, zepsuję następną stronę.

    odpowiedz
  44. wojTrek wojTrek 1043 dni temu:

    functions.php
    To jest plik odpowiedzialny za wszystkie problemy. Przywrócenie oryginału przywróciło funkcjonalność witryny.
    Pytanie: czy to może być wina tej skórki, która w zamyśle na każdej stronie wyświetla informacje o sobie? Rzućcie proszę okiem.

    odpowiedz
  45. Łukasz Więcek Łukasz Więcek 1043 dni temu:

    @wojTrek - przede wszystkim - którą wersję WP masz?

    odpowiedz
  46. wojTrek wojTrek 1043 dni temu:

    2.7.1
    Styl: Ahren Ahimsa

    odpowiedz
  47. Wojtek Wojtek 998 dni temu:

    Tu tak trochę przysiadło. U mnie wszystko O.K. Z problemami radzę sobie na bieżąco. Wtyczki problematyczne omijam szeroki lukiem.
    Moje wyczyny podobają się na tyle, że mam problemy z wyrabianiem się:-)

    odpowiedz
  48. adad adad 960 dni temu:

    Wpis dawno dodany, ale mam takie pytanie: dlaczego próba zabezpieczenia katalogu wp-admin hasłem kończy się tym, że gdy chce wejść do /wp-admin wyświetla się błąd.

    Oraz jak zmienić lokalizację /wp-admin oraz config.php?

    odpowiedz
  49. tomg tomg 959 dni temu:

    w WP 2.8 informacja o wersji jest w wp-includes/general-template.php - function get_the_generator. Przeoczyłem i od razu coś chciało zaspamować.
    Czy stosujecie jeszcze inne zabezpieczenia, niż te tutaj opisane. Np instalacja w innym katalogu niż defaultowy, zmiana prefixu bazy?

    odpowiedz
  50. CyPeK CyPeK 827 dni temu:

    Aby uchronić się przed atakiem typu SQL-injection należy zmienić standardowy prefix wp_ w bazie danych na jakiś niestandardowy, np.: dr4Tc2_ - coś takiego zdecydowanie utrudni życie napastnikowi a w 99,9% zniechęci go podejmowania tego typu ataku.

    odpowiedz
  51. macias macias 263 dni temu:

    Hej,

    fajny art - dodałem do zakładki. Ja dodatkowo zabezpieczam swoje stronki zmieniają domyślny prefiks dla tabel w bazie danych. Domyślnie jest zawsze wp_ .

    odpowiedz
  52. Daniel Daniel 103 dni temu:

    Hej

    Super przydatny artykuł i mam pytanie.

    Przed instalacją bezprzewodowego internetu .htaccess działał prawidłowo, a teraz nie moge się zalogować do panelu zmieniając i wprowadzając nowe IP które mam w cmg - ipconfig, wiesz może co jest przyczyną?

    odpowiedz
    1. Szymon Skulimowski Szymon Skulimowski 101 dni temu:

      Porównywałeś może otrzymany w ten sposób IP np. ze stroną http://whatismyipaddress.com/ ?

      odpowiedz
    2. Daniel Daniel 100 dni temu:

      Dziękuję. Niby prosta rzecz, a tu adres IP zły wpisałem:)

      odpowiedz
  53. Radek Słowik Radek Słowik 101 dni temu:

    Super art :) Takie rzeczy to podstawa. Oprócz punktu trzeciego polecałbym jeszcze wywalenie pliku readme.html z głównego katalogu instalacji - w nim też zawarta jest informacja na temat wersji WordPressa.

    odpowiedz
  54. Kitek Kitek 25 dni temu:

    Poza waszymi powyższymi uwagi, dorzucę coś od siebie.
    Ja mam taką zasadę, a wywodzi się z pracy - zmieniam hasło co x dni - a wymusza to system.
    Jest to upierdliwe - trudno ma być bezpiecznie.
    Tak polityka bezpieczeństwa pkt 8..

    odpowiedz
  55. PHPworker PHPworker 17 dni temu:

    Bardzo fajny merytoryczny artykuł - właśnie walczę z dwoma WP które uległy hakerom - dość gładko poszło mi usunięcie złośliwego kodu, a teraz wprowadzam zmiany opisane wyżej. Mam nadzieję, że to wystarczy na przyszłość.

    PS. jest sporo bardzo podobnych artykułów pisanych po angielsku - to a propos dyskusji powyżej - nie sądzę aby to był problem dla kogokolwiek

    odpowiedz

Dodaj własny komentarz

Odnośniki z innych stron (3)

Lista innych stron, które w jakiś sposób odnoszą się do opublikowanej tutaj treści:

  1. Zmiana podpisu w komentarzach

    […] które są kombinacją uzupełnionych wcześniej pól (nazwa użytkownika jest wygaszona ponieważ można ją zmienić tylko z poziomu bazy […]

  2. Bezpieczny blog – WordPress « inzaghi89 weblog

    […] jest zabezpieczyć swoje “dane” w możliwie najlepszy sposób. WPNinja opisał 11 sposobów na zabezpieczenie bloga – ja… postanowiłem je zebrać u siebie w celu odświeżenia tematu zabezpieczeń […]

  3. Automatyczne tworzenie kopii zapasowej WordPressa | WPNinja

    […] zapasowa, w przeciwieństwie do innych typów zabezpieczeń, nie ochroni przed włamaniem, nieumyślnym skasowaniem zawartości, spaleniem dysku w serwerowni […]