Najważniejsze zagadnienia, które musisz znać
5 godz. 53 min · JavaScript · Full-stack i Programowanie
Adam GospodarczykPrzesyłanie oraz transformacja danych to jeden z najważniejszych elementów działania każdej aplikacji. Dobre zrozumienie tego w jaki sposób odbywa się ten proces, daje równocześnie lepsze zrozumienie całej struktury oraz podejmowania decyzji projektowych. W tym kursie znajdziesz lekcje, które pozwolą Ci uporządkować wiedzę na temat protokołu HTTP oraz formatów wymiany danych.
REST oraz GraphQL to nadal nieodłączone zagadnienia tematu wymiany informacji w kontekście aplikacji webowych. Pomimo tego, że ich koncepcje zwykle są bardzo dobrze opisane w różnych źródłach, tak ich wykorzystanie "na produkcji" potrafi sprawić problemy. W szczególności gdy weźmiemy pod uwagę, wyjątki oraz fakt, że nie każda aplikacja będzie wymagać implementacji REST czy GraphQL w 100%. W tym kursie znajdziesz wiele praktycznych wskazówek związanych z pracą z REST API oraz wprowadzenie do pracy z GraphQL.
Niektóre błędy w aplikacji są bardzo pożądane, w szczególności gdy jasno informują użytkownika o tym, co się wydarzyło oraz o tym, co może z tym zrobić. Pomimo tego, że w wielu przypadkach opracowanie komunikatów leży w rękach osoby odpowiedzialnej za copywriting (i/lub ux writing), tak sama implementacja tych komunikatów odbywa się po stronie kodu. Nie rzadko okazuje się, że poprawna i skuteczna walidacja danych oraz obsługa błędów nie jest oczywista w "produkcyjnych" sytuacjach. W tym kursie znajdziesz najczęściej spotykane problemy oraz sposoby ich rozwiązania.
Bazy danych są praktycznie nieodłączną częścią każdej aplikacji. W roli full-stacka prędzej czy później przyjdzie Ci z nimi pracować a nie rzadko nawet projektować oraz rozbudowywać ich struktury. W tym kursie znajdziesz informacje o bazach danych, które pozwolą Ci je zrozumieć oraz od razu poznać użyteczne techniki, które pomogą Ci w pracy z nimi, zarówno na produkcji jak i w środowisku lokalnym czy testowym.
Nie wszystkie informacje w aplikacji są publiczne. Niektóre wprost nie mogą takie być. Z tego powodu niezbędne są sposoby na to aby poznać a potem weryfikować tożsamość użytkownika, by na jej podstawie przydzielać mu dostęp wyłącznie do zasobów, do których odczytywania posiada uprawnienia. Istnieje wiele technik, które umożliwiają zarządzanie dostępem do danych i w tym kursie poznasz najważniejsze z nich. Dowiesz się nie tylko w jaki sposób zabezpieczać dane ale poznasz też najpopularniejsze sposoby na to aby te zabezpieczenia łamać i obchodzić. Mając świadomość takiej możliwości, będziesz w stanie lepiej podejmować decyzje o tym jak projektować dostęp do informacji.
Istnieją problemy charakterystyczne dla niemal każdej aplikacji. W związku z ich powszechnością, istnieje też szereg rozwiązań lub sposobów na to, aby możliwie zredukować ich następstwa. Na przestrzeni lekcji tego kursu zobaczysz wiele przykładów, które pomogą Ci w codziennej pracy a niekiedy nawet, pozwolą uniknąć błędów, których konsekwencje nie zawsze występują natychmiast.
Kurs powstał z myślą o osobach, które chcą rozwijać się w roli full-stack web developera / developerki, przeprowadzając przez najważniejsze zagadnienia z obszaru wymiany, transformacji oraz przechowywania informacji w aplikacji oraz pomiędzy aplikacjami. Jeżeli potrzebujesz zobaczyć szeroką perspektywę tego, w jaki sposób dane przepływają pomiędzy różnymi częściami aplikacji, lub ugruntować swoją wiedzę na ten temat, to ten kurs jest miejscem, którego szukasz.
Pomimo tego, że temat security nie jest naszym głównym punktem uwagi, tak
jednocześnie wrażliwość będzie spotykać się z nim niejednokrotnie.
Często to do Ciebie będzie należało
zadbanie o ten obszar i co ważne nie zawsze musisz wykonywać to samodzielnie,
ale na koniec dnia musisz przynajmniej mieć świadomość tego, o co należy zadbać.
W związku z tym przygotowałem taką listę
bezpieczeństwa, którą sam wykorzystuję w ramach moich aplikacji.
I co więcej, mogę się tutaj pochwalić przynajmniej kilkoma audycjami oraz
testami bezpieczeństwa, które pomyślnie przechodziły moje aplikacja.
W związku z tym myślę, że ta lista będzie
wystarczająco wyczerpująca, aby przynajmniej wprowadzić Cię w ten temat.
Zatem pierwszym punktem, o które na pewno
należy zadbać, jest odpowiednie skonfigurowanie naszego serwera.
Oczywiście na potrzeby developmentu i
zabawy oraz nauki zajmuje się konfiguracją samodzielnie i tutaj z pewnością
przychodzi z pomocą blog Digital 8, o którym już wspominałem.
Mianowicie mam tutaj konkretnie na myśli elementy takie jak konfiguracja firewalla,
odpowiednia konfiguracja portów, połączenia SSL, proxy czy np.
mechanizmu kierującego.
Tutaj również musi być odpowiednio skonfigurowany, aby przypadkowo
użytkownicy nie zyskali dostępu do danych, do których dostępu mieć nie powinni.
Jednocześnie muszę tutaj podkreślić, że w
momencie, gdy moja aplikacja trafia już na serwer produkcyjny, albo bardziej ma
trafić na serwer produkcyjny i też mają zacząć z niej korzystać prawdziwi
użytkownicy, to w każdym przypadku dbałem o to, aby zlecić skonfigurowanie mojego
produkcyjnego serwera osobie, która bardzo mocno się w tym obszarze specjalizuje.
W takim zleceniu nie tylko uwzględniam to,
aby skonfigurować serwer pod kątem działania mojej aplikacji, ale również
właśnie elementów security oraz elementów dotyczących tworzenia backupów.
Konkretnie mam tutaj na myśli backup
plików, które wygrywają użytkownicy i zwykle one trafiają do katalogu aplauz i w
związku z tym muszą być tworzone odpowiednie kopie zapasowe tego katalogu.
I to samo z resztą naturalnie bazy danych, która również musi być
kopiowana na jakiś oddzielny serwer, gdzie przechowuje te kopie zapasowe.
Dodatkowo w takim zleceniu uwzględniam
również to, aby osoba, która go konfiguruje przygotowała mi instrukcję
wykorzystania tej konfiguracji oraz również to w jaki sposób mogę skorzystać z
backupu i przywrócić moją aplikację bez konieczności angażowania kogokolwiek.
W związku z tym pierwszy punkt dotyczy konfiguracji serwera.
I tak jak powiedziałem, najlepiej jest
zlecić to zadanie specjalisty, który po prostu przygotuje dla nas samą
konfigurację oraz instrukcję wykorzystania.
Pamiętaj proszę na tym etapie również o obiektach.
Kolejnym punktem jest filtrowanie wprowadzanych danych.
Mowa tutaj przede wszystkim o nastawieniu uwzględniającym absolutny brak zaufania
względem danych, które trafiają do naszej aplikacji.
Już bez znaczenia, czy pochodzą one od użytkownika, czy od innej aplikacji.
Zawsze musisz upewnić się, że dane, które
są wysyłane do Ciebie są odpowiednio filtrowane i np.
odrzucane są tam dodatkowe pola, których w
ogóle się nie spodziewasz, a potencjalnie Twoja aplikacja mogłaby na nie reagować.
Jednocześnie też mowa tutaj na tym etapie o weryfikacji np.
typów i narzucaniu różnego rodzaju ograniczeń do wprowadzanych danych.
No i właśnie, jeżeli już o ograniczeniach mowa, to najlepiej tutaj od razu
powiedzieć również o walidacji wprowadzanych danych.
Chodzi o to, że w wielu przypadkach może
dojść do sytuacji, w której dane wprowadzane przez użytkownika
całkowicie pasują do tych, których sam się spodziewasz.
Inaczej mówiąc, wyglądają one pozornie poprawnie.
Jednocześnie to od siebie bądź od
narzędzi, z których korzystasz, zależy to, czy np.
w przypadku wprowadzonego komentarza
zostaną przefiltrowane jakieś potencjalne niebezpieczne znaki i w rezultacie zostaną
zablokowane przykładowo ewentualnie niebezpieczne skrypty bądź różnego rodzaju
złośliwe kod, które mógłby zostać w ten sposób przekazane do Twojej aplikacji.
Zatem tutaj jak widzisz, oba te tematy poruszaliśmy już w naszych materiałach i
będziemy do nich niejednokrotnie wracać, aczkolwiek bez wątpienia w obszarze
security warto zwracać na nie szczególną uwagę.
Następnie mamy uwierzytelnienie połączenia
oraz zabezpieczenie ścieżek, czyli prawdopodobnie najprostszy błąd security,
ponieważ jego ewentualne popełnienie jest naprawdę bardzo łatwe.
Wystarczy jakieś niedopatrzenie, nie zabezpieczenie ścieżki, bądź też np.
prosty błąd w logice sprawdzającej, czy
użytkownik ma dostęp do określonego zasobu w tym temacie.
Oczywiście najlepszym sposobem
zabezpieczenia się przed takimi błędami jest wykorzystanie testów automatycznych.
Rzeczywistość jednak pokazuje, że w
niektórych przypadkach nie mamy z nimi do czynienia.
Ale nawet bez względu na to, czy mamy
testy czy nie, temu tematowi powinniśmy poświęcić szczególną ilość uwagi.
Właśnie ze względu na to, że jest to jeden
z najbardziej popularnych błędów dotyczących bezpieczeństwa aplikacji.
No i teraz kolejną kwestią, o której już zdarzyło mi się mówić, więc nie będę się
tutaj zbytnio powtarzał, a mianowicie chodzi mi tutaj o wykorzystanie logów oraz
różnego rodzaju alertów działających w naszej aplikacji.
Po prostu w momencie, gdy dojdzie już do
ewentualnego problemu, bądź też do próby jego wywołania, po prostu musisz mieć
jakiś ślad, który pozwoli Ci to zidentyfikować i ewentualnie jeszcze
bardziej zabezpieczyć się na ewentualne powtórki takich sytuacji.
Tymczasem kolejną niesamowicie istotną kwestią jest kasowanie haseł oraz
anonimizacji danych, które przechowujesz w swojej aplikacji oraz w bazie danych.
O tym temacie również zarówno już
mówiliśmy oraz będziemy mówić i wykorzystywać to w praktyce.
Natomiast chciałbym go bardzo wyraźnie podkreślić.
Pamiętaj proszę, aby pod żadnym pozorem
nie przechowywać haseł użytkowników w formie tzw.
plain tekstu.
Jest to kardynalny błąd, którego po prostu nie można popełniać.
Tym bardziej, że wykorzystanie np.
Big D do tego, aby utworzyć hash na
podstawie hasła jest naprawdę bardzo proste.
Kolejnym wątkiem, o który jest
zdecydowanie również warto zadbać, jest dbanie o swoje dane.
Oznacza to, że nie tylko liczy się to, w jaki sposób zabezpieczasz swoją aplikację,
ale również elementy takie jak swoje hasła, swój komputer, telefon i różnego
rodzaju punkty, które umożliwiają dostęp np.
do Twoich kont. Pomimo tego, że domyślam się, że ten temat
masz już zaadresowany, to i tak bez wątpienia warto zwracać na niego uwagę.
Kolejnym punktem jest aktualizacja wersji stacku technologicznego.
Mam tutaj na myśli zarówno wersje
frameworków, z których korzystasz oraz paczek, w przypadku których często
pojawiają się różnego rodzaju luki, które są łatane w kolejnych wersjach.
Co więcej, tak jak powiedziałem w jednej z lekcji dotyczących Package Managera, warto
dbać o aktualizację naszej aplikacji na bieżąco.
Po prostu w momencie, gdy będziemy zwlekać
z tym procesem przez długi czas, dokonanie aktualizacji może być albo bardzo trudne,
albo wręcz już niemożliwe do wykonania w ramach zasobów, które masz do dyspozycji.
W związku z tym najlepiej jest wyrobić sobie nawyk aktualizacji, a po drugie też
w ramach Twoich obowiązków czy też w zasadzie obowiązków całego zespołu
stworzyć sobie przestrzeń do tego, aby móc przeprowadzać aktualizacje na bieżąco.
I ostatnim punktem, po który sam osobiście sięgałem są audyty bezpieczeństwa.
Po prostu nie ulega wątpliwości fakt, że niezależnie od tego, jaką specjalizację
mamy, bardzo łatwo jest przeoczyć różnego rodzaju elementy.
W związku z tym zamiast przykładowo czekać
na audyty, które zostaną przeprowadzane przez np.
klientów bądź inne zewnętrzne podmioty, warto np.
porozmawiać ze swoim przełożonym czy też w ogóle szefem firmy na temat
przeprowadzenia wewnętrznych audytów bezpieczeństwa, które swoją drogą powinny
być standardem, ale też wiem, że nie zawsze są.
Przeprowadzenie takiego audytu przykładowo
raz na pół roku, bądź w zależności od rozwoju Twojej aplikacji nawet raz na rok,
wystarczy do tego, aby przede wszystkim wskazać te ewentualne luki bezpieczeństwa,
o które możesz po prostu zadbać bez dodatkowej presji wynikającej chociażby z
faktów weryfikowania przez zewnętrzne podmioty.
Tak jak powiedziałem, ja osobiście
korzystałem z tego rodzaju usług ze względu na to, że po prostu zależało mi na
tym, aby moje aplikacje były bezpieczne i też dodatkowo chciałem być po prostu
bardziej spokojny co do bezpieczeństwa moich aplikacji, a przy okazji też to był
świetny sposób na to, aby poznawać ludzi, którzy przeprowadzają tego rodzaju audyty
i też poszerzać swoją wiedzę w tym obszarze.
Przykładowo przejście przez punkty
wymienione w audycie bardzo mocno pozwalają poszerzyć wiedzę na ten temat
nawet w sytuacji, gdy nieświadomie je zadecydowaliśmy i po prostu audyt został
przeprowadzony pomyślnie i również jego efekty nie wykazały jakichś rażących luk.
Zatem jak widzisz, jeżeli chodzi o moją
listę bezpieczeństwa, jest ona stosunkowo krótka, ale jednocześnie pokrywa
praktycznie każdy obszar aplikacji od konfiguracji serwera, przez konfigurację
aplikacji, poprzez dbanie o moje dane, a nawet sięganie po audyty bezpieczeństwa.
Naturalnie w tym wszystkim polecam Ci
dodatkowo poszerzać wiedzę na temat bezpieczeństwa aplikacji webowych i
stopniowo też wdrażać kolejne elementy, które będzie badać i poznawać.
Dobra wiadomość jest taka, że niemal wszystkie te wątki poruszane są bardzo
często w tutorialach i w różnego rodzaju kursach, z których przyjdzie Ci korzystać.
Natomiast na koniec dnia to Ty przede wszystkim musisz dbać o to, aby zwracać
uwagę właśnie na kwestie bezpieczeństwa Twojej aplikacji.
Tymczasem jeżeli chodzi o kwestie security, to by było na tyle.
W związku z tym dziękuję za uwagę i do usłyszenia w kolejnej lekcji.