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.

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:
- A01:2021-Niewłaściwa kontrola dostępu (Broken Access Control)
- A02:2021-Błędy kryptograficzne (Cryptographic Failures)
- A03:2021-Ataki typu Injection
- A04:2021-Niebezpieczny projekt (Insecure Design)
- A05:2021-Błędna konfiguracja zabezpieczeń (Security Misconfiguration)
- A06:2021-Podatne i nieaktualne komponenty (Vulnerable and Outdated Components)
- A07:2021-Błędy identyfikacji i uwierzytelniania (Identification and Authentication Failures)
- A08:2021-Błędy integralności oprogramowania i danych (Software and Data Integrity Failures)
- A09:2021-Braki w logowaniu i monitorowaniu bezpieczeństwa (Security Logging and Monitoring Failures)
- A10:2021-Fałszowanie żądań po stronie serwera (Server-Side Request Forgery – SSRF)
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ń:
- Co może pójść nie tak?
- Co się stanie, jeśli do tego dojdzie?
- 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.

Siedem etapów cyklu SDLC:
- Utrzymanie i monitorowanie (Operations & Maintenance)
- Planowanie (Planning)
- Analiza systemowa i wymagania (Systems Analysis & Requirements)
- Projektowanie i prototypowanie (Design & Prototyping)
- Implementacja (Development)
- Testowanie (Testing)
- 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.

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 |
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 |
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:
- fałszerstwem żądań między witrynami (cross-site request forgery – CSRF),
- wstrzyknięciem skryptu między witrynami (cross-site script inclusion – XSSI).
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 <script>.
Angular protects against an XSSI attack by letting its servers prefix all JSON responses to make them non-executable using the well-known string „)]}’,\n” which its HttpClient library recognizes and automatically strips it from all responses before further parsing.
Angular chroni przed atakami XSSI, pozwalając serwerom poprzedzać wszystkie odpowiedzi JSON ciągiem znaków „)]}’,\n„„, który sprawia, że dane stają się nieeksportowalne. Biblioteka HttpClient rozpoznaje ten prefiks i automatycznie usuwa go ze wszystkich odpowiedzi przed dalszą analizą.
6 najlepszych praktyk bezpieczeństwa w Angular
- Używaj interpolacji do kodowania niebezpiecznych znaków i unikania niezaufanych wyrażeń HTML lub CSS w szablonach.
- Uważnie korzystaj z
innerHTML
. - Nigdy nie używaj szablonów generowanych poprzez konkatenację danych wejściowych użytkownika.
- Nigdy nie używaj natywnych API DOM do interakcji z elementami HTML.
- Unikaj silników szablonów po stronie serwera.
- Skanuj swój projekt Angular pod kątem komponentów wprowadzających podatności bezpieczeństwa.
W szczególności, w punkcie #3, jeśli szablony są konkatenowane zamiast stosowania interpolacji ciągów znaków, konieczne jest maksymalne sanitizowanie danych wejściowych. W przeciwnym razie może dojść do wprowadzenia wartości stanowiących złośliwe wyrażenia o nieznanym lub niezaufanym pochodzeniu.
Poniżej znajduje się przykład złej praktyki programistycznej, na którą należy zwrócić uwagę i której należy unikać.

Aby temu zapobiec, Angular oferuje swój kompilator szablonów offline, Ahead of Time, który kompiluje szablony offline, aby zapobiec lukom związanym z wstrzykiwaniem szablonów, jak pokazano poniżej.

Dla startupów, które chcą korzystać z frameworku zatwierdzonego przez Google do tworzenia aplikacji webowych typu single-page, zawierających dynamiczne treści, gdzie optymalizacja pod kątem wyszukiwarek (SEO) ma znaczenie i gdzie nie występuje czas przeładowania strony, a jednocześnie implementują bezpieczeństwo, Angular stanowi doskonały wybór.
React
ReactJS, znany również jako React, to otwartoźródłowa biblioteka JavaScript do tworzenia interfejsów użytkownika (UI), która umożliwia szybkie i wszechstronne budowanie interfejsów z komponentów. Został wydany przez Meta (dawniej Facebook) w 2013 roku na licencji open-source po tym, jak został stworzony przez jednego z jej inżynierów, Jordana Walke. Jego głównym celem jest umożliwienie programistom tworzenia komponentów React dla aplikacji webowych, takich jak przyciski, tekst, etykiety czy siatki. React łączy podstawowe koncepcje HTML i JavaScript (JS).
React jest jednym z najpopularniejszych frameworków ze względu na łatwość użycia, skalowalność, bezpieczeństwo, wydajność oraz prostą krzywą uczenia się. Oferuje również modularność i możliwość ponownego użycia. W rezultacie, React wymaga mniej kodowania, zapewniając większą funkcjonalność w tworzeniu dynamicznych aplikacji webowych. React jest ulubieńcem wielu firm i jest obecnie wykorzystywany przez Meta (dawniej Facebook), Airbnb, Uber, Netflix i New York Times. Startupy mogą również korzystać z React i czerpać korzyści z jego zalet przy tworzeniu złożonych interfejsów użytkownika.
Najlepsze praktyki bezpieczeństwa w React
.React również włącza bezpieczeństwo do swojego frameworku, stosując najlepsze praktyki bezpieczeństwa, które mają zastosowanie do jego interfejsów. Na przykład, wbudowuje zrozumienie znaczników i treści do JavaScriptu, uniemożliwiając ręczne łączenie ciągów znaków (patrz przykład w sekcji Angular), co skutkuje mniejszą powierzchnią ataku dla ataków XSS. Istnieje wiele najlepszych praktyk bezpieczeństwa, które są stosowane w React.
Oto 10 najważniejszych z nich:
- Używaj domyślnego powiązania danych za pomocą klamrowych nawiasów {} do ucieczki wartości i ochrony przed atakami XSS.
- Używaj walidacji, aby uniknąć wstrzykiwania niebezpiecznych adresów URL.
- Wstawiaj HTML bezpośrednio do węzłów DOM renderowanych za pomocą dangerouslySetInnerHTML i uprzednio oczyszczaj treść za pomocą dompurify.
- Nie uzyskuj dostępu do DOM za pomocą findDomNode(), aby wstrzykiwać treść przez innerHTML do węzłów DOM bezpośrednio. Zamiast tego należy używać dangerouslySetInnerHTML do wstrzykiwania HTML i oczyszczania go za pomocą dompurify.
- Podczas korzystania z funkcji renderowania po stronie serwera, nie łącz nieoczyszczonych danych z wynikami renderToStaticMarkup(), aby uniknąć ataków XSS.
- Aktualizuj wersje swoich zależności i uważaj na wersje komponentów firm trzecich, które zawierają luki bezpieczeństwa.
- Zawsze wykonuj ucieczkę znaków < z odpowiednią wartością, aby uniknąć ataków wstrzykiwania, jak np. w JSON, np.
window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace( /</g, '\\u003c')}
- Upewnij się, że używasz najnowszej wersji React, używając npm outdated i zaktualizuj, jeśli to konieczne. Unikaj używania wersji zawierających luki bezpieczeństwa.
- Zainstaluj konfiguracje i wtyczki Linter, które automatycznie wykryją problemy z bezpieczeństwem w Twoim kodzie i zaproponują porady dotyczące usunięcia zagrożeń.
- Unikaj niebezpiecznego kodu bibliotek, który wstawia HTML do DOM i używa niezweryfikowanych adresów URL lub niebezpiecznych wzorców. Ręcznie przeglądaj kod bibliotek lub używaj linters.
Weźmy przykład nr 2, aby zobaczyć, jak stosować najlepsze praktyki bezpieczeństwa. Dla niebezpiecznych adresów URL, gdzie URL mogą zawierać dynamiczne treści skryptów za pomocą protokołu javascript:, użyj walidacji, aby upewnić się, że twoje linki mają protokół http: lub https:, aby uniknąć wstrzykiwania skryptów opartego na URL javascript:. Można to osiągnąć poprzez użycie natywnej funkcji analizy URL, a następnie dopasowanie właściwości protokołu do listy dozwolonych adresów, wykonując to w ten sposób (patrz kod poniżej).

Unikaj robienia tego.

Laravel
Laravel to open-source’owy framework PHP do tworzenia aplikacji internetowych typu backend, który umożliwia szybkie i łatwe tworzenie aplikacji webowych dzięki wbudowanym funkcjom. Został stworzony przez Taylora Otwella i wydany w czerwcu 2011 roku jako zaawansowana alternatywa dla frameworku CodeIgniter, który nie oferował wbudowanego wsparcia dla uwierzytelniania i autoryzacji użytkowników. Laravel posiada kompletny system uwierzytelniania, obejmujący obsługę routingu, sesji, pamięci podręcznej oraz szablonowania HTML. Dysponuje także potężnymi narzędziami.
Laravel upraszcza rozwój aplikacji, uwalniając programistów od wykonywania rutynowych zadań. Jest niezwykle skalowalny i wykorzystuje wzorzec model-view-controller (MVC). Ułatwia szybkie tworzenie aplikacji webowych dzięki swoim zaawansowanym funkcjom i narzędziom deweloperskim. Dzięki licznej gamie wbudowanych narzędzi, Laravel potrafi obsługiwać wszystko, od stron internetowych typu single-page po pełnoprawne sieci społecznościowe. Z frameworka korzystają takie firmy jak BBC, Pfizer, 9GAG, Liberty Mutual Insurance oraz Crowdcube.
Bezpieczeństwo to kluczowa cecha w Laravel
Bezpieczeństwo jako kluczowa funkcja Laravel Jednym z najważniejszych elementów Laravel jest jego solidny zestaw wbudowanych funkcji bezpieczeństwa. Framework korzysta z wielu mechanizmów bezpieczeństwa, które chronią aplikacje przed zagrożeniami i minimalizują podatności. Na przykład Eloquent ORM wbudowany w Laravel używa wiązania PDO, które chroni przed wstrzykiwaniem SQL, zapewniając, że nikt nie może zmodyfikować intencji zapytań SQL.
Zagrożenia i podatności, przed którymi Laravel chroni:
- Wstrzykiwanie SQL
- Cross-site scripting (XSS)
- Cross-site request forgery (CSRF)
- Przekierowanie URL
- Niezabezpieczone strony HTTP
- Ataki DoS
- Słaba implementacja logowania
- Podatności haseł
Ponadto, Laravel posiada mechanizmy bezpieczeństwa do implementacji uwierzytelniania, konfiguracji i innych funkcji, które są dostępne od razu po instalacji. Wbudowany jest również Monolog do logowania wszelkich zdarzeń, takich jak nieudane próby logowania czy resetowanie haseł.
Laravel implementuje mechanizmy bezpieczeństwa dla następujących funkcji:
- Konfiguracja
- Przechowywanie haseł
- Uwierzytelnianie użytkowników
- Ręczne logowanie użytkowników
- Ochrona tras
- Uwierzytelnianie podstawowe HTTP
- Przypomnienia o hasłach i ich resetowanie
- Szyfrowanie
- Sterowniki uwierzytelniania
Przykład #8 pokazuje, jak Laravel implementuje mechanizmy bezpieczeństwa dla szyfrowania. Laravel ułatwia silne szyfrowanie za pomocą OpenSSL i szyfru AES-256-CBC, wykorzystując metodę 'encryptString’ dostarczoną przez fasadę 'Crypt’. Wszystkie zaszyfrowane wartości są podpisane kodem uwierzytelniania wiadomości (MAC), co zapobiega odszyfrowaniu zmodyfikowanych wartości stworzonych przez złośliwych użytkowników.
Przykład kodu implementującego szyfrowanie.

Narzędzia zabezpieczeń
Laravel posiada również zaawansowane narzędzia zabezpieczające, które zapewniają, że Twoje aplikacje lub zależności są wolne od luk bezpieczeństwa, takie jak Enlightn oraz Enlightn Security Checker. Narzędzie zabezpieczające Enlightn służy do skanowania kodu aplikacji, konfiguracji serwera WWW i innych elementów pod kątem podatności bezpieczeństwa oraz problemów z niezawodnością kodu. Enlightn Security Checker jest również wykorzystywane do skanowania zależności w celu wykrycia luk bezpieczeństwa.
.NET
.NET Framework to platforma do tworzenia i uruchamiania aplikacji wyłącznie na systemie Windows. Jest częścią platformy .NET, zbioru technologii do tworzenia aplikacji dla systemów Linux, macOS, Windows, iOS i innych. Została opracowana przez firmę Microsoft i po raz pierwszy wydana 13 lutego 2002 roku. Ostatnia wersja została wydana 1 maja 2021 roku. .NET Framework to pierwotna implementacja otwartego .NET i oferuje szereg klas oraz usług umożliwiających deweloperom pisanie kodu w sposób bezpieczny, korzystanie z kryptografii oraz wdrażanie zabezpieczeń opartych na rolach.
.NET składa się z dwóch głównych komponentów:
- Common Language Runtime (CLR): CLR to silnik wykonawczy, który obsługuje uruchamianie aplikacji. Oferuje również usługi takie jak bezpieczeństwo, zarządzanie pamięcią i obsługa wyjątków.
- .NET Framework Class Library (FCL): FCL to ogromna biblioteka przetestowanego, wielokrotnego użytku kodu, do którego deweloperzy mogą odwoływać się w swoich aplikacjach. Zapewnia również interoperacyjność językową między różnymi językami programowania.
Bezpieczeństwo oparte na rolach, kryptografia i zabezpieczenia aplikacji
.NET oferuje zabezpieczenia oparte na rolach, które pomagają rozwiązywać problemy bezpieczeństwa związane z mobilnym kodem oraz zapewniają wsparcie umożliwiające komponentom określenie, co użytkownicy mogą zrobić. .NET przestrzega również rozszerzalnego modelu kryptografii i implementuje wiele standardowych algorytmów kryptograficznych. Dodatkowo kod aplikacji przestrzega wytycznych bezpiecznego kodowania, aby egzekwować zabezpieczenia aplikacji.
Bezpieczeństwo oparte na rolach
Bezpieczeństwo oparte na rolach w .NET wspiera autoryzację, udostępniając informacje o głównym podmiocie (związanej tożsamości) oparte na koncie systemu Windows lub niestandardowej tożsamości niezwiązanej z kontem systemu Windows. Aplikacje .NET mogą podejmować decyzje dotyczące autoryzacji na podstawie tożsamości lub roli głównego podmiotu, bądź obu.
Główny podmiot może być członkiem jednej lub wielu ról, a aplikacje .NET mogą wykorzystać przynależność do roli do określenia, czy podmiot ma uprawnienia do wykonania żądanej akcji.
Model kryptograficzny
Model kryptograficzny w .NET jest rozszerzalny i oferuje implementacje wielu standardowych algorytmów kryptograficznych, zarówno symetrycznych, jak i asymetrycznych, takich jak AES, RSA czy ECDiffieHellman, znany również jako Elliptic Curve Diffie-Hellman (ECDH).
.NET posiada implementacje do generowania kluczy symetrycznych i asymetrycznych, szyfrowania i deszyfrowania danych, kryptograficznych podpisów cyfrowych, szyfrowania XML z kluczami kryptograficznymi lub certyfikatami X.509 i wielu innych funkcji zapewniających bezpieczną komunikację wyłącznie między nadawcą a odbiorcą, a nie z aktorami zagrożeń.
Zabezpieczenia aplikacji i wytyczne bezpiecznego kodowania
.NET oferuje wytyczne bezpiecznego kodowania, które zapewniają, że kod aplikacji jest bardzo bezpieczny, eliminując luki i zapobiegając wykorzystaniu aplikacji przez aktorów zagrożeń. Luki te obejmują niewłaściwą walidację danych wejściowych lub warunki wyścigu, gdy wątki korzystają z tej samej współdzielonej pamięci do aktualizacji wartości zmiennych.
zgodne z wytycznymi dla bezpiecznego kodu:
- Nie używaj Code Access Security (CAS)
- Nie używaj częściowo zaufanego kodu
- Nie używaj atrybutu ‘AllowPartiallyTrusted’ (APTCA)
- Nie używaj .NET Remoting
- Nie używaj Distributed Component Object Model (DCOM)
- Nie używaj binarnych formatterów
Zgodnie z wytycznymi bezpiecznego kodowania, CAS oraz Code Security-Transparent Code nie są obsługiwane w przypadku częściowo zaufanego kodu. Ładowanie i wykonywanie kodu o nieznanym pochodzeniu bez wprowadzenia alternatywnych środków bezpieczeństwa jest zdecydowanie niezalecane.
Alternatywne środki bezpieczeństwa:
- Wirtualizacja
- Kontenery Hyper-V
- Użytkownicy systemu operacyjnego (OS) i uprawnienia
- AppContainers
Platforma .NET implementuje różne mechanizmy zabezpieczeń zaktualizowane o wytyczne bezpiecznego kodowania, które pomagają deweloperom tworzyć bezpieczniejsze aplikacje Windows. Jest to opcja dla startupów, które koncentrują się na tworzeniu oprogramowania dla aplikacji Windows.
!Następny artykuł w serii będzie dotyczył naszej trzeciej rekomendacji zabezpieczeń dla startupów – konfiguracja usługi SSE.
Podsumowanie
Tworzenie aplikacji internetowych za pomocą nowoczesnych, bezpiecznych frameworków i bibliotek oprogramowania jest kluczowe dla cyberbezpieczeństwa startupów, gdy aplikacje internetowe stanowią najczęstszy wektor ataków cybernetycznych. Do tych frameworków i bibliotek należą Spring Security, Django, CakePHP, Angular, React, Laravel i .NET. Każdy z nich pełni unikalną funkcję; niektóre są bardziej kompatybilne z potrzebami startupu, w zależności od celów rozwoju oprogramowania w Twojej firmie. Zrozumienie praktyk bezpiecznego kodowania, modelowania zagrożeń, STRIDE, OWASP Top 10, OWASP ASVS oraz cyklu życia bezpiecznego wytwarzania oprogramowania (SSDLC) pozwala startupowi i jego deweloperom wyprzedzić konkurencję w obszarze bezpieczeństwa aplikacji.
Źródła:
- https://auth0.com/blog/hashing-in-action-understanding-bcrypt/
- https://careerkarma.com/blog/companies-that-use-django/
- https://www.marcobehler.com/guides/spring-security
- https://book.cakephp.org/4/en/controllers/components/security.html
- https://djangostars.com/blog/why-we-use-django-framework/
- https://docs.djangoproject.com/en/4.0/topics/security/
- https://medium.com/@hashedin/protect-your-django-web-application-from-security-threats-9ebafbabbadd
https://www.trio.dev/blog/companies-use-angular - https://snyk.io/blog/angular-security-best-practices/
https://snyk.io/blog/10-react-security-best-practices/ - https://www.cloudways.com/blog/laravel-security/
https://adevait.com/laravel/security-in-laravel - https://laravel.com/docs/9.x/encryption
- https://docs.microsoft.com/en-us/dotnet/standard/security/
- https://laravel.com/docs/4.2/security

Porozmawiajmy o przeprowadzaniu badań bezpieczeństwa aplikacji internetowej
Umów się na rozmowę z ekspertem ds. cyberbezpieczeństwa
Czy artykuł jest pomocny? Podziel się nim ze swoimi znajomymi.