publikacja: 25 września 2008, 3:26; autor: Szymon Skulimowski http://wpninja.pl/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ę WP-DB-Backup (potrafi ona m.in. automatycznie robić kopię i wysyłać ją na wskazany adres e-mail).

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. :-)

Komentarze (51)

  1. Tomek Goździewicz (25 września 2008, 4:07) #:

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

  2. aniec2 (25 września 2008, 9:44) #:

    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

  3. palmiak (25 września 2008, 11:44) #:

    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.

  4. kamil (25 września 2008, 13:03) #:
    <meta name=“generator” content=“WordPress ” />

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

  5. Szymon Skulimowski (25 września 2008, 13:06) #:

    @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ć.

  6. kamil (25 września 2008, 13:09) #:

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

  7. Marcin (25 września 2008, 13:20) #:

    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/

  8. Szymon Skulimowski (25 września 2008, 13:28) #:

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

  9. Magda (25 września 2008, 13:33) #:

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

  10. kamil (25 września 2008, 13:39) #:

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

  11. Szymon Skulimowski (25 września 2008, 13:46) #:

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

  12. kamil (25 września 2008, 13:50) #:

    Z pełnym działa.

  13. kamil (25 września 2008, 13:52) #:

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

  14. Szymon Skulimowski (25 września 2008, 13:56) #:

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

  15. kamil (25 września 2008, 14:07) #:

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

  16. ADIHC1 (25 września 2008, 15:01) #:

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

  17. Ravicious (25 września 2008, 16:00) #:

    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.

  18. Szymon Skulimowski (25 września 2008, 16:07) #:

    @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
    (...)

  19. kamil (25 września 2008, 18:22) #:

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

  20. Ravicious (25 września 2008, 18:53) #:

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

  21. dzg (25 września 2008, 20:07) #:

    a jak ma się zmienne ip? ;>

  22. aniec2 (25 września 2008, 20:48) #:

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

  23. mario (25 września 2008, 21:18) #:

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

    i to ma byc znawca, śmiech na sali

  24. kamil (25 września 2008, 21:49) #:

    Ale plagiat:) Tragedia.

  25. Szymon Skulimowski (25 września 2008, 22:17) #:

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

  26. kamil (25 września 2008, 22:19) #:

    :P

  27. mario (25 września 2008, 22:54) #:

    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

  28. m1chu (26 września 2008, 0:19) #:

    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

  29. Szymon Skulimowski (26 września 2008, 15:58) #:

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

  30. taniaodziez.com.pl (9 października 2008, 23:28) #:

    Dziekuje za informacje

  31. kavillock (14 października 2008, 9:46) #:

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

  32. Szymon Skulimowski (14 października 2008, 11:31) #:

    Tzn? Nie rozumiem zbytnio pytania.

  33. Lukasz (2 grudnia 2008, 21:26) #:

    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?

  34. Szymon Skulimowski (2 grudnia 2008, 22:05) #:

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

  35. Lukasz (2 grudnia 2008, 22:06) #:

    Dzieki

  36. NGrafik (22 grudnia 2008, 11:15) #:

    Dzięki.

  37. Łukasz Więcek (2 lutego 2009, 20:47) #:

    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

  38. ma (3 lutego 2009, 0:28) #:

    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?

  39. Szymon Skulimowski (3 lutego 2009, 11:09) #:

    @Ł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 :-).

  40. me@djohnsc (8 lutego 2009, 18:08) #:

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

  41. me@djohnsc (8 lutego 2009, 18:13) #:

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

  42. Szymon Skulimowski (10 lutego 2009, 0:23) #:

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

  43. palmiak (10 lutego 2009, 3:14) #:

    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ć

  44. wojTrek (26 marca 2009, 19:51) #:

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

  45. wojTrek (27 marca 2009, 9:34) #:

    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.

  46. Łukasz Więcek (27 marca 2009, 10:44) #:

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

  47. wojTrek (27 marca 2009, 10:58) #:

    2.7.1
    Styl: Ahren Ahimsa

  48. Wojtek (11 maja 2009, 13:12) #:

    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ę:-)

  49. adad (18 czerwca 2009, 21:22) #:

    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?

  50. tomg (19 czerwca 2009, 9:47) #:

    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?

  51. CyPeK (30 października 2009, 0:16) #:

    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.

Dodaj własny komentarz

Odnośniki z innych stron (2)

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ń [...]