--=REKLAMA=--
Chociaż instalacja Joomla! jest łatwa, to utrzymanie i zabezpieczanie swojego portalu w internecie takim już nie jest. Dobry poziom bezpieczeństwa to stale zmieniające się wyzwania, które wymagają ciągłej uwagi. Aby skutecznie zabezpieczyć swoją stronę musisz albo zdobyć doświadczenie na własnych błędach (czasem bardzo gorzkich), albo skorzystać z wiedzy innych osób. Fora internetowe dotyczące spraw bezpieczeństwa wypełnione są postami o treści Pomocy! Zostałem zaatakowany pisanymi przez ludzi, którzy nie zadali sobie trudu, żeby zapoznać się z podstawowymi zasadami bezpieczeństwa. Poniższa lista ma na celu zaprezentowanie tych zasad i wskazanie szukającym właściwego kierunku:
Czy naprawdę chcesz i potrafisz administrować dynamiczną, opartą o bazy danych oraz indywidualne konta użytkowników interaktywną stroną? Czy posiadasz odpowiednią ilość wolnego czasu oraz możliwości reagowania na wiele poważnych problemów bezpieczeństwa, jakie napotkasz w Internecie?
Oto żartobliwa (a może i tragiczna) lista najczęściej spotykanych błędów bezpieczeństwa popełnianych przez administratorów. Nie sprawdzaj tego na własnej skórze.
Developerzy dużych projektów mogą skorzystać z tego forum
Najważniejsze i najbardziej pomocne tematy z Forum Bezpieczeństwa Joomli (tak jak i inne źródła) zostało teraz przekonwertowane na Security FAQs na oficjalnej stronie Joomla!.
Szperaj w Forum dyskusyjnym Joomla! Znajdziesz tam wiele prawdziwych złotych porad, np. ten post autorstwa CirTap’a.
Wybór providera to jedna z najpoważniejszych decyzji, przed jaką staniesz. Z powodu szerokiego wachlarza dostępnych parametrów hostingu nie jest możliwe przygotowanie pełnej listy na każdą sytuację.
Jeśli musisz liczyć się z pieniędzmi - możesz po prostu wynająć miejsce na jednym z serwerów z niższej półki (albo darmowych - przyp. tłum), jednak musisz liczyć się z ryzykiem i wiedzieć, jak wybrać możliwie najbezpieczniejszego dostawcę usług internetowych.
Sprawdź też naszą listę polecanych dostawców.
Dla pełniejszego zrozumienia problemu wyboru odpowiedniego serwera (i dostawcy) polecamy przeczytać ten raport z około 11.000 stron, które pozwoliły Google na rozpoznanie typu systemu operacyjnego, serwera i innych ważnych informacji - wykorzystując funkcję phpinfo()
.
configuration.php
poza katalog domowy Twojej strony
./public_html
w katalogu użytkownika, który jest właścicielem witryny. Uwaga! - problem jest do rozwiązania tylko na serwerach, na których mamy dostęp do całego drzewka katalogów użytkownika, a nie tylko samego chrootowanego katalogu public_html
. Niestety większość serwisów publicznie dostępnych - przyn. w Polsce - blokuje nam ten dostęp. przyp. tłum)
.htaccess
administrator
- przez wprowadzenie haseł, używając do tego plików .htaccess
administrator
ze wszystkich innych adresów IP niż Twój - używając do tego plików .htaccess
PHPsuExec
, php_suexec
lub suPHP
safe_mode
:
Register Globals Emulation
- edytując plik globals.php
(plik znajduje się w katalogu głównym Twojej witryny). Chociaż funkcja emulacji register_globals
w Joomli! jest bezpieczniejsza niż register_globals
wykonywana przez PHP, znacznie bezpieczniej jest nie włączać register_globals
w ogóle. Począwszy od PHP 6 nie będzie już dostępnej takiej opcji.
register_globals
. Najlepszą radą jest - nie używać tych rozszerzeń! Poniżej jest zaprezentowane właściwe ustawienie zmiennej w pliku globals.php
:
define( 'RG_EMULATION', 0 );
6.1. PRZED instalacją nowego rozszerzenia wykonaj kopię zapasową witryny i kopię zapasową bazy danych.
6.2. PRZED instalacją rozszerzeń innych zespołów, sprawdź: Official List of Vulnerable 3rd Party/Non Joomla! Extensions
6.3.Pobieraj rozszerzenia tylko z zaufanych witryn. Jest jedna oficjalna definicja "zaufanej witryny": TY ufasz!
6.4: Użytkownik rozsądny (strzeżony, bezpieczny)! Rozszerzenia innych projektantów są różnej jakości, powstały w różnym czasie (starzeją się). Chociaż istnieją standardy kodowania w Joomla!, rozszerzenia umieszczane w katalogu zasobów na oficjalnej stronie Joomla! nie są przeglądane pod kątem zgodności ze standardami kodowania. Testuj każde rozszerzenie na testowej witrynie PRZED instalacją na witrynie produkcyjnej.
6.5: Najwięcej zagrożeń bezpieczeństwa niosą ze sobą rozszerzenia opracowane przez innych projektantów. Rzeczywiście, to fakt. Istnieje całe forum dedykowane temu tematowi. Zaprenumeruj je, kliknij przycisk Notify/Powiadomienia.
6.6 Usuwaj nieużywane rozszerzenia i dwukrotnie sprawdzaj, czy wszystkie foldery i pliki zostały usunięte po deinstalacji. Zauważ, że wiele rozszerzeń innych projektantów po odinstalowaniu pozostawia na Twoim serwerze dużą ilość plików i dużą ilość tabel w bazie danych. To jest albo zaleta, albo błąd - zależy od Twojego punktu widzenia!
6.7. Usuń lub napraw wszystkie rozszerzenia, które wymagają włączonych register_globals
.
7.1. Konfiguracja i mechanizmy php.ini są dobrze udokumentowane w pliku php.ini
znajdującym się w każdej instalacji PHP.
7.2: Ważne jest dobre zrozumienie, jak posługiwać się i wykorzystywać mechanizmy zawarte wphp.ini
.
7.3: Poszczególne mechanizmy i funkcje php.ini
są opisane i udokumentowane na www.php.net. Przeanalizuj Official List of php.ini Directives na www.php.net.
7.4: Na wielu publicznych serwerach www nie masz dostępu do edycji głównego pliku php.ini
, ale za to możesz dodać swój własny plik php.ini
. W takim wypadku musisz skopiować ten plik do każdego podkatalogu, który będzie wymagać sprecyzowanych niestandardowych ustawień php.ini
. Na szczęście są dostępne darmowe skrypty, które wykonają za Ciebie brudną robotę:
7.5: Przeczytaj post autorstwa Beat, Członka Grupy Q&T, w którym opisana jest lista metod php.ini
uporządkowana pod względem ważności.
7.6. Ustaw register_globals
na OFF. Ta dyrektywa decyduje, czy zmienne otrzymywane z formularzy, ciastek, sesji lub serwera będą traktowane jako zmienne globalne. Używając zmiennych globalnych, nie można stwierdzić, czy dana wartość pochodzi z sesji czy może została podana w URL-u metodą GET. W przypadku źle napisanych skryptów, można obejść zabezpieczenia.
Dlatego ważne jest, aby wyłączyć rejestrowanie zmiennych globalnych. Jeśli nie masz dostępu do pliku php.ini
, przełącz się na PHP5 i użyj techniki .htaccess
omówionej powyżej.
7.7: Używaj funkcji disable_functions
, żeby wyłączyć użycie potencjalnie niebezpiecznych funkcji PHP, które nie są wymagane bezpośrednio przez Twoją witrynę.
7.8: Wyłącz allow_url_fopen
. Ta funkcja włącza dostęp do plików (wraper) na dysku lokalnym serwera bezpośrednio przez podanie adresu url. Standardowo wrapery używane są do uzyskiwania dostępu do plików z wykorzystaniem protokołów <acronym>http</acronym> i <acronym>ftp</acronym>, znajdujących się na zdalnych serwerach. Niektóre rozszerzenia takie jak np. zlib mogą dodawać swoje własne wrapery. UWAGA: ze względów bezpieczeństwa wyłączenie tej funkcji jest możliwe tylko w php.ini
.
7.9: Poprawienie ustawienia magic_quotes_gpc
jest konieczne dla Twojej witryny. Zalecanym ustawieniem dla Joomla 1.0.x jest ON, aby chronić przed źle napisanymi skryptami rozszerzeń. Joomla 1.5 ignoruje to ustawienie i działa poprawnie w każdym przypadku. [magic_quotes_gpc
ustawia stan stan magic_quotes dla operacji GPC (Get/Post/Cookie). Jeśli jest włączona, wszystkie znaki ’ (apostrof), "e (cudzysłów), \ (backslash) i znaki NULL są zamieniane na sekwencje escape przez dodanie przed te znaki znaku lewego ukośnika].
7.10: Funkcja open_basedir
powinna być włączona i poprawnie skonfigurowana. Ogranicz dostęp do plików, które mogą być otwierane przez PHP tylko do określonego katalog(ów) (drzewka). Ta funkcja jest niezależna od ustawienia ON lub OFF PHP SafeMode. Nazwa katalogu podawana jako argument w funkcji open_basedir
jest traktowana jako prefiks, a nie dokładna nazwa katalogu. I tak np. open_basedir /dir/incl
pozwala na dostęp do katalogów /dir/include
oraz /dir/incls
o ile takie istnieją. Aby ograniczyć dostęp tylko do wybranego katalogu, należy zakończyć jego nazwę slashem ’/’:
7.11: Przykładowa konfiguracja [I]php.ini[/I] w odniesieniu do powyższych uwag sugestii
register_globals = 0 disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open allow_url_fopen = 0 magic_quotes_gpc = 1 safe_mode = 1 open_basedir = /dir/to/include/change/me
8.1: Nie używaj publicznych(/darmowych) serwerów. Niektórzy eksperci są tutaj innego zdania. Jakkolwiek byś uważał, niezależnie od konfiguracji serwera, istotne jest żebyś upewnił się, że fizyczny dostęp do Twojego serwisu masz wyłącznie Ty i administrator serwera.
8.2 Używaj protokołu SSL w celu zabezpieczenia połączeń z serwerem. Przeczytaj tę dyskusję na temat potrzeby używania SSL i tych momentów, kiedy bezpieczeństwo jest szczególnie istotne. (Joomla! w wersji 1.0.11 nie pozwala na przypisanie serwera SSL do poszczególnych katalogów. Czy ktoś wie, czy w 1.0.12 ma się to zmienić ?)
8.3: Dla dodatkowej ochrony zabezpieczonych hasłem newralgicznych katalogów używaj plików .htaccess
.
9.1 Używaj tylko dobrych (odpowiednio skomplikowanych) haseł
9.2: Używaj schematu haseł odpowiednich do wagi i ważności problemu. Innymi słowy: miej parę poziomów bezpieczeństwa i związanych z nim trudności haseł, które nie powinny być w żaden sposób ze sobą związane.
9.3: Konsekwentnie wykonuj kopie zapasowe swojej witryny.
9.4: Używaj automatycznych narzędzi do wykrywania ataków (IDS). Używaj profesjonalnego oprogramowania IDS do blokowania podejrzanych zapytań HTTP.
Uwaga od tłumacza: jednym z najlepszych, a do tego całkowicie darmowym systemem IDS jest SNORT. Duża część wysokopłatnych rozwiązań komercyjnych bazuje właśnie na tym silniku. Jednak jego skuteczne użycie wymaga:
9.5. Często dokonuj RĘCZNEJ kontroli serwisu na wypadek ataków. Regularnie sprawdzaj logi na wypadek pojawienia się w nich podejrzanych operacji. NIE POLEGAJ wyłącznie na zestawieniach zbiorczych ani wykresach! Pouczająca dyskusja na temat możliwości automatyzacji przeglądania logów znajduje się
9.10. Bądź ZAWSZE na bieżąco z aktualizacjami i poprawkami (patchami). Zawsze instaluj poprawki wypuszczone przez producenta ASAP (As Soon As Possible - Najszybciej, jak to tylko możliwe).
9.11. Samodzielnie wyszukuj wiadomości o nowych atakach i zagrożeniach. Regularnie sprawdzaj wiadomości w fachowych serwisach nt. bezpieczeństwa w Sieci:
9.12: Samodzielnie wyszukuj wiadomości o nowych atakach SQL: Użyj automatycznych narzędzi takich jak Paros Proxy do przeprowadzenia automatycznych testów na wykorzystanie SQL Injection przez aplikacje PHP.
9.13. Używaj skryptów shellowych do automatyzacji pracy
9.14. Czytaj, jak możesz najwięcej, odnośnie oprogramowania zabezpieczającego.
9.15. Jeśli jesteś programistą zainteresuj się i zaznajom z nadchodzącą wersją Jommli! 1.5 - najbardziej znaczącą pod względem zmian kodu Joomla!
10.1. Naucz się zabezpieczać serwis po włamaniu i przywracać mu pełną funkcjonalność:
10.2. Naucz się rozpoznawać próby wykorzystania eksploitów przy użyciu shelli *NIXowych:
11.1 Publikuj informacje o zauważonych/odkrytych przez Ciebie problemach z bezpieczeństwem dotyczących Joomla! tutaj.
11.2 Wszystkie uwagi, poprawki i komentarze dotyczące tego dokumentu, zgłaszaj tutaj.