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

Podobne dokumenty