Bezpieczeństwo aplikacji webowych — jak odpowiednio zabezpieczyć serwery?

Karol
Karol
CTO & Co-founder

Dostęp do technologii umożliwiający coraz bardziej kreatywne formy ataków wymusza na programistach ciągłe dbanie o bezpieczeństwo aplikacji webowych. Na co zwrócić uwagę i jak przygotować serwer pod instalację aplikacji?

Bezpieczeństwo aplikacji internetowych związane jest nie tylko ze stosowaniem aktualnego szyfrowania, wymaganiem odpowiedniego uwierzytelniania, czy stałym dbaniem o jakość aplikacji. To również regularne łatanie wykrytych luk i opracowanie całościowej strategii bezpieczeństwa, pozwalającej na szybkie reagowanie. Dlaczego jest to tak ważne?

Powszechne luki w bezpieczeństwie aplikacji webowych

Skrypty między witrynami (XSS) — XSS to luka w zabezpieczeniach, która umożliwia hakerowi wstrzyknięcie skryptów po stronie klienta do strony sieci Web w celu uzyskania bezpośredniego dostępu do ważnych informacji, podszywania się pod użytkownika lub nakłaniania go do ujawnienia ważnych informacji.

Wstrzyknięcie SQL — Jest to metoda, za pomocą której atakujący wykorzystuje luki w sposobie, w jaki baza danych wykonuje zapytania wyszukiwania. Atakujący używają SQL, aby uzyskać dostęp do nieautoryzowanych informacji, modyfikować lub tworzyć nowe uprawnienia użytkownika, lub w inny sposób manipulować poufnymi danymi. Do konsekwencji ataku należy np. nieautoryzowane przeglądanie list, usuwanie tabel, czy nieautoryzowany dostęp administracyjny.

Ataki typu „odmowa usługi” (DoS) i rozproszona odmowa usługi (DDoS) — za pomocą różnych wektorów atakujący mogą przeciążać serwer docelowy lub otaczającą go infrastrukturę różnymi rodzajami ruchu związanego z atakami. Gdy serwer nie jest już w stanie efektywnie przetwarzać przychodzących żądań, zaczyna wolno działać i ostatecznie odmawia obsługi żądań przychodzących od legalnych użytkowników.

Fałszowanie żądań między witrynami (CSRF) — atak, który może skutkować niezamówionym transferem środków, zmianą haseł lub kradzieżą danych. Występuje, gdy złośliwa aplikacja internetowa powoduje, że przeglądarka użytkownika wykonuje niepożądane działanie w witrynie, w której użytkownik jest zalogowany. Gdy konto użytkownika zostanie naruszone, osoba atakująca może wydobyć, zniszczyć lub zmodyfikować ważne informacje.

Naruszenie danych — jest to ogólny termin odnoszący się do ujawnienia wrażliwych lub poufnych informacji i może nastąpić w wyniku złośliwych działań, lub przez pomyłkę. Zakres tego, co uważa się za naruszenie danych, jest dość szeroki i może odnosić się do kilku cennych rekordów aż do milionów odsłoniętych kont użytkowników.

Co możesz zrobić, aby zapewnić maksymalne bezpieczeństwo aplikacji webowych?

Istnieje kilka metod, które możesz wdrożyć, aby w pełni zadbać o bezpieczeństwo aplikacji webowych. Poniżej prezentujemy najważniejsze z nich.

1. Zabezpieczenie dostępu do serwera

Jedną z podstawowych rzeczy, o które powinieneś zadbać, jest zablokowanie zewnętrznego dostępu do serwera. Zdalny dostęp powinien być szyfrowany, a ochrona serwera powinna opierać się na co najmniej kilku poziomach zabezpieczeń (w szczególności warto zadbać o zabezpieczenie dostępu do portów takich usług jak SSH czy portów bazy danych).

W jaki sposób zwiększyć bezpieczeństwo aplikacji internetowej?

  • Ogranicz dostęp do określonych adresów IP i skonfiguruj firewall — dostęp do poszczególnych usług jak SSH, MySQL powinien być ograniczony (najlepiej używać VPN). Jeśli aplikacja internetowa posiada panel administratora, dostęp do logowania również należy ograniczyć.

Zaporę aplikacji internetowej możesz skonfigurować z poziomu dostawcy chmury (na rynku znajdziesz sporo produktów tego typu, a najpopularniejsze z nich to m.in. AWS i DigitalOcean) lub bezpośrednio na serwerze.

firewall ustawienia
Możliwość łatwego ustawienia Firewall’a w panelu dostawcy chmury DigitalOcean

Prawidłowo skonfigurowana zezwala na ruch wyłącznie z określonych aplikacji i serwerów i zapobiega inicjowaniu przez bazę danych połączeń wychodzących.

  • Używaj kluczy SSH — logowanie za pomocą kluczy SSH jest znacznie bezpieczniejsze niż dostęp z użyciem hasła. Rozważ więc całkowite wyłączenie możliwości logowania za pomocą hasła.
  • Określ liczbę błędnych logowań — jeśli nie masz możliwości zastosowania wspomnianych wyżej zabezpieczeń lub konieczny jest dostęp do aplikacji z wielu miejsc (i nie masz możliwości skorzystania z VPN), zabezpiecz liczbę prób logowania do aplikacji. Jeśli korzystasz z serwera na Linuksie, możesz wykorzystać do tego aplikację Fail2Ban. Takie rozwiązanie warto wdrożyć również do zwiększenia bezpieczeństwa aplikacji webowej z panelem logowania jako formę ochrony przed atakami typu brute force.

2. Cloudflare jako ochrona przed DDoS

Skoro mowa o firewallu, warto skorzystać z takich usług jak Cloudflare, znacznie zwiększających bezpieczeństwo aplikacji webowych poprzez automatyzację reakcji na zagrożenie. Wśród korzyści oferowanych przez usługę znajdują się m.in. ukrywanie adresów IP, możliwość blokowania odwiedzających według krajów, redukcja liczby botów chodzących po aplikacji. Kolejną zaletą jest blokowanie ataków DDoS, mających na celu przeciążenie zasobów przez ogromną liczbę wysyłanych zapytań.

Co więcej, Cloudflare oferuje też darmowy certyfikat SSL. Nawet jeśli nie korzystasz z rozwiązań typu Cloudflare, również powinieneś zadbać o wdrożenie SSL do swojej aplikacji — używanie HTTPS jest podstawą, dzięki czemu podczas przesyłu zablokowane jest odczytanie wprowadzanych danych pomiędzy przeglądarką użytkownika a serwerem.

3. Aktualizacja aplikacji webowej

Potencjalne luki w kodzie są kolejnym czynnikiem zmniejszającym bezpieczeństwo aplikacji webowych, a ciągły rozwój technologiczny sprzyja tworzeniu nowych luk w zabezpieczeniach. Według danych opublikowanych w raporcie Web Application Vulnerabilities and Threats: Statistics for 2019, 82% luk było zlokalizowanych głównie w kodzie aplikacji.

Ważne jest więc zadbanie o jakość kodu i testowanie go pod kątem typowych luk w zabezpieczeniach, aby uniknąć potencjalnych ataków. Aby zminimalizować ryzyko, zawsze korzystaj z aktualnych wersji danego języka programowania czy frameworku oraz unikaj niebezpiecznych funkcji danego języka (np. eval czy exec w PHP). Skutecznymi sposobami są też przeprowadzenie code review oraz uruchomienie testów penetracyjnych przed wypuszczeniem aplikacji.

4. Monitoring aplikacji webowej i serwerów

Monitoring aplikacji internetowej oraz serwera, na którym się znajduje, pozwala na wykrywanie anomalii i niepożądanych akcji. Tutaj przydadzą się narzędzia pozwalające na zbieranie logów aplikacji w jednym miejscu, takie jak ELK Stack, logz.io czy Datadog. Aplikacje te pozwalają nie tylko na agregowanie logów, ale też na automatyczną ocenę stopnia zagrożenia na podstawie wykonywanych akcji, np. w przypadku wykrycia nagłego wzrostu liczby logowań do serwisu.

narzędzia zbieranie logów

Poza monitorowaniem samej aplikacji webowej niezbędny jest też monitoring serwera, pozwalający na sprawdzanie jego stanu i parametrów, wykrycie podejrzanych logowań czy wysłanie informacji o kończącym się miejscu. Analizę wskaźników wydajności i ustawienie alarmów mailowych czy SMS-owych ułatwiają takie narzędzia jak Zabbix czy Datadog. Poniżej znajdziesz przykłady obszarów, które możesz monitorować:

  • obciążenie serwera,
  • niepożądany stan lub anomalie,
  • liczba aktywnych użytkowników (wykrywanie wzrostu aktywności botów),
  • liczba prób logowania i odwiedzin strony.

5. Regularne kopie zapasowe

Bezpieczeństwo aplikacji internetowych bez backupu nie istnieje. Powinieneś więc tworzyć kopie zapasowe baz danych, kodu aplikacji czy plików wgrywanych przez użytkowników aplikacji tak często, jak to możliwe. Rozważ też trzymanie kopii zapasowych w chmurze, pozwalającej na przechowywanie nieograniczonej liczby poprzednich wersji plików.

Mając na uwadze wycieki danych w ostatnich latach w firmach takich jak Facebook czy Uber, widzimy, że zagrożenie utraty danych jest spore, mimo pozornie najlepszych zabezpieczeń (zobacz mapę cyberataków w czasie rzeczywistym). Powinieneś być więc przygotowany na różne scenariusze, bowiem nie tylko atak hakerski zagraża ważnym danym — co jeśli pracownik usunie ważny plik? Regularne tworzenie kopii baz danych pozwoli na zminimalizowanie takiego ryzyka.

Bezpieczeństwo aplikacji webowych pod kontrolą

Wielu zagrożeń można uniknąć, a stosowanie powyższych praktyk może zminimalizować ryzyko ataków czy wycieku danych. Pamiętaj jednak, że nawet najlepiej przygotowane serwery i wielowarstwowe podejście do zabezpieczeń nie gwarantują pełnego bezpieczeństwa aplikacji.

Warto skorzystać z nowoczesnych rozwiązań jak np. AWS, proponujących zestaw funkcji samodzielnie zarządzających serwerem, co znacznie odciąża twoje zasoby. Bez względu na to jednak, czy wybierzesz gotową usługę, czy postawisz na samodzielne ustawienie zabezpieczeń, zawsze trzymaj rękę na pulsie i kontroluj co dzieje się z Twoją aplikacją.

Bądź więc na bieżąco z najnowszymi zagrożeniami dla środowiska aplikacji oraz sposobami sprawnego usuwania ewentualnych luk, aby uniknąć nieprzyjemnych niespodzianek. Niezbędne jest więc stałe dbanie o stan aplikacji i serwera, wykonywanie częstych aktualizacji i obserwowanie trendów — wszystko, co pozwoli na zminimalizowanie ryzyka.

Zbudujemy dla Ciebie funkcjonalną aplikację webową dbając w pełni o jej bezpieczeństwo. Skontaktuj się z nami i opowiedz nam o swoim projekcie >>>

Related Posts
10 listopada 2023
Jak zabezpieczyć dane pacjentów? Oto najważniejsze zasady
Sektor opieki zdrowotnej przeszedł znaczną transformację dzięki rozwojowi urządzeń IoT, sieci web oraz przyspieszającej cyfryzacji,…
Czytaj więcej
1 grudnia 2022
Jak zapewnić bezpieczeństwo architektury w chmurze?
Gospodarka cyfrowa obecnie rośnie w siłę dzięki danym, a do tego niezbędne są usługi chmurowe.…
Czytaj więcej
8 października 2020
Co to jest React.js i dlaczego warto go użyć w projekcie?
Planujesz stworzenie aplikacji webowej i zastanawiasz się nad wyborem technologii? Rozważ wykorzystanie React’a, który nieustannie…
Czytaj więcej