Czy Twoja aplikacja jest naprawdę gotowa na realne cyberzagrożenia, czy tylko przeszła podstawowy skan i ma „odhaczone” kilka ticketów bezpieczeństwa? W wielu zespołach problem nie polega na całkowitym ignorowaniu bezpieczeństwa, tylko na myleniu listy kontrolnej z rzeczywistym zarządzaniem ryzykiem. Właśnie dlatego OWASP Top 10 od lat działa jako wspólny język między developerami, CTO i bezpieczeństwem. To projekt OWASP publikowany jako standard świadomości zagrożeń dla twórców aplikacji webowych, oparty na szerokim konsensusie społeczności i aktualizowany cyklicznie, zwykle co 3–4 lata, tak by porządkować zmieniające się priorytety obrony i wektory ataku na stronie OWASP Top 10.
W polskich realiach ta lista jest czymś więcej niż zestawem modnych haseł. To punkt odniesienia dla zespołów budujących aplikacje webowe, SaaS i systemy zintegrowane, czyli dokładnie tych środowisk, w których błędy bezpieczeństwa zwykle wynikają nie z jednego „wielkiego” buga, ale z setek małych decyzji architektonicznych, konfiguracyjnych i procesowych. Jeśli odpowiadasz za ochronę danych klientów, to OWASP Top 10 nadal jest jednym z najlepszych miejsc, od których warto zacząć.
Ten przewodnik nie traktuje listy jak akademickiej definicji podatności. Potraktuj go jak praktyczny zestaw działań dla zespołu, który dowozi kod, utrzymuje CI/CD, buduje API, wdraża kontenery i nie ma czasu na security theatre. Najważniejsze pytanie nie brzmi: „czy znamy te kategorie?”, tylko: „czy umiemy przełożyć je na architekturę, review, pipeline i monitoring?”.
1. A01 2021 Broken Access Control
Jedna z najważniejszych zmian w wydaniu 2021 była bardzo wymowna. Broken Access Control trafiło na pierwsze miejsce po analizie, według której 94% testowanych aplikacji miało ten problem w jakiejś formie w omówieniu Splunk. To nie jest niszowa klasa błędów. To codzienność aplikacji wieloużytkownikowych, paneli administracyjnych, SaaS-ów i API z rolami.

Najczęstszy błąd nie wygląda spektakularnie. Użytkownik zmienia userId w URL albo tenantId w parametrze API i nagle widzi dane, których nie powinien zobaczyć. Drugi typowy scenariusz to endpoint, który ukrywa przycisk w UI, ale po stronie serwera i tak wykonuje operację administracyjną.
Co działa w praktyce
Kontrola dostępu musi być wymuszana po stronie serwera i to na każdym żądaniu. Sam frontend nie jest mechanizmem bezpieczeństwa. Jeśli endpoint zwraca dane na podstawie identyfikatora z requestu bez sprawdzenia relacji użytkownik-zasób, to masz problem nawet wtedy, gdy interfejs wygląda poprawnie.
Dobre wdrożenie zwykle zaczyna się od jednego wzorca autoryzacji dla całego systemu. W prostszych systemach wystarczy RBAC. W bardziej złożonych aplikacjach multi-tenant albo workflow-driven lepiej sprawdza się ABAC lub polityki oparte na kontekście, np. relacji do organizacji, ownership, regionu albo typu operacji.
Praktyczna reguła: Każdy endpoint powinien odpowiadać na dwa pytania osobno. „Kim jesteś?” i „czy wolno ci wykonać tę konkretną akcję na tym konkretnym zasobie?”.
- Wymuszaj autoryzację centralnie. Trzymaj polityki w middleware, guardach albo warstwie serwisowej, zamiast rozrzucać
if role == adminpo kontrolerach. - Testuj negatywne scenariusze. Większość zespołów testuje poprawne logowanie, ale nie sprawdza, czy zwykły user może odczytać cudzy rekord.
- Loguj decyzje autoryzacyjne. Nie tylko udane logowanie, ale też odmowy dostępu, zmianę roli, dostęp do danych wrażliwych i operacje administracyjne.
W mikroserwisach problem rośnie. Jeden serwis sprawdza rolę, drugi ufa nagłówkom, trzeci zakłada, że upstream już wszystko zweryfikował. Takie systemy pękają na styku integracji. Jeśli budujesz architekturę rozproszoną, trzymaj spójny model tożsamości i spójny sposób egzekwowania uprawnień.
2. A02 2021 Cryptographic Failures
Błędy kryptograficzne rzadko zaczynają się od „złamanego szyfrowania” w sensie matematyki. Zwykle zaczynają się od złych decyzji operacyjnych. Hasła hashowane przestarzałym algorytmem, brak TLS na fragmencie ruchu, klucze zaszyte w repozytorium, certyfikat zaakceptowany „na chwilę” bez walidacji.

W praktyce trzeba rozdzielić trzy obszary. Dane w tranzycie, dane w spoczynku i zarządzanie kluczami. Zespoły często koncentrują się na pierwszym, bo HTTPS jest widoczny. Najwięcej problemów wychodzi jednak przy drugim i trzecim, bo tam błędy są mniej oczywiste.
Najczęstsze pułapki
Nie wdrażaj własnej kryptografii, jeśli możesz użyć sprawdzonego mechanizmu frameworka, biblioteki lub usługi KMS. To dotyczy też przechowywania haseł. Tu nie ma miejsca na kreatywność. Potrzebujesz standardowych algorytmów do hashowania haseł, poprawnej obsługi soli i sensownego procesu rotacji sekretów.
W warstwie transportowej podstawą jest pełne wymuszenie TLS i sensowna polityka nagłówków. Jeśli chcesz uporządkować ten obszar od strony przeglądarki i certyfikatów, dobrym uzupełnieniem jest materiał o tym, jak działa HTTPS i bezpieczeństwo danych w przeglądarce.
- Szyfruj to, co naprawdę wrażliwe. Dane osobowe, sekrety integracyjne, tokeny odświeżające, dane płatnicze i pliki eksportów.
- Oddziel klucze od aplikacji. Sekret w
.envwrzucony do repo lub artefaktu deploymentowego to nadal częsty błąd. - Pilnuj logów i backupów. Dane mogą być dobrze chronione w bazie, ale w plaintext trafić do logów, zrzutów błędów albo snapshotów.
W dobrze zorganizowanym pipeline kryptografia nie kończy się na kodzie. Obejmuje polityki certyfikatów, skanowanie sekretów, rotację kluczy i kontrolę nad tym, kto może pobierać sekrety z KMS czy Key Vault. To jest obszar, w którym „mamy HTTPS” nie znaczy prawie nic.
3. A03 2021 Injection
Injection to klasyka, ale nie tylko SQL injection. W realnych systemach równie groźne są NoSQL injection, command injection, LDAP injection czy wstrzykiwanie do silników szablonów. Wspólny wzorzec jest prosty. Aplikacja bierze dane od użytkownika i traktuje je jak część polecenia.

Najbardziej niebezpieczne są miejsca, które zespół uważa za „wewnętrzne”, więc słabiej je chroni. Generator raportów odpalający polecenie shellowe. Filtr wyszukiwania budowany dynamicznie. Integracja z katalogiem LDAP. Import danych, który przyjmuje zbyt dużo swobody.
Jak ograniczyć ryzyko bez spowalniania developmentu
Najlepsza decyzja to taka, która odbiera programiście możliwość popełnienia błędu. Parametryzowane zapytania, ORM z poprawnym bindowaniem wartości, whitelisty na dozwolone pola sortowania i filtrowania, brak wykonywania komend systemowych tam, gdzie można użyć biblioteki.
Sama walidacja wejścia nie wystarczy. Jeśli aplikacja dopuszcza dowolne wyrażenia, a potem skleja je do zapytania, to walidacja stanie się grą w kotka i myszkę. Bezpieczniejszy wzorzec to mapowanie wejścia użytkownika na zamknięty zbiór dozwolonych operacji.
Nie pytaj, jak wykryć wszystkie złe znaki. Ustal, jakie dane w tym miejscu są w ogóle legalne.
- Stosuj prepared statements wszędzie. Jeden wyjątek zwykle zamienia się w stały dług techniczny.
- Oddziel dane od poleceń. Dotyczy to SQL, shella, LDAP, wyszukiwarek i szablonów.
- Ogranicz uprawnienia kont technicznych. Nawet jeśli dojdzie do injection, konto bazy nie powinno móc robić wszystkiego.
Dobrze działa też połączenie review z testami bezpieczeństwa. Jeśli zespół regularnie robi testy penetracyjne aplikacji webowych, szybciej wychwytuje miejsca, gdzie walidacja wygląda sensownie, ale przepływ danych nadal pozwala na nadużycie.
4. A04 2021 Insecure Design
Niebezpieczny projekt to kategoria, której nie naprawisz jednym patchem. Jeśli system od początku nie przewiduje limitów prób, ścieżki audytowej, izolacji tenantów albo reguł dla operacji wysokiego ryzyka, później zwykle kończy się to kosztownym refaktorem.

Dobry przykład to reset hasła. Wielu developerów myśli o tokenie i formularzu, ale nie o nadużyciach. Co z ograniczeniem prób? Co z wygasaniem tokenu? Co z unieważnieniem poprzednich linków? Co z logowaniem tej operacji? Jeśli tych pytań nie zadano na etapie projektu, implementacja będzie formalnie „działała”, ale nadal będzie ryzykowna.
Security by design zamiast security by patch
W praktyce najlepiej działają zespoły, które wpisują wymagania bezpieczeństwa do backlogu razem z wymaganiami funkcjonalnymi. Nie obok. Razem. User story typu „admin może eksportować dane” bez dopisania zakresu, autoryzacji, ścieżki audytowej i ograniczeń eksportu jest po prostu niedokończone.
Modelowanie zagrożeń nie musi być wielkim warsztatem. W wielu projektach wystarczy krótka sesja przy architekturze. Jakie są aktory, zasoby, wejścia, granice zaufania, skutki nadużycia i punkty obserwowalności. To często daje więcej niż kolejny skan uruchomiony po wdrożeniu.
- Definiuj granice zaufania. Między frontendem a API, między serwisami, między tenantami, między aplikacją a zewnętrznym providerem.
- Projektuj ograniczenia nadużyć. Rate limiting, limity eksportu, cooldowny, approval flow dla operacji wysokiego ryzyka.
- Uwzględniaj reakcję na incydent. Jeśli coś pójdzie źle, musisz wiedzieć kto, kiedy i co zrobił.
Jeśli zespół potrzebuje uporządkować ten etap szerzej, pomocne jest myślenie o zarządzaniu ryzykiem IT jako części procesu projektowego, a nie dodatku przed audytem. To właśnie tutaj rozstrzyga się, czy bezpieczeństwo będzie spójne, czy tylko reaktywne.
5. A05 2021 Security Misconfiguration
Błędna konfiguracja bezpieczeństwa długo była traktowana jak „sprawy infra”. To już nie działa. W środowiskach cloud-native, kontenerach i CI/CD konfiguracja jest częścią aplikacji. Jeśli źle ustawisz IAM, bucket, ingress, sekrety, nagłówki lub tryb debug, to ryzyko jest równie realne jak błąd w kodzie.
Co ważne, w nowszym wydaniu 2025 Security Misconfiguration przesunęło się na pozycję #2, a Software Supply Chain Failures na #3. Jednocześnie OWASP podkreśla, że Top 10 to dokument świadomościowy dla aplikacji webowych, a nie kompletny model ryzyka dla mobile, API, K8s czy LLM w analizie Oligo Security. To ważna korekta myślenia. Samo „naprawiliśmy XSS i SQLi” nie mówi jeszcze wiele o realnej ekspozycji systemu.
Potrzebujesz audytu bezpieczeństwa Twojej aplikacji?
Skontaktuj się z nami. Nasi inżynierowie przeprowadzą kompleksowe testy i pomogą wdrożyć rekomendacje, zapewniając zgodność z najwyższymi standardami bezpieczeństwa.
Gdzie konfiguracja psuje bezpieczeństwo najczęściej
Najczęstszy problem to rozdźwięk między tym, co zespół uważa za środowisko produkcyjne, a tym, co faktycznie zostało wdrożone. Publiczny bucket „na chwilę”, nadmiarowe uprawnienia roli serwisowej, otwarte security group, kontener uruchomiony jako root, szczegółowe stack trace w odpowiedzi API, wyłączone RBAC w klastrze.
Tu nie wystarczy dokumentacja. Potrzebujesz automatycznej kontroli konfiguracji przy każdym deploymencie.
- Traktuj konfigurację jak kod. Terraform, manifesty, polityki i review w repozytorium.
- Skanuj IaC oraz obrazy kontenerów. Błąd wykryty przed deploymentem kosztuje najmniej.
- Wyłącz domyślne i zbędne funkcje. Debug, listowanie katalogów, testowe endpointy, nieużywane porty i stare panele administracyjne.
Dobra konfiguracja bezpieczeństwa jest nudna. I właśnie dlatego działa.
W praktyce najlepiej sprawdza się połączenie benchmarków dostawcy chmury, skanerów konfiguracji w pipeline i okresowego przeglądu uprawnień. Jeśli zespół robi to ręcznie, to wcześniej czy później coś przeoczy.
6. A06 2021 Vulnerable and Outdated Components
Ten obszar jest zdradliwy, bo wiele zespołów myśli: „to tylko biblioteka”. Problem w tym, że nowoczesna aplikacja składa się z ogromnej liczby komponentów, których nikt nie czytał linia po linii. Framework backendowy, paczki npm, obrazy bazowe Dockera, akcje CI, pluginy builda, SDK dostawców zewnętrznych. Każdy z tych elementów wnosi ryzyko.
Dla projektów mobilnych i API klasyczna webowa lista też bywa zbyt wąska. OWASP Mobile Top 10 zostało odświeżone w 2024 roku i mocno akcentuje M2 Inadequate Supply Chain Security, M3 Insecure Authentication/Authorization oraz M6 Inadequate Privacy Controls na stronie OWASP Mobile Top 10. To ważne dla zespołów mobile-first i SaaS, bo ryzyko przesuwa się z pojedynczego błędu kodu na cały łańcuch dostaw, uprawnienia SDK i prywatność danych.
Jak robić dependency management sensownie
Nie chodzi o to, żeby aktualizować wszystko natychmiast po każdym release biblioteki. To często kończy się chaosem. Potrzebna jest polityka. Co aktualizujemy automatycznie, co przechodzi review, co ma priorytet bezpieczeństwa, a co może poczekać do planowanego okna zmian.
SBOM bardzo pomaga, bo wreszcie wiadomo, co naprawdę jest w produkcji. Bez niego zespoły zwykle znają tylko zależności pierwszego poziomu, a nie to, co zostało dociągnięte głębiej.
- Utrzymuj lock files i wersjonowanie zależności. Reprodukowalny build jest ważniejszy niż „najnowsze zawsze”.
- Skanuj obrazy kontenerów i zależności w CI/CD. Nie dopiero po wdrożeniu.
- Usuwaj nieużywane pakiety. Najbezpieczniejsza podatna biblioteka to ta, której w systemie nie ma.
W praktyce najlepsze zespoły łączą dwa rytmy. Małe, regularne aktualizacje utrzymaniowe oraz osobny tryb dla poprawek bezpieczeństwa. Jeśli odkładasz aktualizacje miesiącami, koszt wejścia rośnie tak bardzo, że zespół zaczyna ich unikać.
7. A07 2021 Identification and Authentication Failures
Błędy identyfikacji i uwierzytelniania najczęściej nie wynikają z braku logowania. Wynikają z tego, że logowanie i sesja zostały potraktowane jako funkcja produktowa, a nie jako krytyczny mechanizm bezpieczeństwa. Formularz działa, token się wydaje, użytkownik wchodzi. Tylko że obok często brakuje rate limitu, MFA dla operacji wrażliwych, sensownego wygaszania sesji i ochrony procesu odzyskiwania konta.
Szczególnie niebezpieczne są ścieżki „awaryjne”. Reset hasła, zmiana e-maila, usunięcie MFA, podniesienie uprawnień. Tam zespoły często luzują zasady, żeby nie blokować UX. To zrozumiały odruch, ale właśnie te miejsca są najczęściej nadużywane.
Co poprawia bezpieczeństwo bez psucia użyteczności
Najlepszy efekt daje używanie sprawdzonych standardów i gotowych komponentów. OAuth 2.0, OpenID Connect, poprawnie ustawione ciasteczka sesyjne, standardowe biblioteki do hashowania haseł i jednoznaczne reguły wygaśnięcia sesji. Własne mechanizmy uwierzytelniania prawie zawsze okazują się droższe i bardziej ryzykowne.
W systemach B2B warto oddzielić logowanie od autoryzacji operacji wysokiego ryzyka. Użytkownik może być poprawnie zalogowany, ale eksport danych, reset MFA innego użytkownika czy zmiana konfiguracji integracji powinny wymagać dodatkowego potwierdzenia.
- Włącz ograniczanie prób logowania. Bez tego brute force i credential stuffing są tylko kwestią czasu.
- Traktuj reset hasła jak operację uprzywilejowaną. Krótkie życie tokenu, unieważnianie poprzednich linków, pełne logowanie zdarzeń.
- Chroń sesję po stronie przeglądarki.
Secure,HttpOnly,SameSite, brak tokenów w URL i brak nadmiernie długich sesji.
Najsłabszym punktem uwierzytelniania często nie jest ekran logowania. Jest nim odzyskiwanie dostępu.
Jeśli aplikacja rośnie, warto też wyznaczyć jeden właścicielski zespół lub komponent odpowiedzialny za tożsamość. Rozproszenie tego obszaru między kilka modułów szybko prowadzi do niespójności.
8. A08 2021 Software and Data Integrity Failures
To jedna z tych kategorii, które dobrze pokazują zmianę myślenia w AppSec. Problem nie kończy się na kodzie źródłowym. Obejmuje cały łańcuch zaufania. Build, artefakty, workflow CI/CD, pochodzenie akcji automatyzacji, deserializację danych, podpisy wydań i kontrolę nad repozytorium artefaktów.
W wielu firmach pipeline jest zaufany domyślnie. A nie powinien. Jeśli workflow może uruchomić niezweryfikowaną akcję, pobrać artefakt bez sprawdzenia integralności albo wypchnąć obraz bez skanu i review, to w praktyce otwierasz furtkę do ataku na łańcuch dostaw.
Gdzie warto postawić granice
Najbardziej praktyczna zasada brzmi: wszystko, co trafia do produkcji, powinno mieć jasno określone pochodzenie. Kto zatwierdził kod, jaki pipeline zbudował artefakt, z jakiej wersji zależności korzystał build i czy obraz został przeskanowany przed publikacją.
Drugi obszar to deserializacja. Jeśli aplikacja przyjmuje złożone dane i bezpiecznie ich nie mapuje, możesz niechcący wykonać logikę, której nigdy nie chciałeś uruchamiać. JSON z twardo określonym schematem jest zwykle bezpieczniejszym wyborem niż mechanizmy, które odtwarzają obiekty z nadmiarem swobody.
- Zabezpiecz CI/CD jak system produkcyjny. MFA, minimalne uprawnienia, review zmian workflow, pełen audit trail.
- Weryfikuj artefakty przed wdrożeniem. Podpisy, skany, pochodzenie obrazu i niezmienne repozytorium.
- Chroń gałęzie i release process. Podpisane commity i obowiązkowe review nie są biurokracją, tylko kontrolą integralności.
Tu nie działa myślenie „przecież to nasz wewnętrzny pipeline”. Jeśli przez ten pipeline przechodzi każdy release, to jest to jeden z najważniejszych elementów bezpieczeństwa całego produktu.
9. A09 2021 Security Logging and Monitoring Failures
Brak dobrego logowania to nie tylko problem operacyjny. To realna luka bezpieczeństwa. Jeśli nie logujesz prób logowania, odmów dostępu, zmian konfiguracji, działań administratora i dostępu do danych wrażliwych, to po incydencie będziesz zgadywać, co się wydarzyło.
Drugi częsty błąd jest odwrotny. Logujesz wszystko, łącznie z hasłami, tokenami, danymi osobowymi i pełnymi payloadami. To też jest zagrożenie. Dobre logowanie musi jednocześnie dawać ścieżkę audytową i ograniczać wyciek informacji.
Jak logować tak, żeby to miało sens
Log bezpieczeństwa powinien odpowiadać na kilka pytań. Kto wykonał akcję, kiedy, z jakiego źródła, na jakim zasobie, z jakim wynikiem i czy działanie było normalne dla tej roli. Bez tego korelacja zdarzeń staje się ręcznym śledztwem.
W praktyce potrzebujesz centralizacji. Lokalne logi na pojedynczym serwerze są bezużyteczne przy architekturze rozproszonej i łatwe do utraty po incydencie. Jeśli chcesz uporządkować ten obszar, przydatny jest materiał o tym, czy warto monitorować aplikacje, bo dobrze pokazuje związek między obserwowalnością a bezpieczeństwem.
- Loguj zdarzenia bezpieczeństwa, nie tylko błędy aplikacyjne. To dwie różne rzeczy.
- Czyść dane wrażliwe przed zapisem. Hasła, tokeny, sekrety i nadmiarowe dane osobowe nie powinny trafiać do logów.
- Ustal alerty na wzorce nadużyć. Nietypowe serie odrzuconych logowań, masowe odczyty, zmiany ról, ruch po godzinach, nagłe wzrosty błędów autoryzacji.
W tym obszarze liczy się też retencja i procedura reakcji. Sam SIEM nie rozwiązuje problemu. Ktoś musi wiedzieć, które alerty są ważne, jak je triage'ować i co zrobić po wykryciu incydentu.
10. A10 2021 Server Side Request Forgery
SSRF często wchodzi do systemu przez „niewinne” funkcje. Import obrazka z URL, pobranie dokumentu z podanego adresu, preview webhooka, fetch metadanych z zewnętrznej strony. Jeśli serwer wykonuje żądanie na podstawie danych od użytkownika, to trzeba założyć, że ktoś spróbuje wysłać go tam, gdzie nie powinien iść.
Typowy scenariusz to dostęp do zasobów wewnętrznych lub usług metadanych chmury. Ale równie groźne bywa wykorzystanie aplikacji do skanowania wewnętrznej sieci albo pobierania odpowiedzi z systemów administracyjnych.
Jak odciąć ten wektor skutecznie
Najważniejsza zasada jest prosta. Nie ufaj adresowi URL tylko dlatego, że wygląda poprawnie. Walidacja składni to za mało. Trzeba kontrolować też rozwiązywanie DNS, przekierowania, docelowy adres IP i możliwość sięgnięcia do zakresów wewnętrznych.
W praktyce najlepiej działa połączenie kontroli aplikacyjnej i sieciowej. Sama aplikacja może czegoś nie przewidzieć. Sama sieć nie zrozumie kontekstu biznesowego.
- Wprowadzaj whitelisty domen i schematów. Jeśli funkcja ma pobierać pliki z kilku znanych źródeł, nie przyjmuj dowolnego URL.
- Blokuj ruch do adresów wewnętrznych i metadanych. To powinno być wymuszone także na poziomie egress.
- Loguj żądania wychodzące inicjowane przez użytkownika. Bez tego trudno zauważyć próby nadużycia.
Coraz częściej SSRF pojawia się też jako efekt uboczny integracji z webhookami, parserami dokumentów i usługami AI, które pobierają kontekst z zewnętrznych źródeł. To już nie jest problem pojedynczego endpointu, tylko całego modelu zaufania do ruchu wychodzącego.
Porównanie OWASP Top 10
| Zagrożenie (OWASP) | Złożoność implementacji | Wymagane zasoby | Oczekiwane rezultaty | Idealne zastosowania | Kluczowe zalety |
|---|---|---|---|---|---|
| A01: Broken Access Control (Błędna kontrola dostępu) | Średnia–wysoka; wymaga spójnej autoryzacji w wielu miejscach | RBAC/ABAC, przeglądy kodu, testy autoryzacji, logowanie audytowe | Zapobieganie nieautoryzowanemu dostępowi i eskalacji uprawnień | SaaS multi‑tenant, systemy finansowe, panele administracyjne | Zmniejsza ryzyko wycieków danych; dobrze udokumentowane wzorce |
| A02: Cryptographic Failures (Błędy kryptograficzne) | Średnia; poprawna konfiguracja algorytmów i KMS | KMS/Key Vault, certyfikaty TLS, biblioteki kryptograficzne | Ochrona danych w tranzycie i w spoczynku; zgodność z regulacjami | Płatności, przechowywanie PII, systemy zdrowotne | Dostępność standardów i zarządzanych usług; wysoka odporność przy poprawnym wdrożeniu |
| A03: Injection (Wstrzykiwanie) | Niska–średnia; znane wzorce zapobiegania, ale rozproszone | Prepared statements/ORM, walidacja wejścia, WAF, testy automatyczne | Eliminacja wstrzyknięć, ochrona baz danych i zapobieganie RCE | Aplikacje webowe, API, formularze przyjmujące dane od użytkownika | Jasne, skuteczne techniki zapobiegania i narzędzia do wykrywania |
| A04: Insecure Design (Niebezpieczny projekt) | Wysoka; wymaga modelowania zagrożeń i zmian architektonicznych | Architekci bezpieczeństwa, narzędzia STRIDE/PASTA, przeglądy projektowe | Redukcja wad logiki biznesowej i kosztów późnych poprawek | Nowe projekty, MVP, systemy krytyczne biznesowo | Zapobieganie problemom na etapie projektowania; oszczędność kosztów |
| A05: Security Misconfiguration (Błędna konfiguracja bezpieczeństwa) | Niska–średnia; możliwa do zautomatyzowania | Infrastructure-as-Code, skanery konfiguracji, CI/CD | Mniej błędnych ustawień i mniejsze ryzyko wycieków zasobów | Wdrożenia chmurowe, kontenery, Kubernetes | Wysoka skuteczność przy automatyzacji i politykach konfiguracji |
| A06: Vulnerable and Outdated Components (Podatne i przestarzałe komponenty) | Niska–średnia; procesy zarządzania zależnościami | SBOM, skanery zależności, harmonogramy aktualizacji | Zmniejszenie ryzyka CVE i ataków na łańcuch dostaw | Projekty z wieloma zewnętrznymi bibliotekami, obrazy kontenerowe | Zautomatyzowane wykrywanie; jasna ścieżka naprawy przez aktualizację |
| A07: Identification and Authentication Failures (Błędy identyfikacji i uwierzytelniania) | Średnia; implementacja MFA i bezpiecznych sesji | Usługi tożsamości (OAuth/OIDC), MFA, zarządzanie sesjami | Ograniczenie przejęć kont i oszustw; lepsza kontrola dostępu | Portale użytkowników, aplikacje finansowe, systemy z wrażliwymi operacjami | Gotowe standardy i usługi; poprawia zaufanie użytkowników |
| A08: Software and Data Integrity Failures (Błędy integralności oprogramowania i danych) | Wysoka; zabezpieczenie CI/CD i łańcucha dostaw | Podpisy kodu, zabezpieczone CI/CD, skanery artefaktów, SBOM | Ochrona przed wstrzyknięciem złośliwego kodu i kompromitacją pipeline'ów | Dostawcy oprogramowania, projekty z automatycznym wydawaniem artefaktów | Podpisy i weryfikacja zwiększają integralność i zaufanie |
| A09: Security Logging and Monitoring Failures (Błędy logowania i monitorowania) | Średnia; wymaga SIEM i procedur reagowania na incydenty | Centralne logowanie, SIEM, retencja, zespół SOC/analiza | Szybsze wykrywanie i skuteczne badanie incydentów | Przedsiębiorstwa, systemy regulowane, aplikacje krytyczne | Umożliwia szybsze reagowanie i spełnianie wymogów audytowych |
| A10: Server‑Side Request Forgery (SSRF) | Średnia; walidacja URL i reguły sieciowe | Białe listy domen, filtrowanie DNS/IP, proxy, monitorowanie żądań wych. | Ochrona zasobów wewnętrznych i metadanych chmurowych | Funkcje przyjmujące URL (webhooki, proxy obrazów, import z URL) | Skuteczne zapobieganie przez walidację, izolację sieci i proxy |
Bezpieczeństwo to proces, nie jednorazowe działanie
Jak wygląda bezpieczeństwo aplikacji po roku od wdrożenia. Czy nadal działa zgodnie z założeniami, czy tylko sprawia takie wrażenie?
OWASP Top 10 dobrze porządkuje rozmowę o ryzyku, ale samo przeczytanie listy niewiele zmienia. Efekt pojawia się dopiero wtedy, gdy zespół przekłada każdą kategorię na konkretne decyzje w architekturze, backlogu, code review, pipeline i utrzymaniu produkcji. W praktyce to oznacza jasne wymagania dla nowych funkcji, automatyczne kontrole w CI/CD i monitoring, który pozwala odróżnić incydent od zwykłego szumu operacyjnego.
To podejście ma znaczenie zwłaszcza w zespołach budujących API, systemy SaaS i środowiska cloud-native. Aplikacja rzadko kończy się dziś na warstwie webowej. Dochodzą integracje z usługami zewnętrznymi, kontenery, IaC, zależności open source, mobilne klienty i coraz częściej komponenty oparte o modele językowe. Dlatego sam Top 10 trzeba traktować jako fundament, a nie pełny model ochrony. Jeśli produkt korzysta z LLM, warto uwzględnić także ryzyka opisane na stronie projektu OWASP dla aplikacji LLM, takie jak Prompt Injection, Insecure Output Handling czy problemy z łańcuchem dostaw modeli i narzędzi.
Najlepsze zespoły robią z tego część procesu wytwórczego, nie osobny etap na końcu sprintu.
W praktyce sprawdza się prosty układ pracy. Na etapie architektury zespół ustala granice zaufania, model dostępu, sposób obsługi sekretów i wymagania audytowe. W CI/CD uruchamia SAST, skanowanie zależności, kontrolę obrazów kontenerów, reguły dla IaC i polityki blokujące wydanie przy błędach o ustalonej wadze. Po wdrożeniu dochodzą logi bezpieczeństwa, alerty oparte na scenariuszach nadużyć, przeglądy uprawnień i cykliczna weryfikacja konfiguracji. Taki model jest mniej efektowny niż jednorazowy audyt, ale znacznie lepiej działa w długim okresie.
To też dobry moment, żeby mówić o checkliście dla zespołu, a nie tylko o katalogu zagrożeń. Dla kontroli dostępu warto wymagać testów autoryzacji dla endpointów i przeglądu ról przy każdej większej zmianie. Dla kryptografii, inwentaryzacji miejsc przetwarzania danych wrażliwych i weryfikacji konfiguracji kluczy oraz sekretów. Dla podatności w komponentach, regularnego odświeżania zależności, SBOM i zasad wyjątków z datą wygaśnięcia. Dla monitoringu, listy zdarzeń, które muszą trafić do centralnych logów, wraz z właścicielem alertu i procedurą reakcji.
Najczęstszy błąd organizacyjny jest prosty. Funkcja trafia do planu, a bezpieczeństwo zostaje dopisane później.
Taki model zwykle kończy się kosztownymi poprawkami, lokalnymi wyjątkami i architekturą pełną kompromisów, których nikt już nie kontroluje. Kontrolę dostępu trzeba zaprojektować przed implementacją. Logowanie zdarzeń trzeba uwzględnić przed uruchomieniem produkcji. Zasady komunikacji między usługami, ograniczenia sieciowe i sposób rotacji sekretów też trzeba ustalić wcześniej. Inaczej zespół łata objawy zamiast usuwać przyczynę.
Dobrze prowadzony proces bezpieczeństwa nie oznacza braku ryzyka. Oznacza, że ryzyko jest nazwane, przypisane do właściciela, sprawdzane automatycznie tam, gdzie to możliwe, i obserwowane po wdrożeniu. Właśnie dlatego OWASP Top 10 ma największą wartość jako wspólny język dla developerów, architektów, DevOpsów i osób odpowiedzialnych za utrzymanie. Nie jako lista do odhaczenia, tylko jako zestaw wymagań, które da się wpisać w codzienną pracę zespołu.
