{"id":35324,"date":"2026-09-29T17:03:55","date_gmt":"2026-09-29T17:03:55","guid":{"rendered":"https:\/\/appricotsoft.com\/"},"modified":"2026-09-29T17:12:28","modified_gmt":"2026-09-29T17:12:28","slug":"decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne","status":"publish","type":"post","link":"https:\/\/appricotsoft.com\/pl\/blog\/decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne\/","title":{"rendered":"Bezpiecze\u0144stwo od samego pocz\u0105tku: decyzje, kt\u00f3re mo\u017cna podj\u0105\u0107 bez \u017cadnych koszt\u00f3w przed rozpocz\u0119ciem tworzenia"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"35324\" class=\"elementor elementor-35324\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f9a1b5 e-flex e-con-boxed e-con e-parent\" data-id=\"8f9a1b5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-13c9d96 elementor-widget elementor-widget-text-editor\" data-id=\"13c9d96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>\u201eBezpiecze\u0144stwo od samego pocz\u0105tku\u201d nie jest ram\u0105, kt\u00f3r\u0105 si\u0119 wdra\u017ca. To kr\u00f3tka lista decyzji, kt\u00f3re podejmuje si\u0119 przed pierwszym wydaniem, kiedy zmiana zdania nadal nic nie kosztuje. Ca\u0142a istota tkwi w tej asymetrii: decyzja o rezygnacji z gromadzenia danych w danym polu nie wi\u0105\u017ce si\u0119 z \u017cadnymi kosztami przed uruchomieniem, a po nim wymaga migracji oraz wymuszonej aktualizacji klienta. Niniejszy artyku\u0142 stanowi w\u0142a\u015bnie t\u0119 list\u0119, uporz\u0105dkowan\u0105 zgodnie z kolejno\u015bci\u0105, w jakiej zesp\u00f3\u0142 ds. wdro\u017ce\u0144 faktycznie si\u0119 z ni\u0105 zapoznaje.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2c88b32 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2c88b32\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-757e901 elementor-widget elementor-widget-heading\" data-id=\"757e901\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Istota pytania<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8dd0bde elementor-widget elementor-widget-text-editor\" data-id=\"8dd0bde\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Wi\u0119kszo\u015b\u0107 zespo\u0142\u00f3w traktuje bezpiecze\u0144stwo jako oddzielny etap: najpierw tworzy si\u0119 produkt, nast\u0119pnie wzmacnia si\u0119 jego zabezpieczenia, a na ko\u0144cu spisuje si\u0119 wymagania dotycz\u0105ce bezpiecze\u0144stwa na potrzeby kwestionariusza dla klienta. Taka kolejno\u015b\u0107 sprawdza si\u0119 w przypadku element\u00f3w, kt\u00f3re nak\u0142adaj\u0105 si\u0119 na to, co ju\u017c stworzy\u0142e\u015b \u2014 skanowanie zale\u017cno\u015bci, testy penetracyjne, ograniczenia szybko\u015bci. Nie sprawdza si\u0119 jednak w przypadku wszystkiego, co dotyczy modelu danych, modelu uprawnie\u0144 lub ustawie\u0144 domy\u015blnych, poniewa\u017c s\u0105 to elementy no\u015bne. Gdy prawdziwi u\u017cytkownicy zaczn\u0105 na nich polega\u0107, nie podejmujesz ju\u017c decyzji, lecz przeprowadzasz migracj\u0119.<\/p><p>A wi\u0119c praktyczna definicja: <strong>bezpiecze\u0144stwo od samego pocz\u0105tku<\/strong> oznacza podj\u0119cie decyzji o charakterze strukturalnie nieodwracalnym na samym pocz\u0105tku projektu, a te, kt\u00f3rych cofni\u0119cie nie wi\u0105\u017ce si\u0119 z du\u017cymi kosztami, pozostawi\u0107 na p\u00f3\u017aniej. \u017badnych certyfikat\u00f3w, \u017cadnego dedykowanego in\u017cyniera ds. bezpiecze\u0144stwa, \u017cadnych nowych dokument\u00f3w proceduralnych \u2014 wystarczy po prostu wiedzie\u0107, kt\u00f3re decyzje s\u0105 kt\u00f3re. Wi\u0119kszo\u015b\u0107 z tych decyzji zmniejsza powierzchni\u0119 ataku poprzez usuwanie pewnych element\u00f3w, a nie poprzez nak\u0142adanie na nie dodatkowych \u015brodk\u00f3w kontroli.<\/p><p>Oto podzia\u0142, kt\u00f3ry ma znaczenie:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-018e873 elementor-widget elementor-widget-text-editor\" data-id=\"018e873\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<table><thead><tr><th>Decyzja<\/th><th>Koszt przed pierwszym wydaniem<\/th><th>Koszt po uwzgl\u0119dnieniu rzeczywistych u\u017cytkownik\u00f3w<\/th><\/tr><\/thead><tbody><tr><td>Brak pobierania pola danych<\/td><td>Zero \u2014 jedna wiersz w schemacie<\/td><td>Migracja, uzupe\u0142nianie danych, aktualizacja klienta, wnioski o usuni\u0119cie<\/td><\/tr><tr><td>Gdzie przechowywane s\u0105 tokeny i klucze tajne<\/td><td>Zero \u2014 wybierz miejsce tylko raz<\/td><td>Odkrywanie ka\u017cdej tajemnicy, kt\u00f3ra dotkn\u0119\u0142a niew\u0142a\u015bciwego miejsca<\/td><\/tr><tr><td>Ustawienia domy\u015blne dla danych wsp\u00f3\u0142dzielonych<\/td><td>Zero \u2014 zmiana warto\u015bci logicznej<\/td><td>U\u017cytkownicy polegaj\u0105 na domy\u015blnym ustawieniu \u201eotwarte\u201d; zaostrzenie tych zasad wydaje si\u0119 krokiem wstecz<\/td><\/tr><tr><td>Poziom szczeg\u00f3\u0142owo\u015bci uprawnie\u0144<\/td><td>Niski poziom \u2014 dzia\u0142ania, a nie role<\/td><td>Przepisywanie ka\u017cdej kontroli uprawnie\u0144<\/td><\/tr><tr><td>Oddzielne \u015brodowiska i dane testowe<\/td><td>Niski \u2014 jeszcze jeden ruroci\u0105g<\/td><td>Dane produkcyjne zosta\u0142y ju\u017c skopiowane w miejscach, kt\u00f3rych nie da si\u0119 zidentyfikowa\u0107<\/td><\/tr><tr><td>Co trafia do dziennik\u00f3w<\/td><td>Zero \u2014 lista p\u00f3l<\/td><td>Cenzurowanie z moc\u0105 wsteczn\u0105 \u2013 i nigdy si\u0119 nie dowiadujesz, kto je przeczyta\u0142<\/td><\/tr><\/tbody><\/table>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-446f670 elementor-widget elementor-widget-text-editor\" data-id=\"446f670\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Wszystko w lewej kolumnie to rozmowa na pocz\u0105tku projektu. Wszystko w prawej kolumnie to projekt.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af54d81 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"af54d81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e1fe80f elementor-widget elementor-widget-heading\" data-id=\"e1fe80f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Jak to dzia\u0142a: decyzje, jedna po drugiej<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2458fa elementor-widget elementor-widget-heading\" data-id=\"f2458fa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Zdecyduj, czego nigdy nie b\u0119dziesz kolekcjonowa\u0107<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-830d030 elementor-widget elementor-widget-text-editor\" data-id=\"830d030\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Zacznij od modelu danych, a nie od modelu zagro\u017ce\u0144. W przypadku ka\u017cdego pola zadaj sobie pytanie, co przestanie dzia\u0142a\u0107, je\u015bli go nie b\u0119dziesz mie\u0107 \u2014 nie \u201cco mogliby\u015bmy z tym kiedy\u015b zrobi\u0107\u201d, ale co przestanie dzia\u0142a\u0107 w funkcji, kt\u00f3r\u0105 wprowadzasz. Data urodzenia, gdy wystarczy przedzia\u0142 wiekowy. Pe\u0142ny adres, gdy wystarczy kraj. Dok\u0142adna lokalizacja, gdy wystarczy miasto. Notatki w formie dowolnego tekstu, w kt\u00f3rych ostatecznie gromadz\u0105 si\u0119 informacje, kt\u00f3rych nikt nie planowa\u0142 przechowywa\u0107.<\/p><p>Dane, kt\u00f3rych nigdy nie gromadzisz, nie mog\u0105 wyciekn\u0105\u0107, nie mog\u0105 zosta\u0107 niew\u0142a\u015bciwie przetworzone przez SDK strony trzeciej i nie wymagaj\u0105 polityki przechowywania \u2014 to jedyne zabezpieczenie, kt\u00f3rego koszty operacyjne s\u0105 ujemne. Jest to r\u00f3wnie\u017c \u015brodek, kt\u00f3rego zastosowanie staje si\u0119 p\u00f3\u017aniej niemo\u017cliwe: gdy pole ju\u017c istnieje i jest odczytywane, jego usuni\u0119cie wymaga ingerencji w schemat, interfejs API, klienta oraz ka\u017cdy eksport, kt\u00f3ry od niego zale\u017cy.<\/p><p>Minimalizacja danych polega na tym, \u017ce <strong>ochrona prywatno\u015bci od samego pocz\u0105tku<\/strong> przestaje by\u0107 has\u0142em. Jako has\u0142o oznacza ono \u201cdbamy o prywatno\u015b\u0107\u201d i nic nie daje. Jako decyzja skutkuje skr\u00f3ceniem tabeli.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee534af elementor-widget elementor-widget-heading\" data-id=\"ee534af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Zdecyduj, gdzie b\u0119d\u0105 przechowywane tajemnice, zanim ktokolwiek b\u0119dzie ich potrzebowa\u0142<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d08ec1e elementor-widget elementor-widget-text-editor\" data-id=\"d08ec1e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Pierwszy klucz API projektu trafia do repozytorium, poniewa\u017c nie ma jeszcze innego miejsca, gdzie mo\u017cna by go umie\u015bci\u0107. To w\u0142a\u015bnie jest rzeczywisty mechanizm \u2014 nie chodzi o niedbalstwo, a jedynie o brak odpowiedniego miejsca docelowego. W pierwszym tygodniu nale\u017cy wi\u0119c utworzy\u0107 odpowiednie miejsce docelowe: sekrety w \u015brodowisku lub magazynie sekret\u00f3w, wstrzykiwane w momencie wdra\u017cania, nigdy w repozytorium, nigdy w kodzie po stronie klienta, nigdy w dokumencie udost\u0119pnionym innym osobom.<\/p><p>Dwie zasady, kt\u00f3re si\u0119 op\u0142acaj\u0105. Wszystko, co przechowuje klient, jest jawne \u2014 je\u015bli klient mo\u017ce to odczyta\u0107, u\u017cytkownik te\u017c mo\u017ce, wi\u0119c klucze uprawniaj\u0105ce do jakichkolwiek istotnych dzia\u0142a\u0144 pozostaj\u0105 po stronie serwera, a klient otrzymuje token o kr\u00f3tkim okresie wa\u017cno\u015bci. A sekret, kt\u00f3ry trafi\u0142 w niew\u0142a\u015bciwe miejsce, zostaje \u201espalony\u201d: nale\u017cy go rotowa\u0107, zamiast usuwa\u0107 commit.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2873e8a elementor-widget elementor-widget-heading\" data-id=\"2873e8a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Spraw, by domy\u015blne ustawienie by\u0142o niewygodne<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-969d5fd elementor-widget elementor-widget-text-editor\" data-id=\"969d5fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>To w\u0142a\u015bnie ta kwestia budzi spory mi\u0119dzy zespo\u0142ami, wi\u0119c nale\u017cy to jasno okre\u015bli\u0107: <strong>domy\u015blnie zabezpieczone<\/strong> oznacza to, \u017ce domy\u015blny stan jest restrykcyjny, a otwarto\u015b\u0107 jest czym\u015b, co u\u017cytkownik wybiera \u015bwiadomie. Nowy wpis widoczny tylko dla jego w\u0142a\u015bciciela. Udost\u0119pnianie wy\u0142\u0105czone. Eksport wy\u0142\u0105czony. Zakresy integracji puste. Generowanie link\u00f3w publicznych wy\u0142\u0105czone.<\/p><p>Obecnie nic to nie kosztuje, poniewa\u017c nie ma u\u017cytkownik\u00f3w, kt\u00f3rych mo\u017cna by tym irytowa\u0107, a p\u00f3\u017aniej b\u0119dzie to niemal niemo\u017cliwe, poniewa\u017c do tego czasu kto\u015b ju\u017c stworzy proces oparty na otwartym ustawieniu domy\u015blnym, a jego zaostrzenie b\u0119dzie postrzegane jako usterka, a nie poprawka. Warto wymieni\u0107 zwi\u0105zane z tym koszty: restrykcyjne ustawienie domy\u015blne oznacza wi\u0119cej krok\u00f3w, a kto\u015b uzna to za utrudnienie. Rozwi\u0105zaniem nie jest z\u0142agodzenie domy\u015blnego ustawienia, ale sprawienie, by udost\u0119pnienie czego\u015b by\u0142o szybkie i przejrzyste \u2014 jedno prze\u0142\u0105czenie, jedno o\u015bwiadczenie o tym, kto uzyskuje dost\u0119p, jeden spos\u00f3b na cofni\u0119cie go. Alternatyw\u0105 jest u\u017cytkownik, kt\u00f3ry nigdy nie wiedzia\u0142, \u017ce jego dane zosta\u0142y udost\u0119pnione.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d45893 elementor-widget elementor-widget-heading\" data-id=\"3d45893\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Uprawnienia nale\u017cy definiowa\u0107 jako czynno\u015bci, a nie stanowiska<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-031bdff elementor-widget elementor-widget-text-editor\" data-id=\"031bdff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Role na pocz\u0105tku wydaj\u0105 si\u0119 naturalne, ale ju\u017c w sz\u00f3stym miesi\u0105cu ulegaj\u0105 sztywnieniu i przybieraj\u0105 niew\u0142a\u015bciwy kszta\u0142t, a rola \u201cAdmin\u201d przejmuje wszystkie zadania, o kt\u00f3rych nikt nie chcia\u0142 my\u015ble\u0107. Trwa\u0142e rozwi\u0105zanie opiera si\u0119 na zasadzie minimalnych uprawnie\u0144 na poziomie dzia\u0142a\u0144: kto mo\u017ce przegl\u0105da\u0107 ten rekord, kto mo\u017ce go modyfikowa\u0107, kto mo\u017ce wyeksportowa\u0107 ich zbi\u00f3r, kto mo\u017ce dzia\u0142a\u0107 w imieniu innej osoby. Role staj\u0105 si\u0119 w\u00f3wczas nazwanymi zestawami dzia\u0142a\u0144, a pojedyncze uprawnienie dla jednego u\u017cytkownika nie wymaga ju\u017c tworzenia nowej roli.<\/p><p>Powodem, dla kt\u00f3rego warto zaj\u0105\u0107 si\u0119 tym w pierwszej kolejno\u015bci, s\u0105 kwestie techniczne: kontrole na poziomie akcji s\u0105 egzekwowane na jednej granicy, kt\u00f3r\u0105 mo\u017cna podda\u0107 audytowi, podczas gdy kontrole r\u00f3l s\u0105 rozproszone, a przekszta\u0142cenie rozproszonych kontroli w sp\u00f3jny model oznacza konieczno\u015b\u0107 zaj\u0119cia si\u0119 wszystkimi punktami ko\u0144cowymi jednocze\u015bnie. Praktyczne wytyczne dla pozosta\u0142ej cz\u0119\u015bci stosu \u2014 szyfrowanie danych w trakcie przesy\u0142ania i podczas przechowywania, walidacja po stronie serwera, brak \u015blad\u00f3w stosu w komunikatach o b\u0142\u0119dach wy\u015bwietlanych u\u017cytkownikom \u2014 zosta\u0142y om\u00f3wione w naszych notatkach dotycz\u0105cych <a href=\"https:\/\/appricotsoft.com\/pl\/porady\/jak-zapewnic-bezpieczenstwo-w-rozwoju-aplikacji-internetowych\/\"><strong>bezpiecze\u0144stwo w tworzeniu aplikacji internetowych<\/strong><\/a>; model autoryzacji to element, kt\u00f3rego nie da si\u0119 niedrogo zmodernizowa\u0107.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-499bebf elementor-widget elementor-widget-heading\" data-id=\"499bebf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Oddzielne \u015brodowiska i oddzielne dane<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3941de6 elementor-widget elementor-widget-text-editor\" data-id=\"3941de6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Oddzielenie \u015brodowisk to \u0142atwiejsza cz\u0119\u015b\u0107 zadania i wi\u0119kszo\u015b\u0107 zespo\u0142\u00f3w to robi. Cz\u0119\u015b\u0107, kt\u00f3r\u0105 si\u0119 pomija, to oddzielenie danych. Zrzut danych produkcyjnych do bazy testowej to najcz\u0119stszy spos\u00f3b, w jaki prawdziwe dane osobowe trafiaj\u0105 do miejsca o s\u0142abszej kontroli dost\u0119pu, starszym kodzie i wi\u0119kszej liczbie os\u00f3b posiadaj\u0105cych dane uwierzytelniaj\u0105ce. Zamiast tego nale\u017cy generowa\u0107 dane testowe lub anonimizowa\u0107 je na wyj\u015bciu za pomoc\u0105 skryptu uruchamianego w potoku przetwarzania, a nie na czyim\u015b laptopie \u2014 jest to tanie w pierwszym tygodniu, ale k\u0142opotliwe w \u00f3smym miesi\u0105cu, gdy zestaw test\u00f3w po cichu zaczyna zale\u017ce\u0107 od struktury rzeczywistych rekord\u00f3w.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a470f5 elementor-widget elementor-widget-heading\" data-id=\"4a470f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Zdecyduj, do czego s\u0142u\u017c\u0105 logi<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-826ed3e elementor-widget elementor-widget-text-editor\" data-id=\"826ed3e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Logi s\u0142u\u017c\u0105 do debugowania i odtwarzania przebiegu zdarze\u0144, dlatego musz\u0105 by\u0107 szczeg\u00f3\u0142owe. Czyta je te\u017c wi\u0119cej os\u00f3b ni\u017c sam\u0105 baz\u0119 danych, a s\u0105 przechowywane d\u0142u\u017cej, ni\u017c ktokolwiek zamierza\u0142. Na pocz\u0105tku nale\u017cy sporz\u0105dzi\u0107 list\u0119 p\u00f3l: identyfikatory \u017c\u0105da\u0144, identyfikatory u\u017cytkownik\u00f3w, dzia\u0142ania, wyniki, sygnatury czasowe \u2014 tak. Dane uwierzytelniaj\u0105ce, tokeny, identyfikatory sesji, pe\u0142ne tre\u015bci \u017c\u0105da\u0144 z uwierzytelnionych punkt\u00f3w ko\u0144cowych oraz dane osobowe, kt\u00f3re w\u0142a\u015bnie stara\u0142e\u015b si\u0119 zminimalizowa\u0107 \u2014 nie.<\/p><p>Nast\u0119pnie dodaj to, co wi\u0119kszo\u015b\u0107 zespo\u0142\u00f3w wprowadza dopiero na p\u00f3\u017anym etapie: \u015bcie\u017ck\u0119 audytow\u0105 dotycz\u0105c\u0105 odczyt\u00f3w danych wra\u017cliwych i zmian uprawnie\u0144, oddzieln\u0105 od dziennik\u00f3w debugowania, przechowywan\u0105 przez okre\u015blony czas. \u201cKto przegl\u0105da\u0142 ten rekord?\u201d \u2013 to pytanie w ko\u0144cu zostanie ci zadane, a odpowiedzie\u0107 na nie mo\u017cna wy\u0142\u0105cznie na podstawie danych, kt\u00f3re ju\u017c gromadzi\u0142e\u015b.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a20e12e elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"a20e12e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70b6c76 elementor-widget elementor-widget-heading\" data-id=\"70b6c76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Przyk\u0142ad z naszej praktyki<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df1da0f elementor-widget elementor-widget-text-editor\" data-id=\"df1da0f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Dla <a href=\"https:\/\/appricotsoft.com\/pl\/studia-przypadkow\/pandasmile\/\"><strong>PandaSmile<\/strong><\/a>, stworzona wsp\u00f3lnie z dr. Olivierem Setbonem w Pary\u017cu, opracowali\u015bmy aplikacj\u0119 do cyfrowej opieki ortodontycznej w technologiach React Native i Laravel \u2014 zawieraj\u0105c\u0105 \u0107wiczenia oparte na mechanizmach gier dla pacjent\u00f3w oraz powiadomienia push, kt\u00f3re pomagaj\u0105 im dotrzymywa\u0107 termin\u00f3w.<\/p><p>Produkt przetwarza dane pacjent\u00f3w u\u017cytkownik\u00f3w z UE, co oznacza\u0142o, \u017ce powy\u017csze decyzje by\u0142y na pocz\u0105tku decyzjami projektowymi, a nie etapem wzmacniania bezpiecze\u0144stwa przed uruchomieniem. Konkretnie: przeanalizowali\u015bmy model danych pole po polu i usun\u0119li\u015bmy to, co nie by\u0142o potrzebne do dzia\u0142ania funkcji \u0107wicze\u0144 i przypomnie\u0144, dzi\u0119ki czemu aplikacja nigdy tych danych nie przechowywa\u0142a. Dost\u0119p zosta\u0142 podzielony w taki spos\u00f3b, aby strona kliniczna i strona pacjenta nie mia\u0142y domy\u015blnego dost\u0119pu do swoich danych, a uprawnienia by\u0142y definiowane dla poszczeg\u00f3lnych dzia\u0142a\u0144, a nie na podstawie roli lekarza pierwszego kontaktu. Klucze tajne i tokeny pozostawa\u0142y po stronie serwera, a klienci mobilni posiadali jedynie kr\u00f3tkotrwa\u0142e po\u015bwiadczenia. Logi zawiera\u0142y identyfikatory i wyniki s\u0142u\u017c\u0105ce do debugowania, a nie tre\u015bci kliniczne.<\/p><p>\u017badna z tych decyzji nie wi\u0105za\u0142a si\u0119 z wysokimi kosztami \u2014 by\u0142y to wybory podj\u0119te, zanim pojawi\u0142a si\u0119 potrzeba migracji. Scenariusz alternatywny jasno pokazuje: usuni\u0119cie pola danych pacjenta po wdro\u017ceniu oznacza\u0142oby migracj\u0119 schematu, \u015bcie\u017ck\u0119 usuwania oraz aktualizacj\u0119 w sklepie z aplikacjami, kt\u00f3r\u0105 nale\u017ca\u0142oby wdro\u017cy\u0107 na ka\u017cdym zainstalowanym kliencie \u2014 a wszystko to dla pola, kt\u00f3rego nikt nie potrzebowa\u0142.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7173e15 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"7173e15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a807fb8 elementor-widget elementor-widget-heading\" data-id=\"a807fb8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Na co zwr\u00f3ci\u0107 uwag\u0119<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44936b4 elementor-widget elementor-widget-text-editor\" data-id=\"44936b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Traktuj\u0119 to jako rytua\u0142 rozpoczynaj\u0105cy.<\/strong> Jednorazowa sesja na pocz\u0105tku projektu prowadzi do podj\u0119cia decyzji, kt\u00f3re z czasem trac\u0105 na aktualno\u015bci. Trwa\u0142e rozwi\u0105zanie to sta\u0142y punkt porz\u0105dku obrad: ka\u017cda funkcja, kt\u00f3ra dodaje pole, punkt ko\u0144cowy lub integracj\u0119, wymaga udzielenia odpowiedzi na trzy pytania w ramach tej samej oceny, co wszystkie pozosta\u0142e elementy \u2014 jakie dane s\u0105 gromadzone, kto ma do nich dost\u0119p i jakie s\u0105 ustawienia domy\u015blne. To w\u0142a\u015bnie sprawia, \u017ce jest to <strong>bezpieczny cykl \u017cycia oprogramowania<\/strong> a nie notatka s\u0142u\u017cbowa.<\/p><p><strong>Opracowywanie wymaga\u0144 dotycz\u0105cych bezpiecze\u0144stwa, kt\u00f3rych nikt nie jest w stanie zweryfikowa\u0107.<\/strong> \u201cSystem musi by\u0107 bezpieczny\u201d nie jest wymogiem. \u201c\u017badne urz\u0105dzenie ko\u0144cowe nie zwraca danych innego u\u017cytkownika bez wyra\u017anego zezwolenia, a istnieje test sprawdzaj\u0105cy to\u201d \u2013 to jest wym\u00f3g. Wymogi, kt\u00f3re nie mog\u0105 zako\u0144czy\u0107 si\u0119 niepowodzeniem w te\u015bcie, nie przetrwaj\u0105 terminu.<\/p><p><strong>Mylenie tego z przestrzeganiem przepis\u00f3w.<\/strong> Przepisy okre\u015blaj\u0105, co nale\u017cy wykaza\u0107; koncepcja \u201ebezpiecze\u0144stwa od samego pocz\u0105tku\u201d wskazuje, jakie decyzje nale\u017cy podj\u0105\u0107 na wczesnym etapie, aby p\u00f3\u017aniej mo\u017cna by\u0142o to wykaza\u0107. Prace projektowe same w sobie nie zapewniaj\u0105 certyfikacji produktu, a twierdzenie, \u017ce jest inaczej, stanowi odr\u0119bny i powa\u017cniejszy problem.<\/p><p><strong>Nadmierne ograniczenia tam, gdzie nie ma to znaczenia.<\/strong> Nie ka\u017cde pole jest wra\u017cliwe i nie ka\u017cde domy\u015blne ustawienie wymaga zmiany. Marnowanie cierpliwo\u015bci zespo\u0142u na ograniczenia o niewielkim znaczeniu podwa\u017ca wiarygodno\u015b\u0107, kt\u00f3rej potrzebujesz w sprawach naprawd\u0119 wa\u017cnych.<\/p><p><strong>Przej\u0119cie dzia\u0142aj\u0105cego systemu.<\/strong> Okres bezp\u0142atny ju\u017c si\u0119 zako\u0144czy\u0142, ale podj\u0119te decyzje nadal maj\u0105 zastosowanie do wszystkich element\u00f3w dodanych od tego momentu, a analiza wska\u017ce, kt\u00f3re cz\u0119\u015bci istniej\u0105cej powierzchni warto przenie\u015b\u0107. Jak wygl\u0105da ten proces, opisano w <a href=\"https:\/\/appricotsoft.com\/pl\/porady\/co-tak-naprawde-obejmuje-audyt-kodu-ai\/\"><strong>co tak naprawd\u0119 obejmuje audyt kodu sztucznej inteligencji<\/strong><\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c80e9bb elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"c80e9bb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b6e18d2 elementor-widget elementor-widget-heading\" data-id=\"b6e18d2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Wniosek<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b4797d elementor-widget elementor-widget-text-editor\" data-id=\"9b4797d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Bezpiecze\u0144stwo od samego pocz\u0105tku sprowadza si\u0119 do ustalenia kolejno\u015bci dzia\u0142a\u0144. Nale\u017cy zdecydowa\u0107, jakich danych nigdy nie b\u0119dziemy gromadzi\u0107, gdzie b\u0119d\u0105 przechowywane poufne informacje, jakie b\u0119d\u0105 ustawienia domy\u015blne, jak b\u0119d\u0105 kszta\u0142towane uprawnienia, w jaki spos\u00f3b oddzielone zostan\u0105 \u015brodowiska i dane testowe oraz co b\u0119d\u0105 zawiera\u0107 logi \u2014 a wszystko to przy tym, \u017ce koszt zmiany decyzji ogranicza si\u0119 do jednej linii w schemacie. Wszystko inne mo\u017cna doda\u0107 p\u00f3\u017aniej bez konieczno\u015bci migracji. To samo rozumowanie stosujemy w bran\u017cy fintech, gdzie schemat jest identyczny, a stawka jest znacznie wy\u017csza: <a href=\"https:\/\/appricotsoft.com\/pl\/blog\/bezpieczne-dzieki-projektowaniu-tworzenie-aplikacji-fintech-w-odpowiedni-sposob\/\"><strong>wbudowanie zabezpiecze\u0144 w architektur\u0119 od samego pocz\u0105tku, zamiast dodawania ich p\u00f3\u017aniej<\/strong><\/a>. Je\u015bli rozpoczynasz projekt i chcesz, aby te decyzje by\u0142y podejmowane w spos\u00f3b przemy\u015blany, to w\u0142a\u015bnie na tym polega ustalanie zakresu projektu <a href=\"https:\/\/appricotsoft.com\/pl\/tworzenie-oprogramowania-na-zamowienie\/\"><strong>tworzenie oprogramowania na zam\u00f3wienie<\/strong><\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b926cc elementor-cta--skin-cover elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"1b926cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/appricotsoft.com\/wp-content\/plugins\/elementor\/assets\/images\/placeholder.png);\" role=\"img\" aria-label=\"\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h2 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tMasz ju\u017c ten pomys\u0142?\t\t\t\t\t<\/h2>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__description elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tNapisz do nas, a znajdziemy najlepszy spos\u00f3b realizacji Twojego pomys\u0142u!\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t<a class=\"elementor-cta__button elementor-button elementor-size-\" href=\"\/pl\/skontaktuj-sie-z-nami\/\">\n\t\t\t\t\t\tSkontaktuj si\u0119 z nami\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Bezpiecze\u0144stwo od samego pocz\u0105tku jako zbi\u00f3r decyzji, a nie jako ramy: jakie dane nigdy nie powinny by\u0107 gromadzone, dlaczego ustawienia domy\u015blne powinny by\u0107 niewygodne oraz co obecnie nic nie kosztuje.<\/p>","protected":false},"author":4,"featured_media":35329,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"content-type":"","footnotes":""},"categories":[44],"tags":[],"class_list":["post-35324","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Security by Design: The Decisions That Are Free Before You Build - Appricotsoft<\/title>\n<meta name=\"description\" content=\"Security by design as a list of decisions, not a framework: what data never to collect, why defaults should be inconvenient, and what costs nothing now.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/appricotsoft.com\/pl\/blog\/decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Security by Design: The Decisions That Are Free Before You Build - Appricotsoft\" \/>\n<meta property=\"og:description\" content=\"Security by design as a list of decisions, not a framework: what data never to collect, why defaults should be inconvenient, and what costs nothing now.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/appricotsoft.com\/pl\/blog\/decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne\/\" \/>\n<meta property=\"og:site_name\" content=\"Appricotsoft\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-29T17:03:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-29T17:12:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Roman Rusnak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Roman Rusnak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/\"},\"author\":{\"name\":\"Roman Rusnak\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#\\\/schema\\\/person\\\/635e2d8baeeff5a86ba1944e42d3a30b\"},\"headline\":\"Security by Design: The Decisions That Are Free Before You Build\",\"datePublished\":\"2026-09-29T17:03:55+00:00\",\"dateModified\":\"2026-09-29T17:12:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/\"},\"wordCount\":1831,\"publisher\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/\",\"name\":\"Security by Design: The Decisions That Are Free Before You Build - Appricotsoft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp\",\"datePublished\":\"2026-09-29T17:03:55+00:00\",\"dateModified\":\"2026-09-29T17:12:28+00:00\",\"description\":\"Security by design as a list of decisions, not a framework: what data never to collect, why defaults should be inconvenient, and what costs nothing now.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#primaryimage\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp\",\"contentUrl\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp\",\"width\":1920,\"height\":1280,\"caption\":\"security-by-design-decisions-that-are-free\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/blog\\\/security-by-design-decisions-that-are-free\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/appricotsoft.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Security by Design: The Decisions That Are Free Before You Build\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#website\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/\",\"name\":\"Appricotsoft\",\"description\":\"We Build Products That Win Funding And Scale\",\"publisher\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/appricotsoft.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#organization\",\"name\":\"Appricotsoft\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-appricot-logo-1.png\",\"contentUrl\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/cropped-cropped-appricot-logo-1.png\",\"width\":588,\"height\":208,\"caption\":\"Appricotsoft\"},\"image\":{\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"description\":\"Appricotsoft is a European software development company headquartered in Warsaw, Poland. We design and build mobile apps, web platforms, MVPs and AI-powered products for startups and SMEs across Europe, with deep expertise in hospitality and fintech.\",\"slogan\":\"We build products that win funding and scale\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/appricotsoft\",\"https:\\\/\\\/clutch.co\\\/profile\\\/appricotsoft\",\"https:\\\/\\\/www.goodfirms.co\\\/company\\\/appricotsoft\",\"https:\\\/\\\/www.facebook.com\\\/appricotsoft\\\/\",\"https:\\\/\\\/www.instagram.com\\\/appricotsoft\\\/\"],\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Mlynarska 8\\\/12, loc. 40\",\"postalCode\":\"01-194\",\"addressLocality\":\"Warsaw\",\"addressCountry\":\"PL\"},\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"+48 571 785 777\",\"contactType\":\"sales\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/contact-us\\\/\",\"availableLanguage\":[\"English\",\"Polish\",\"Ukrainian\"]},\"knowsAbout\":[\"mobile app development\",\"MVP development\",\"hospitality software\",\"fintech software development\",\"payment gateway integration\",\"AI solutions\",\"UX\\\/UI design\",\"software quality assurance\"],\"areaServed\":[\"Europe\",\"United Kingdom\",\"Germany\",\"Netherlands\",\"Poland\",\"Nordics\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/#\\\/schema\\\/person\\\/635e2d8baeeff5a86ba1944e42d3a30b\",\"name\":\"Roman Rusnak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/litespeed\\\/avatar\\\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591\",\"url\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/litespeed\\\/avatar\\\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591\",\"contentUrl\":\"https:\\\/\\\/appricotsoft.com\\\/wp-content\\\/litespeed\\\/avatar\\\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591\",\"caption\":\"Roman Rusnak\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bezpiecze\u0144stwo od samego pocz\u0105tku: decyzje, kt\u00f3re mo\u017cna podj\u0105\u0107 bezp\u0142atnie przed rozpocz\u0119ciem tworzenia oprogramowania \u2013 Appricotsoft","description":"Bezpiecze\u0144stwo od samego pocz\u0105tku jako zbi\u00f3r decyzji, a nie jako ramy: jakie dane nigdy nie powinny by\u0107 gromadzone, dlaczego ustawienia domy\u015blne powinny by\u0107 niewygodne oraz co obecnie nic nie kosztuje.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/appricotsoft.com\/pl\/blog\/decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne\/","og_locale":"pl_PL","og_type":"article","og_title":"Security by Design: The Decisions That Are Free Before You Build - Appricotsoft","og_description":"Security by design as a list of decisions, not a framework: what data never to collect, why defaults should be inconvenient, and what costs nothing now.","og_url":"https:\/\/appricotsoft.com\/pl\/blog\/decyzje-dotyczace-bezpieczenstwa-od-samego-poczatku-ktore-sa-bezplatne\/","og_site_name":"Appricotsoft","article_published_time":"2026-09-29T17:03:55+00:00","article_modified_time":"2026-09-29T17:12:28+00:00","og_image":[{"width":1920,"height":1280,"url":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp","type":"image\/webp"}],"author":"Roman Rusnak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Roman Rusnak","Szacowany czas czytania":"8 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#article","isPartOf":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/"},"author":{"name":"Roman Rusnak","@id":"https:\/\/appricotsoft.com\/#\/schema\/person\/635e2d8baeeff5a86ba1944e42d3a30b"},"headline":"Security by Design: The Decisions That Are Free Before You Build","datePublished":"2026-09-29T17:03:55+00:00","dateModified":"2026-09-29T17:12:28+00:00","mainEntityOfPage":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/"},"wordCount":1831,"publisher":{"@id":"https:\/\/appricotsoft.com\/#organization"},"image":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#primaryimage"},"thumbnailUrl":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp","articleSection":["Blog"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/","url":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/","name":"Bezpiecze\u0144stwo od samego pocz\u0105tku: decyzje, kt\u00f3re mo\u017cna podj\u0105\u0107 bezp\u0142atnie przed rozpocz\u0119ciem tworzenia oprogramowania \u2013 Appricotsoft","isPartOf":{"@id":"https:\/\/appricotsoft.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#primaryimage"},"image":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#primaryimage"},"thumbnailUrl":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp","datePublished":"2026-09-29T17:03:55+00:00","dateModified":"2026-09-29T17:12:28+00:00","description":"Bezpiecze\u0144stwo od samego pocz\u0105tku jako zbi\u00f3r decyzji, a nie jako ramy: jakie dane nigdy nie powinny by\u0107 gromadzone, dlaczego ustawienia domy\u015blne powinny by\u0107 niewygodne oraz co obecnie nic nie kosztuje.","breadcrumb":{"@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#primaryimage","url":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp","contentUrl":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/09\/security-by-design-decisions-that-are-free-2-article-1920x1280-1.webp","width":1920,"height":1280,"caption":"security-by-design-decisions-that-are-free"},{"@type":"BreadcrumbList","@id":"https:\/\/appricotsoft.com\/blog\/security-by-design-decisions-that-are-free\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/appricotsoft.com\/"},{"@type":"ListItem","position":2,"name":"Security by Design: The Decisions That Are Free Before You Build"}]},{"@type":"WebSite","@id":"https:\/\/appricotsoft.com\/#website","url":"https:\/\/appricotsoft.com\/","name":"Appricotsoft","description":"Tworzymy produkty, kt\u00f3re zdobywaj\u0105 finansowanie i skaluj\u0105 si\u0119","publisher":{"@id":"https:\/\/appricotsoft.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/appricotsoft.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/appricotsoft.com\/#organization","name":"Appricotsoft","url":"https:\/\/appricotsoft.com\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/appricotsoft.com\/#\/schema\/logo\/image\/","url":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-appricot-logo-1.png","contentUrl":"https:\/\/appricotsoft.com\/wp-content\/uploads\/2026\/05\/cropped-cropped-appricot-logo-1.png","width":588,"height":208,"caption":"Appricotsoft"},"image":{"@id":"https:\/\/appricotsoft.com\/#\/schema\/logo\/image\/"},"description":"Appricotsoft to europejska firma zajmuj\u0105ca si\u0119 tworzeniem oprogramowania z siedzib\u0105 w Warszawie. Projektujemy i tworzymy aplikacje mobilne, platformy internetowe, MVP oraz produkty oparte na sztucznej inteligencji dla startup\u00f3w i M\u015aP w ca\u0142ej Europie, specjalizuj\u0105c si\u0119 w bran\u017cy hotelarskiej i fintech.","slogan":"We build products that win funding and scale","sameAs":["https:\/\/www.linkedin.com\/company\/appricotsoft","https:\/\/clutch.co\/profile\/appricotsoft","https:\/\/www.goodfirms.co\/company\/appricotsoft","https:\/\/www.facebook.com\/appricotsoft\/","https:\/\/www.instagram.com\/appricotsoft\/"],"address":{"@type":"PostalAddress","streetAddress":"Mlynarska 8\/12, loc. 40","postalCode":"01-194","addressLocality":"Warsaw","addressCountry":"PL"},"contactPoint":{"@type":"ContactPoint","telephone":"+48 571 785 777","contactType":"sales","url":"https:\/\/appricotsoft.com\/contact-us\/","availableLanguage":["English","Polish","Ukrainian"]},"knowsAbout":["mobile app development","MVP development","hospitality software","fintech software development","payment gateway integration","AI solutions","UX\/UI design","software quality assurance"],"areaServed":["Europe","United Kingdom","Germany","Netherlands","Poland","Nordics"]},{"@type":"Person","@id":"https:\/\/appricotsoft.com\/#\/schema\/person\/635e2d8baeeff5a86ba1944e42d3a30b","name":"Roman Rusnak","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/appricotsoft.com\/wp-content\/litespeed\/avatar\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591","url":"https:\/\/appricotsoft.com\/wp-content\/litespeed\/avatar\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591","contentUrl":"https:\/\/appricotsoft.com\/wp-content\/litespeed\/avatar\/73937431edf197f3ec4ea2472b3940b1.jpg?ver=1790711591","caption":"Roman Rusnak"}}]}},"_links":{"self":[{"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/posts\/35324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/comments?post=35324"}],"version-history":[{"count":2,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/posts\/35324\/revisions"}],"predecessor-version":[{"id":35326,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/posts\/35324\/revisions\/35326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/media\/35329"}],"wp:attachment":[{"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/media?parent=35324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/categories?post=35324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appricotsoft.com\/pl\/wp-json\/wp\/v2\/tags?post=35324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}