Prawdopodobnie żadna inna decyzja nie jest większym zagrożeniem dla bezpieczeństwa strony internetowej niż wybór dostawcy i serwera. Ze względu na szeroki zakres opcji serwerów i ich konfiguracji, nie jest możliwe opracowanie listy wyczerpującej wszystkie sytuacje. Wśród największych dostawców usług hostingowych w Polsce można wymienić firmę home.pl z siedzibą w Szczecinie, NetArt z siedzibą w Krakowie oraz Superhost z siedzibą w Gdyni. Jak widać Warszawa nie figuruje na tej liście. Na szczęście w przypadku hostingu nie lokalizacja jest ważna ale jakość usług i obsługi klienta.
Jeżeli nie możesz przeznaczyć na budowę i utrzymanie witryny większego budżetu, a jej zawartość nie zawiera danych poufnych, zapewne wykupisz konto na serwerze współdzielonym. Powinieneś jednak zdawać sobie sprawę z ryzyka takiego rozwiązania. Większość podanych niżej zaleceń dotyczy serwerów współdzielonych.
Dla uświadomienia sobie sytuacji przeczytaj ten raport o tysiącach witryn, które zezwalają Google indeksować zawartość php.info(). Nie popełnij tego błędu na swojej stronie! Raport zawiera alarmujące statystyki ilości stron używających zaniechanych już dziś ustawień jak register_globals ON, lub pracy bez skonfigurowania open_basedir. Przy okazji, jeżeli pojęcia php.ini czy register_globals są Ci obce, prawdopodobnie nie jesteś jeszcze gotowy zarządzać bezpieczeństwem swojej strony www.
Zablokuj typowe próby włamań za pomocą lokalnego pliku serwera - .htaccess. Opcja ta nie jest włączona na wszystkich serwerach. Sprawdź u swojego dostawcy jeżeli napotkasz problemy. Stosując .htaceess możesz zabezpieczyć hasłem ważne katalogi, takie jak np. /administrator, ograniczyć do nich dostęp przez określenie adresu IP, a w zależności od ustawień Twojego serwera będziesz w stanie przełączyć się z PHP4 na PHP5.
Rozważ zastosowanie zasady najmniejszego przywileju dla użytkowników, używając takich narzędzi jak PHPsuExec, php_suexec czy suPHP. (Uwaga: Są to zaawansowane metody które, wymagają zgody i współpracy z administratorem serwera. Opcje te są włączane lub wyłączane w ustawieniach całego serwera i nie są dostępne dla użytkowników serwerów współdzielonych.)
Skonfiguruj filtry mod_security i mod_rewrite aby zablokować ataki PHP. (Uwaga: Są to zaawansowane metody, które wymagają zgody i koordynacji z administratorem serwera. Opcje te są włączane lub wyłączane w ustawieniach całego serwera i nie są dostępne w serwerze współdzielonym.)
Upewnij się, że konta MySQL są utworzone z ograniczonym dostępem. Domyślna instalacja MySQL zezwala na dostęp do bazy anonimowym użytkownikom z tego samego lokalnego serwera. Konto z ograniczonym dostępem przyznaje ograniczone przywileje określonym użytkownikom. (Uwaga: To zalecenie dotyczy administratorów własnych serwerów jak np. serwery dedykowane. Użytkownicy serwerów współdzielonych są zależni od dostawców hostingu, którzy ustawiają właściwy poziom bezpieczeństwa bazy danych.)
Na serwerach współdzielonych nie możesz edytować głównego pliku php.ini, ale być może będziesz mógł dodać plik lokalny tego typu do określonych katalogów. W tym celu musisz po prostu skopiować plik php.ini do każdego podkatalogu, który wymaga specyficznego ustawienia PHP. Na szczęście ten zestaw skryptów może za Ciebie wykonać tę trudną pracę.
Zapamiętaj kilka ważnych rzeczy.
Stosuj dyrektywę disable_functions, aby zablokować użytkownikom możliwość uruchamiania niebezpiecznych funkcji PHP, które nie są potrzebne dla Twojej witryny.
disable_functions = show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open
Dyrektywa open_basedir powinna być włączona i prawidłowo skonfigurowana. Dyrektywa ta ogranicza dostęp do określonego katalogu, co skutkuje filtrowaniem plików, które mogą być otwarte przez PHP. Jeżeli na serwerze mamy włączoną obsługę open_basedir i safe_mode, priorytet mają zabezpieczenia przekazywane przez open_basedir.
Filtrem open_basedir jest prefix, a nie nazwa katalogu. Oznacza to, że open_basedir = /dir/incl zezwala na dostęp do /dir/include i /dir/incls jeżeli takie istnieją. Ograniczenie dostępu tylko do jednego wyspecyfikowanego katalogu należy zakończyć slashem.
open_basedir = /home/users/you/public_html
Ustaw dyrektywę magic_quotes_gpc zgodnie z wymaganiami dla Twojej strony.
magic_quotes_gpc = 1
Unikaj stosowania dyrektywy safe_mode. To ważne, ale niekompletne rozwiązanie, przeznaczone dla poważniejszych problemów, które tworzy fałszywe poczucie bezpieczeństwa. Zobacz oficjalną stronę PHP dla bliższego zaznajomienia się z tematem.
safe_mode = 0
Automatyczne rejestrowanie zmiennych globalnych było prawdopodobnie najgłupszą decyzją projektantów PHP. Dyrektywa ta decyduje, czy rejestrować jako globalne zmienne EGPCS (Environment, GET, POST, Cookie, Server), w wyniku czego stają się one dostępne dla wszystkich skryptów PHP. W tej sytuacji łatwo można je nadpisać swoją własną zmienną - jeżeli nie zachowasz ostrożności. Na szczęście deweloperzy PHP zdali sobie sprawę z błędu i wycofali tę 'cechę'.
Jeżeli strona została zbudowana na serwerze współdzielonym, którego administrator nalega, by register_globals była włączona, powinieneś być bardzo zmartwiony. Chociaż zwykle będziesz mógł wyłączyć register_globals dla Twojej strony za pomocą lokalnego pliku php.ini, niewiele to zmieni, ponieważ inne strony na tym samym serwerze pozostaną narażone na ataki, które mogą dosięgnąć i Twojej strony.
Ta funkcja włącza możliwość obsługi plików ze zdalnych serwerów przez podanie adresu URL (tzw. wraper, albo protokół obsługi lub interfejs). Domyślne interfejsy umożliwiają dostęp do zdalnych plików z wykorzystaniem protokołów FTP lub HTTP. Dyrektywa ta rozszerza standardowe możliwości. Niektóre rozszerzenia takie jak np. zlib mogą dodawać swoje własne interfejsy. UWAGA: ze względów bezpieczeństwa wyłączenie tej funkcji jest możliwe tylko w php.ini.
allow_url_fopen = 0
Powinieneś być w stanie, w każdym momencie, przywrócić stronę do stanu prawidłowego działania przez regularne przeprowadzanie kopiowania i odtwarzania systemu poza serwerem, na którym zainstalowana jest strona. Upewnij się że prawidłowo przeprowadziłeś te testy zanim zrobisz je na serwerze strony. To jest najlepszy sposób (i często jedyny) aby odtworzyć stronę z takich katastrof jak:
1. Włamanie na stronę lub jej zniszczenie.
2. Uszkodzenie strony z powodu błędu w aktualizacji.
3. Awarii sprzętu, takich jak awarie dysków, utrata zasilania, kradzież w serwerowni itp.
4. Działania administracyjne lub karne władz (zdarzają się częściej niż myślisz).
5. Konieczność szybkiego przeniesienia się na inny serwer lub do innego dostawcy.
Zadbanie o bezpieczeństwo serwera może uchronić Cię przed późniejszymi kłopotami już przy samym tworzeniu strony internetowej.