Web Application Security Testing
software development for startups

Cyberbezpieczeństwo dla startupów – wykorzystaj nowoczesne frameworki

Pisanie bezpiecznego kodu jest wyzwaniem, zwłaszcza gdy brakuje wskazówek dla programistów, szczególnie tych nowych, jak pisać kod w sposób bezpieczny. Widać to w wielu programach informatycznych na uczelniach, które nie oferują kursów na temat bezpieczeństwa aplikacji czy praktyk bezpiecznego kodowania, co tłumaczy, dlaczego wielu programistów musi „samodzielnie się tego nauczyć” i szukać szkoleń z alternatywnych źródeł, takich jak OWASP i mentorzy programistyczni.

Problem z bezpiecznym kodowaniem to właśnie powód, dla którego nowoczesne frameworki i biblioteki, które domyślnie implementują mechanizmy bezpieczeństwa, są nieocenione dla programistów, którzy muszą zapewnić bezpieczeństwo kodu swoich aplikacji. W miarę jak innowacje wciąż napędzają rozwój świata, a zagrożenia cyberbezpieczeństwa rosną i pozostaną z nami na dłużej, startupy będą musiały zmierzyć się z takimi problemami jak zapewnienie bezpieczeństwa aplikacji przy jednoczesnym szybkim tworzeniu aplikacji, dotrzymywaniu terminów i zwiększaniu produktywności.

!To trzeci z jedenastu artykułów w serii „Cyberbezpieczeństwo dla startupów”. Jeśli nie przeczytałeś poprzedniego, znajdziesz go pod tytułem: Cyberbezpieczeństwo dla startupów – używaj menedżera haseł i uwierzytelniania dwuetapowego.

W naszej cyfrowej erze i nowoczesnym świecie pełnym innowacji programiści będą nadal tworzyć aplikacje internetowe dla przedsiębiorstw i startupów. Ponieważ startupy nie są tak ugruntowane i nie dysponują takimi zasobami finansowymi jak duża, odnosząca sukcesy korporacja działająca od dziesięcioleci, cyberbezpieczeństwo dla startupów jest kluczowe.

Bezpieczeństwo w procesie wytwarzania oprogramowania jest istotne dla każdego startupu, który rozwija aplikacje internetowe, zwłaszcza gdy aplikacja internetowa jest głównym wektorem ataku, według Raportu o Ściganiu Naruszeń Danych Verizon z 2022 roku (DBIR). Ignorowanie tego może prowadzić do poważnych konsekwencji.

Na szczęście, bezpieczne tworzenie oprogramowania dla startupów jest teraz łatwiejsze i możliwe dzięki nowoczesnym frameworkom programistycznym, które implementują bezpieczeństwo, takim jak:

  • Spring Security
  • Django
  • CakePHP
  • Angular
  • React
  • Laravel
  • .NET

Zanim zagłębię się w te nowoczesne frameworki programistyczne, ich działanie i implementację bezpieczeństwa, omówię najlepsze praktyki bezpiecznego kodowania, OWASP Top 10, szkolenie programistów w zakresie pisania bezpiecznego kodu oraz cykl życia oprogramowania (SDLC).

Praktyki bezpiecznego kodowania

Bezpieczeństwo aplikacji wymaga stosowania praktyk bezpiecznego kodowania w ramach cyklu życia wytwarzania oprogramowania (SDLC). Stosowanie najlepszych praktyk bezpiecznego kodowania zmniejsza ryzyko zagrożeń i podatności, szczególnie gdy jest stosowane na wczesnym etapie SDLC, a nie po ukończeniu pakietu oprogramowania.

Lista kontrolna OWASP Secure Coding Practices oferuje wskazówki dla programistów, które pomagają utrzymać poufność, integralność i dostępność (trójkąt CIA) zasobów informacyjnych. Można zapoznać się z bardziej szczegółowym przeglądem tej listy kontrolnej tutaj.

Lista kontrolna OWASP Secure Coding Practices obejmuje:

  • Walidację wejścia
  • Kodowanie wyjścia
  • Zarządzanie uwierzytelnianiem i hasłami
  • Zarządzanie sesjami
  • Kontrolę dostępu
  • Praktyki kryptograficzne
  • Obsługę błędów i logowanie
  • Ochronę danych
  • Zabezpieczenie komunikacji
  • Konfigurację systemu
  • Bezpieczeństwo bazy danych
  • Zarządzanie plikami
  • Zarządzanie pamięcią
  • Ogólne praktyki kodowania

Najważniejsze jest, aby przestrzegać regularnie aktualizowanych wytycznych OWASP Top 10 w celu zapobiegania krytycznym zagrożeniom bezpieczeństwa w aplikacjach internetowych.

cybersecurity for startups develop with modern framework

OWASP Top 10

Lista OWASP Top 10 przedstawia dziesięć najpoważniejszych zagrożeń związanych z bezpieczeństwem aplikacji webowych, wraz z zaleceniami dotyczącymi ich eliminacji. Stanowi doskonały punkt wyjścia do wdrażania praktyk bezpieczeństwa w procesie tworzenia oprogramowania, zarówno w dużych organizacjach, jak i startupach. Regularnie aktualizowana, odzwierciedla zmieniający się krajobraz cyberzagrożeń i podatności.

Od lipca 2022 roku lista OWASP Top 10 obejmuje:

Edukacja

Szkolenie nowych programistów w pisaniu bezpiecznego kodu jest wymagające i zaczyna się od podstaw, takich jak modelowanie zagrożeń oraz model zagrożeń STRIDE. Inżynier ds. bezpieczeństwa aplikacji Jet „Code Doctor” Anderson uczył programistów, jak pisać bezpieczny kod, i kiedyś doradził mi (oraz wspomniał o tym na swoim blogu), aby podczas nauki bezpiecznego kodowania zacząć od „lekkiego” modelowania zagrożeń.

Trzy kluczowe pytania w podstawowym modelowaniu zagrożeń:

  1. Co może pójść nie tak?
  2. Co się stanie, jeśli do tego dojdzie?
  3. Jak mogę temu zapobiec?

Model STRIDE pozwala identyfikować znane zagrożenia, na które należy zwrócić uwagę podczas pisania bezpiecznego kodu. Skrót STRIDE oznacza:

  • Spoofing (Podszywanie się)
  • Tampering (Manipulacja danymi)
  • Repudiation (Brak możliwości zaprzeczenia operacji)
  • Information disclosure (Nieautoryzowane ujawnienie informacji)
  • Denial of Service – DoS (Odmowa usługi)
  • Elevation of Privilege (Podniesienie uprawnień)

Warto również zapoznać się ze standardem OWASP Application Security Verification Standard (ASVS), który stanowi podstawę do testowania zabezpieczeń aplikacji webowych i dostarcza listę wymagań dla bezpiecznego rozwoju oprogramowania. Można go pobrać i wykorzystać jako punkt odniesienia w procesie weryfikacji bezpieczeństwa.

Cykl tworzenia oprogramowania (SDLC) i bezpieczny SDLC (SSDLC)

Cykl życia tworzenia oprogramowania (SDLC) obejmuje siedem etapów, przez które przechodzą programiści podczas projektowania, implementacji i testowania oprogramowania. Model ten opisuje pełen cykl życia aplikacji – od jej początkowego projektu aż po wdrożenie i utrzymanie. Bezpieczny SDLC (SSDLC) to koncepcja, która polega na uwzględnianiu aspektów bezpieczeństwa na każdym etapie rozwoju oprogramowania, a nie dopiero po jego wdrożeniu. Wdrożenie SSDLC na wczesnych etapach pomaga ograniczyć ryzyko i minimalizować podatności.

software development best practices

Siedem etapów cyklu SDLC:

  1. Utrzymanie i monitorowanie (Operations & Maintenance)
  2. Planowanie (Planning)
  3. Analiza systemowa i wymagania (Systems Analysis & Requirements)
  4. Projektowanie i prototypowanie (Design & Prototyping)
  5. Implementacja (Development)
  6. Testowanie (Testing)
  7. Wdrożenie i integracja (Implementation & Integration)

Podejście „Shift-Left”

Koncepcja Shift-Left polega na przeniesieniu testowania bezpieczeństwa na wcześniejsze etapy SDLC, zamiast wykonywać je dopiero na końcu cyklu. Jeśli potraktować SDLC jako linię czasu, to wcześniejsze etapy znajdują się po lewej stronie, a późniejsze po prawej. Podejście „Shift-Left” oznacza koncentrację na bezpieczeństwie już na początku procesu tworzenia oprogramowania, co pozwala skuteczniej eliminować podatności i poprawiać jakość kodu.

Bezpieczne tworzenie aplikacji przy użyciu nowoczesnych frameworków

Bezpieczne projektowanie aplikacji webowych wymaga stosowania nowoczesnych frameworków i bibliotek. Wybór odpowiedniego narzędzia może znacząco wpłynąć na jakość i bezpieczeństwo kodu. Poniżej przedstawiono przegląd popularnych i bezpiecznych frameworków stosowanych w tworzeniu oprogramowania:Spring Security, Django, CakePHP, Angular, React, Laravel, and .NET. Każdy z tych frameworków oferuje mechanizmy, które pomagają w implementacji najlepszych praktyk bezpieczeństwa oraz zabezpieczają aplikacje przed najczęstszymi zagrożeniami.

software development security

Java Spring Security

Spring Security to niezawodny, gruntownie przetestowany, otwartoźródłowy framework Java/Java EE, stworzony pod koniec 2003 roku przez inżyniera oprogramowania dr. Bena Alexa. Początkowo znany jako Acegi Security, później został przemianowany na Spring Security. Jego kluczowe funkcje koncentrują się na bezpiecznym dodawaniu uwierzytelniania i autoryzacji do aplikacji internetowych oraz oferowaniu dodatkowych mechanizmów ochrony przed typowymi zagrożeniami w aplikacjach korporacyjnych.

Spring Security to podstawowy wybór do implementacji zabezpieczeń na poziomie aplikacji w środowisku Spring, zarówno dla dużych przedsiębiorstw, jak i startupów. Jest znany ze swojej niezawodności i szybkości działania. Framework ten jest wykorzystywany przez gigantów technologicznych, takich jak Google, Amazon i Netflix, a także przez instytucje rządowe, banki i wojsko.

Solidne uwierzytelnianie i autoryzacja

Spring Security to elastyczny framework do zarządzania uwierzytelnianiem i kontrolą dostępu, który oferuje gotowe do użycia narzędzia umożliwiające szybki rozwój aplikacji bez konieczności poświęcania uwagi złożonym aspektom bezpieczeństwa. Obsługuje wiele strategii uwierzytelniania i autoryzacji, dostosowanych do różnych wymagań przedsiębiorstw i startupów.

Spring Security wykorzystuje następujące mechanizmy zabezpieczeń:

  • Uwierzytelnianie podstawowe i formularzowe
  • OAuth2 oraz OpenID Connect
  • LDAP (Lightweight Directory Access Protocol)
  • JWT (JSON Web Tokens)

Ochrania przed atakami typu cross-site scripting (XSS) i innymi zagrożeniami

Oprócz wdrażania bezpiecznego uwierzytelniania i autoryzacji, Spring Security chroni aplikacje internetowe przed typowymi zagrożeniami, takimi jak ataki typu cross-site scripting (XSS) i cross-site request forgery (CSRF).

Spring Security zabezpiecza przed następującymi zagrożeniami:

  • Utrwalanie sesji (session fixation)
  • Clickjacking
  • Cross-site request forgery (CSRF)
  • Cross-site scripting (XSS)

Spring Security oferuje również dodatkowe funkcje bezpieczeństwa, w tym mechanizmy szyfrowania haseł przy użyciu algorytmu BCrypt, eliminując ryzyko przechowywania haseł w postaci jawnego tekstu.

Django

Django to otwartoźródłowy framework webowy oparty na języku Python, wydany po raz pierwszy w 2005 roku. Korzysta z architektury model-template-view (MVT) i oferuje wbudowane funkcjonalności umożliwiające szybkie tworzenie bezpiecznych stron internetowych. Jest ceniony za swoją wysoką wydajność, skalowalność oraz nacisk na bezpieczeństwo, pomagając programistom unikać typowych błędów związanych z cyberbezpieczeństwem.

Django zapewnia natywne wsparcie dla uwierzytelniania użytkowników, administracji treścią, map witryn, kanałów RSS i wielu innych funkcji. Dzięki swojej prostocie, bezpieczeństwu i skalowalności jest wykorzystywany przez gigantów technologicznych, takich jak YouTube, Instagram, Robinhood, Spotify, NASA, Dropbox i Udemy.

Django chroni aplikacje przed następującymi zagrożeniami:

  • Cross-site scripting (XSS)
  • Cross-site request forgery (CSRF)
  • SQL injection
  • Clickjacking
  • Utrwalanie i przejmowanie sesji
  • Masowe przypisanie danych (mass assignment)

W przypadku podatności takich jak masowe przypisanie danych, interfejs obiektowo-relacyjnego mapowania (ORM) aplikacji internetowej może zostać wykorzystany przez atakującego do modyfikacji informacji, które nie powinny ulegać zmianie w bazie danych (np. haseł, kluczy sesji, danych cookie, uprawnień czy dostępu administracyjnego).

Typowe żądanie lub funkcjonalność, jak w poniższym przykładzie kodu, staje się podatne na atak, gdy napastnik jest w stanie odgadnąć lub metodą brute force znaleźć popularne, lecz wrażliwe pola, uzyskać dostęp do kodu źródłowego i przeanalizować modele pod kątem takich pól (np. przy użyciu skanera botów wyszukującego wrażliwe pola w repozytoriach na GitHubie) lub gdy obiekt zawierający wrażliwe pola posiada pusty konstruktor lub setter.

POST /addUser HTTP/1.1userid=hashedtables&password=hashedpass&email=user@zigrin.com

And, here is the exploit(isAdmin=true):

POST /addUser HTTP/1.1userid=hashtables&password=hashedpass&email=user@zigrin.com&isAdmin=true

Django może zapewnić ochronę i blokować tego typu zagrożenia poprzez wykorzystanie formularzy (Forms) oraz stosowanie białych i czarnych list pól – określając, które pola użytkownik może modyfikować, a które pozostają niezmienne.

from Django import formsfrom myapp.models import Whatzit
class UserForm(forms.ModelForm):   class Meta(object):       model = User       fields = ('username', 'password', 'email')

CakePHP

CakePHP to otwartoźródłowy framework PHP do szybkiego tworzenia aplikacji webowych, stworzony w kwietniu 2005 roku, który opiera się na wzorcu model-widok-kontroler (MVC). CakePHP jest idealnym wyborem do budowy dużych serwisów internetowych i aplikacji webowych w sposób prosty, szybki i bezpieczny, przy minimalnej ilości kodu. Zawiera biblioteki narzędzi ogólnego przeznaczenia oraz kluczowe komponenty obsługujące listy kontroli dostępu (ACL), uwierzytelnianie, pliki cookie, e-maile, obsługę żądań, sesje oraz zabezpieczenia.

CakePHP jest dobrze znany ze swoich koncepcji inżynierii oprogramowania i wzorców projektowych, takich jak konwencja ponad konfigurację (działa w dowolnym katalogu serwisu i wymaga niewielkiej lub zerowej konfiguracji Apache lub innego serwera), MVC, aktywne rekordy, asocjacyjne mapowanie danych oraz wzorzec frontowego kontrolera. Mimo że jego krzywa uczenia się jest nieco bardziej stroma w porównaniu do innych frameworków, CakePHP dorównuje Ruby on Rails, czerpiąc wiele z jego koncepcji. Dzięki zastosowaniu wzorca MVC framework CakePHP umożliwia łatwe podziałanie aplikacji na modele, widoki i kontrolery, co czyni ją lekką i łatwą w rozbudowie. Ponadto oferuje szerokie możliwości dostosowywania i modularności, w tym ponowne wykorzystanie kodu.

Najbezpieczniejszy framework PHP

CakePHP posiada wiele mechanizmów zabezpieczających, które mogą być implementowane w aplikacjach webowych. Obejmują one wbudowaną walidację danych, ich sanityzację, ochronę przed CSRF oraz manipulacją formularzami. CakePHP zawiera również biblioteki narzędziowe, takie jak HttpSocket, router czy XML, a także bibliotekę zabezpieczeń obsługującą podstawowe mechanizmy bezpieczeństwa, takie jak haszowanie i szyfrowanie danych. CakePHP jest wysoce efektywny, ponieważ skraca czas tworzenia aplikacji i prototypowania, zwiększa produktywność oraz chroni aplikacje przed zagrożeniami bezpieczeństwa.

Lista zagrożeń, przed którymi CakePHP chroni natywnie:

  • Manipulacja formularzami
  • Cross-site request forgery (CSRF)
  • SQL injection
  • Cross-site scripting (XSS)

Poza ochroną przed tymi powszechnymi zagrożeniami CakePHP zapewnia dodatkowe zabezpieczenia, takie jak ograniczanie akceptowanych metod HTTP w aplikacji oraz wymóg stosowania SSL. Dodatkowo framework ogranicza komunikację między kontrolerami w aplikacjach webowych i przeprowadza walidację wejściową. CakePHP oferuje wiele zalet, w tym rozbudowane mechanizmy bezpieczeństwa, co czyni go jednym z ulubionych frameworków PHP wśród programistów.

Angular

Angular to darmowy, otwartoźródłowy framework do tworzenia aplikacji internetowych w JavaScript, stworzony przez Google i wydany w 2016 roku. Napisany w TypeScript jako całkowicie nowa wersja AngularJS, zawiera wbudowane zabezpieczenia przed typowymi podatnościami i atakami na aplikacje internetowe. Angular wykorzystuje pełnoprawny wzorzec model-view-controller (MVC). Jego głównym celem jest tworzenie jednostronicowych aplikacji (SPA) na urządzenia mobilne i komputery stacjonarne, rozwiązywanie problemów na skalę Google oraz zapewnienie możliwości ponownego wykorzystania kodu, szybszego rozwoju, łatwego testowania i lżejszych, szybszych aplikacji.

JavaScript nie jest idealnym językiem do tworzenia jednostronicowych aplikacji wymagających modularności, testowalności i wysokiej produktywności programistów. Z tego powodu AngularJS został przepisany w TypeScript, który definiuje zestaw typów dla języka JavaScript, co ułatwia pisanie czytelnego kodu i czyni go idealnym do aplikacji SPA. Kod napisany w TypeScript kompiluje się do JavaScript i działa płynnie na każdej platformie. Framework Angular jest wykorzystywany m.in. w Gmailu, PayPalu, Forbesie, Microsoft Office i UpWork do tworzenia aplikacji internetowych.

W kwietniu 2020 roku Forbes zastosował Angular na swojej stronie internetowej, co przyczyniło się do osiągnięcia 173,5 miliona odsłon dzięki szybkiemu ładowaniu stron i responsywnemu interfejsowi użytkownika. PayPal użył Angular do stworzenia dynamicznych stron internetowych obsługujących strumienie danych transakcyjnych w czasie rzeczywistym. To tylko kilka przykładów potwierdzających skuteczność Angular w budowie jednostronicowych aplikacji internetowych.

Wbudowane zabezpieczenia chronią przed dwiema powszechnymi podatnościami HTTP

Angular oferuje wbudowaną ochronę przed dwiema popularnymi podatnościami HTTP:

  1. fałszerstwem żądań między witrynami (cross-site request forgery – CSRF),
  2. wstrzyknięciem skryptu między witrynami (cross-site script inclusionXSSI).

Podczas gdy kluczowe jest ich ograniczenie głównie po stronie serwera, Angular ułatwia integrację zabezpieczeń po stronie klienta.

Atak XSSI (Cross-Site Script Inclusion), znany również jako podatność JSON, umożliwia stronie internetowej atakującego odczytywanie danych z interfejsu API JSON. Ataki XSSI wykorzystują starsze przeglądarki, nadpisując wbudowane konstruktory obiektów JavaScript i dołączając adres URL API za pomocą znacznika

Recent Posts
Tags
cybersecurity contact