Menu
Wróć do listy wpisów
Strony www
Strona główna > Blog > Bezpieczeństwo Twojej strony internetowej

Bezpieczeństwo Twojej strony internetowej

Bezpieczeństwo Twojej strony internetowej

Pamiętam czasy, kiedy jeszcze w szkole tworzyłem swoją pierwszą stronę internetową. Popularne wówczas oprogramowanie, takie jak Microsoft® Office Front Page™ czy zajączek, pozwalały na prostą edycję każdego pliku wchodzącego w skład projektu. Było to możliwe, ponieważ elementy witryny internetowej, nad którą pracowałem w wymienionych powyżej edytorach, były plikami HTML. Oznacza to, że każdą stronę trzeba było projektować osobno, co pochłaniało bardzo dużą ilość czasu i generowało ogromną ilość kodu, czasami duplikowanego i niepotrzebnie użytego. Ale była też druga strona medalu – na tak skonstruowaną stronę trudno było przeprowadzić jakikolwiek atak – nie było tam formularzy, nie było PHP, nie było nawet potrzeby ataków, bo i po co to robić, skoro nie znajdziemy tam żadnych ciekawych informacji? HTML, można by rzec był idealny, jeżeli chodziło o kwestie bezpieczeństwa kodu, ale… mało funkcjonalny i ogólnie trudny, ponieważ każdej zmiany trzeba było dokonywać bezpośrednio w kodzie.

Dzisiaj sprawa wygląda zupełnie inaczej. Strony internetowe, portale itp. posiadają bardzo dużo funkcji, a przede wszystkim przechowują spore ilości, często poufnych, danych użytkowników (imię, nazwisko, adres, numery kart kredytowych itp.). Dostęp do nich musi być więc dobrze zabezpieczony. Im więcej ważnych danych przechowujemy, tym trudniej je zabezpieczyć, a osoby trzecie tym bardziej próbują uzyskać do nich dostęp. Najbardziej chronionymi danymi są oczywiście poufne i ściśle tajne bazy danych wojskowych służb wywiadowczych oraz tajemnice państwowe. Wiele się słyszy o atakach na sieci Pentagonu oraz o wyciekach danych z rządowych instytucji. Oczywiście czasami jest to skutek zastosowania zasad socjotechniki, która niesie za sobą te same konsekwencje, co włamanie i wpuszczenie szkodnika do systemu IT.

Posiadając prostą stronę internetową nie musimy, tak jak banki lub nasza rodzima firma z Poznania – Allegro, zatrudniać sztabu administratorów, którzy będą czuwali 24h/7, monitorując i przeciwdziałając zagrożeniom w czasie rzeczywistym. Jeżeli mamy sklep internetowy lub rozbudowany portal, sprawa staje się poważniejsza i wymaga zastosowania mechanizmów, które pozwolą nam uchronić się od szkodliwego działania ludzi i oprogramowania, które może dokonać w naszym serwisie szkód, a tym samym spowodować uszczerbek na wiarygodności. Jak tego dokonać?

1. Dostępy do systemu


Pierwsza i najważniejsza kwestia – dostępy. Nie działajmy na kontach roota lub administratora na serwerze czy na bazie danych. Osoba, która przechwyci dane logowania, uzyskuje w tym momencie pełny dostęp do funkcjonalności danego oprogramowania. Najlepiej jest dawać uprawnienia przypisane do odpowiednio skrojonej funkcjonalności (np. komunikacja na stronie www wymaga jedynie operacji select/insert/update, ewentualnie delete, więc nadajmy nowemu użytkownikowi tylko takie prawa i na nich działajmy).

2. Kopia zapasowa

Kolejną istotną sprawą, na którą warto zwrócić uwagę jest oczywiście kopia zapasowa. Jeżeli już ktoś włamie się do naszego systemu i poczyni znaczne szkody, chociażby z powodu braku ograniczeń w dostępnie, przydadzą się dane, które zapisaliśmy odpowiednio wcześniej. Pozwala to na przywrócenie funkcjonowania naszego serwisu, jednak w tym samym czasie musimy znaleźć przyczynę, przez którą włamanie do portalu internetowego nastąpiło i po jej niezwłocznej naprawie ponownie wykonać kopię zapasową na przyszłość. Kopiować należy zarówno pliki, jak i bazę danych.

3. Ograniczenie zaufania

Jak można chronić się przed szkodliwym działaniem osób trzecich? Jeżeli budujemy nasz system samodzielnie, istotną rzeczą, na którą warto zwrócić uwagę jest ograniczenie ilości pól, które użytkownik ma mieć do dyspozycji oraz ich dokładne sprawdzenie, zanim trafią do funkcji odpowiedzialnej za zapis. Aktualnie bardzo często stosuje się weryfikację wpisywanych danych poprzez Java Script, co daje nam możliwość ich analizy i zgłaszania błędów użytkownikowi w czasie rzeczywistym. Niemniej jednak niedopuszczalne są sytuacje, w których opieramy się tylko i wyłącznie na tej jednoetapowej procedurze sprawdzania, ponieważ może to doprowadzić do sytuacji, w której osoba atakująca po wyłączeniu obsługi tej technologii w przeglądarce uzyska możliwość wstrzyknięcia szkodliwego kodu do systemu. Dodatkowo nie czyścimy też „brudnych danych” z formularzy, które otrzymujemy, co daje praktycznie „otwarte drzwi” do naszej aplikacji.

W przeszłości wiele słyszało się o systemach Mambo lub Joomla! w wersji poniżej 1.6, które były podatne na SQL Injection. Zalogowanie się do takiego systemu CMS, bez potrzeby poznania użytkownika i hasła, wymagało wpisania odpowiednich komend języka SQL do formularza. Autoryzacja następowała poprawnie, gdyż warunek sprawdzający dane z formularza zawsze był prawidłowy. Obecnie błędy te są już usunięte, jednak na rynku istnieją systemy, które są jeszcze podatne na te ataki.

4. Używaj captcha

Warto wspomnieć także o używaniu captcha do zabezpieczania formularzy, w celu ochrony przed robotami dodającymi spam. Zabezpieczenia takie są coraz bardziej dopracowane, niemniej jednak roboty także stają się mądrzejsze i niektóre captche potrafią odczytać. Aby się przed tym uchronić należy używać mechanizmu, który zapewni nam możliwie największą niezawodność.

Istnieją też bardziej techniczne mechanizmy zabezpieczenia strony lub sklepu, jednak ze względu na ich liczbę trudno wspomnieć o wszystkich, dlatego przedstawię kilka podstawowych elementów.

5 . Przechowywanie haseł

Pierwsza kwestia to przechowywanie haseł. Wycieki bazy danych zdarzają się najlepszym, dlatego należy odpowiednio zadbać o bezpieczeństwo. Jak? Powinno się je zaszyfrować – ale niech to nie będzie md5, ponieważ algorytm ten na chwilę obecną stwarza wiele kolizji i łatwo go złamać. Aktualnie w PHP dostępne mamy lepsze rozwiązania np. sha-256, co daje mniejsze szanse na złamanie zabezpieczeń.

6. Oprogramowanie open source

Druga sprawa, o której warto wspomnieć to oprogramowania open source typu WordPress, czy Joomla. Takie systemy są dość łatwe w instalacji i zawierają olbrzymią ilość dodatków, szablonów itp. Niesie to jednak za sobą duże ryzyko ataku w przypadku nierozważnego wykorzystania dodatków. Kod tych systemów jest otwarty i dostępny dla każdego. Oprogramowanie tego typu samo w sobie jest bezpieczne, gdyż czuwają nad tym projektanci, a najczęstszą przyczyną włamań zakończonych „sukcesem” są rozszerzenia instalowane (czasami bezmyślnie) przez użytkowników. Często są one tworzone przez programistów, którzy zastanawiają się nad ich dalszymi losami, a przez to aktualizacje znalezionych luk nie są dostarczane, powodując zagrożenie dla portali używających CMS z tymi rozszerzeniami. I tyczy się to praktycznie każdego systemu tego typu, bez względu na to, czy jest to WordPress, Joomla czy Drupal.
Czasem jednak zdarza się inna sytuacja – CMSy mają aktualizacje, ich rozszerzenia mają aktualizację, a zawodzi sam użytkownik, który nie sprawdza dostępności poprawek, tym samym nie przeprowadza procesu ich wdrożenia (mimo, że jest relatywnie prosty). Część osób próbuje ominąć mechanizm aktualizacji poprzez ukrywanie strony lub dymków, w których pojawiały się informacje o możliwości wgrania poprawek, bo system który stworzyli był źle zbudowany, przez co aktualizacja mogła naruszyć jego strukturę i spowodować awarię.

7. Zdeprecjonowane funkcje

Trzecią kwestią, o której warto wspomnieć i która jest często spotykana, nawet w aplikacjach stworzonych komercyjnie, które czasami otrzymuję do analizy, jest stosowanie zdeprecjonowanych funkcji, gdzie np. mysql_ można zastąpić poprzez PDO. Wprawdzie PDO jest dość nowym mechanizmem, jednak i w tych stworzonych niedawno systemach pojawiają się takie błędy – na szczęście zdarzają się już sporadycznie.

8. Interwały czasowe

Ostatnią sprawą, o której chciałbym wspomnieć jest zabezpieczenie logowania interwałem czasowym. Uchroni nas to przed atakiem brute force z uwagi na to, że np. blokada, po 3 nieudanych próbach logowania skutkuje tym, że kolejne są przez jakiś czas nieskuteczne. Jest to dość dobre rozwiązanie, zwłaszcza jeżeli chcemy uchronić klientów przed takimi wydarzeniami.

Powyżej przedstawiłem kilka mechanizmów, które mogą nam zapewnić w miarę optymalne bezpieczeństwo na stronie internetowej. Nie wyczerpuje to jednak tematu i jest dość ogólnym spojrzeniem na tematykę zabezpieczeń. Duża część zadań, które uchronią serwis przed atakami należy do klienta i programisty, działającego na jego zlecenie. Aktualizacje i dobór odpowiednich rozwiązań pozwoli nam zawsze zachować pewną jakość, a w przyszłości uchronić od problemów. Niestety im większa liczba zabezpieczeń, tym trudniejsze staję się życie użytkownika, dlatego wszystkiego należy używać w granicach rozsądku, aby nie irytował się on każdą wizytą lub na naszej stronie.