Bezpieczeństwo SmodCMS i SmodBIP
Transkrypt
Bezpieczeństwo SmodCMS i SmodBIP
Bezpieczeństwo SmodCMS i SmodBIP (Tekst pisany przed powstaniem wersji 3.xx. - od tamtej pory wiele się zmieniło także w SmodCMS. MW) Program jest dostępny dla każdego (co jest wielkim plusem) a co za tym idzie potencjalny hacker zna rozkład i nazwy folderów oraz plików, w tym kody źródłowe (co jest wielkim minusem). Dobrym pomysłem jest zmiana nazw folderów i plików (tak też zrobiłem), co wiąże się oczywiście z odzwierciedleniem tego przy funkcjach "include" lub "require" plików php oraz innych plików zawierających ścieżki dostępowe. Utrudnia to też przyszłe aktualizacje, ale no cóż, bezpieczeństwo kosztuje. Proszę nie zmieniać nazwy folderu FCKeditora, gdyż przysporzy to sporo kłopotów. Można co najwyżej zmienić jego lokalizację ale wiąże się to ze zmianą ścieżki FCKeditor.BasePath w plikach nowa_strona.php, edytujto.php. Najlepiej chronić FCKeditor wg pkt.2, w tym usunąć zbędne jego foldery i pliki pkt 3. Dostęp do folderu FCKeditor oraz panelu administracyjnego można ograniczyć w ten sposób, że dostęp do nich możliwy jest tylko z określonego adresu IP. Dla serwera Apache można to zrobić poprzez plik .htaccess z wpisem: Order Allow, Deny Allow from 100.100.100.100 - tu należy wpisać odpowiedni IP Deny from all Taki plik .htaccess należy umieścić w głównym folderze FCKeditora oraz panelu administracyjnego - domyślnie folder edytor. Przed stosowaniem pliku .htaccess proszę zajrzeć do dokumentacji swojego serwera WWW, gdyż polecenia i ich składnia może być różnie interpretowana przez różne serwery, co może być przyczyną tego, że więcej sobie zaszkodzimy niż polepszymy. Nie wszystkie też serwery akceptują plik .htaccess. W przypadku serwera IIS dostęp do folderów z konkretnego adresu IP ustawia się przez Menedżera usługi IIS. WindowsXP standardowo nie pozwoli nam utworzyć pliku .htaccess z powodu braku nazwy pliku (pusto przed kropką). Jedno rozwiązanie to poszukać w necie jakiegoś przykładowego gotowca a drugie to utworzyć plik np. xx.htaccess i po transferze przez FTP na serwer WWW zmienić jego nazwę na właściwą. Odchudzenie edytora FCKeditor W przypadku, gdy nie zechcemy stosować do tego folderu ograniczeń wg pkt. 2, należy "odchudzić” go ze zbędnych plików i folderów aby nie dopuścić do nadużyć. Instalując nową wersję FCKeditora możemy spokojnie usunąć: wszystkie foldery zaczynające się od znaku podkreślnika _ (np _samples, _testcases, _source) zbędne skórki edytora (editor\skins\), Smod domyślnie używa skórki silver a więc default oraz office2003 możemy wykasować, w tym plik _fckviewstrips.html 2.03.2017 smod.pl/old // strona 1/4 zbędne pliki języków – xx.js – (editor\lang) – wystarczy pozostawić pl.js pod warunkiem że parametr FCKConfig.AutoDetectLanguage = false oraz FCKConfig.DefaultLanguage= 'pl' (plik smodfckconfig.js). Domyślnie parametry te są ustawione jak napisałem. Można też usunąć plik _getfontformat.html. folder główny FCKeditor powinien zawierać tylko 5 plików : fckeditor.js, fckstyles.xml, fcktemplates.xml, fckconfig.js oraz smodfckconfig.js.Resztę plików możemy wykasować, warto też przeczytać licencję na używanie FCKeditora.Plik smodfckconfig.js jest elementem Smod i przed instalacją nowej wersji FCKeditora należy go zachować. usuwamy zbędne konektory czyli foldery w lokalizacji (\editor\filemanager\upload): asp, aspx,cfm, lassooraz w lokalizacji (\editor\filemanager\browser\default\connectors): asp, aspx, cfm, lasso, perl, py. Można też usunąć pliki test.html w obu lokalizacjach Szczegóły znajdziemy tutaj: http://wiki.fckeditor.net/Developer%27s_Guide/Installation Kilka słów nt konfiguracji FCKeditora: W celu nadania możliwości uploadów plików nie zapomnijmy ustawić parametrów $Config['Enabled'] = true w plikach config.php (\editor\filemanager\upload\php\ ) oraz (\editor\filemanager\browser\default\connectors\php\). Ustawmy też w pliku fckconfig.js parametry (jeżeli wystąpią problemy uploadów): var _FileBrowserLanguage = 'php' ; var _QuickUploadLanguage = 'php' ; var _FileBrowserExtension = _FileBrowserLanguage == 'php' ? 'php' Kontrola ustawień odpowiednich praw dostępu do folderów i plików - polecenie chmod Ogólnie można rzec, że dla folderów winno wystarczyć ustawienie 711, dla plików 644. Zawsze należy przetestować min. uprawnienia pod względem prawidłowego funkcjonowania serwisu. Jeżeli damy możliwość uploadów plików to musimy nadać prawa do zapisu oczywiście. Zachęcam do lektury chmod http://pl.wikipedia.org/wiki/Chmod dostępnej w necie np. tu: Niebagatelizowanie robotów sieciowych Często admini tworzą jakieś foldery, gdzie przechowują tymczasowo swoje pliki, których nie udostępnią dla ogółu (jakieś tajnos-agentos w stylu – mam pod ręku plik .doc z konfiguracją serwisu). Proszę pamiętać jednak, że do tych folderów i plików dotrą roboty sieciowe (lub jak zwą spidery) i potrafią one takie pliki zaindeksować w swoich bazach danych (np. roboty Googla, Yahoo). Z efektem pracy robotów sieciowych spotykamy się na co dzień szukając np. w Googlach jakiejś informacji. Możemy ograniczyć szperanie przez roboty za pomocą pliku robots.txt (plik tekstowy) umieszczonego w katalogu głównym serwisu. Jeżeli chcemy zabronić całkowicie dostęp robotom do naszego serwisu to zawartość pliku robots.txt winna wyglądać tak: User-agent: * Disallow: / 2.03.2017 smod.pl/old // strona 2/4 Co prawda ma to swoje minusy, gdyż wyszukiwarki nie pozycjonują właściwie naszego serwisu ale cóż, SmodBIP nie jest serwisem komercyjnym tudzież reklamowym a ponadto treść stron przechowuje w bazie danych. Mozna ograniczyć tylko szperanie do określonych folderów lub określonych robotów np. Googla. Więcej szczegółów o robotach tutaj: http://www.robotstxt.org/wc/robots.html Błędy PHP i MySQL Często samo środowisko pracy a nie aplikacja powoduje, że ktoś uzyskuje dostęp do jakiś danych. PHP Polecam wyłączenie w środowisku produkcyjnym (działających aplikacjach) parametrów error_reporting() gdyż w sytuacji nieprzewidzianych działań systemów (aplikacji) maszyna PHP wyświetli zamiast strony trochę "za dużo" nieraz cennych informacji. Najlepiej wyłączyć raportowanie błędów PHP przez ustawienie w plikach top.php oraz wydruk.php error_reporting(0); Jeżeli mamy możliwość dostępu do php.ini to ustawiamy display_errors = Off MySQL Wyłacznie raportowania błędów przez MySQL-a wymaga trochę więcej pracy (modyfikacja sporej ilości plików php). Są dwa sposoby: przed wywołaniem funkcji dostępu do bazy danych umieszczamy bezpośrednio znak małpy - @ np. @mysql_query(...), @mysql_connect(...) po użyciu funkcji dopisujemy - or die('jakiś napis') np.mysql_query(...) or die ('brak połaczenia'), mysql_connect(...) or die('brak połaczenia') Drugie rozwiązanie jest lepsze gdyż przerywa wykonywanie skryptu w razie błędu MySQL i w pustym oknie przeglądarki wyświetla napis "brak połączenia" tudzież inny informujący użytkownika. Inne dywagacje Powszechnym wiadomo, że nie da się napisać w 100% bezpiecznego kodu a co najwyżej dbać o możliwie jak najmniejsze skutki ewentualnych popełnianych błędów (chociaż często nie jest to wcale błąd programisty) aplikacji i środowiska w którym ona pracuje. Często też zdarza się robić "widły z igły", tzn. próbuje się wmawiać, że ktoś uzyskał jakieś dane ze strony i są to dane "super-tajne" mimo że faktycznie nic nie znaczą. Ot mały przykład: proszę na jakimś serwisie pracującym w PHP (może być z listy SmodLive) w adresie URL dopisać po index.php ciąg ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 Co się wyświetli w przeglądarce? Ot zagadka dla ciekawskich. Czy to naruszenie bezpieczeństwa ? Pewnie niektórzy powiedzą że tak. Czy to są jakieś tajne dane ? Pewnie niektórzy powiedzą że tak. Można to wyłączyć oczywiście przez ustawienie w php.ini expose_php=Off 2.03.2017 smod.pl/old // strona 3/4 Zachęcam też ciekawskich do lektury na temat bezpieczeństwa PHP: http://pl.php.net/manual/pl/security.php Romuald Graczyk 2.03.2017 smod.pl/old // strona 4/4