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.
Proponuję, abyśmy podsumowali sobie temat
walidacji i zwrócili uwagę na elementy, na które trzeba zwracać uwagę przy rozwoju
aplikacji i kontroli przepływu informacji wewnątrz nich.
Jak się pewnie domyślasz, pierwsza zasada
dotyczy tego, aby z założenia nie ufać żadnym danym.
Nawet jeżeli komunikacja odbywa się
wewnątrz aplikacji, to tam również mogą wystąpić błędy, nawet niecelowe, które
mogą doprowadzić do niepożądanych błędów, w tym nawet utraty danych.
Następnie takim pierwszym etapem walidacji danych jest upewnienie się, że nie
przekraczają określonych wartości, bo nierzadko złośliwe skrypty wykorzystują
fakt, że nie ograniczamy przykładowo długości posta, do którego możemy
wprowadzić emaile i tym samym też narażamy naszą aplikację na różnego rodzaju ataki.
Podobnie też poza długością warto dbać o zakresy.
Przykładowo, jeżeli w koszyku z zamówieniem przekażemy minus 1/3 liczbie
produktów, to naturalnie musisz brać to pod uwagę.
No i ostatecznie mamy jeszcze kontrole formatu danych, czyli upewnienie się,
że dane trafiają do nas w formie, której oczekujemy i którą wspieramy.
Następnie mamy wymagania dotyczące nagłówków i tutaj również warto upewnić
się, że nasza aplikacja wspiera nawet bardzo proste nagłówki, takie jak
określenie typu danych wysyłanego zapytania.
Jest to ważne ze względu na to, że
przykładowo brak content type ustawionego na np.
application flash Jameson otwiera furtkę
na ataki, które symulują wysyłanie danych, które mogą zostać zinterpretowane jako GN.
Następnie mamy kontrolę typów i mam tutaj
na myśli nie tylko i kontrolę typów na poziomie kompilacji,
ale także upewnienie się, że do naszej aplikacji w trakcie jej działania mogą do
niej trafić wyłącznie dane typu, którego się spodziewamy.
Coś takiego pokazałem na przykładzie klasy D.
Tutaj już będziemy sobie jeszcze mówić.
Następnie w przypadku przesyłania jakichkolwiek plików, czy to graficznych,
tekstowych czy jakichkolwiek, musimy koniecznie sprawdzać ich MIME type.
Ze względu na to, że jeżeli o to nie
zadbamy, pliki jednego typu mogą podszywać się pod pliki drugiego typu.
Czasem jest to celowe, czasem nie, ale warto to sprawdzić.
Następnym punktem są wyrażenia regularne.
I tutaj zwracam uwagę na przygotowane
przeze mnie warsztaty, które umożliwi Ci poznanie ich w stopniu wystarczającym do
tego, aby wykorzystywać je w codziennej pracy.
Zaznaczę tylko, że warto stosować je
bardzo rozważnie ze względu na to, że z jednej strony obniżają czytelność kodu, a
z drugiej strony napisanie wyrażenia regularnego, które np.
źle realizuje dane jest naprawdę bardzo proste.
Dalej w kolejce mamy również przykład, o
którym zdarzyło mi się już mówić, czyli odrzucenie wszelkich dodatkowych
informacji, które zostają dołączone do zapytania.
Podobnie też zwracam uwagę na to
weryfikowanie, czy dany użytkownik ma też dostęp do wykonania określonej czynności i
też uwzględnienie w tym tego, aby sprawdzić, czy czasem nie próbuje
przypisać nieswoich danych do nie swojego konta.
Kolejnym krokiem jest tutaj ograniczenie
rozmiaru całego zapytania i tutaj nie mam na myśli tylko pojedynczych pól, ale
łącznej ilości danych, które można wysłać w jednym zapytaniu.
Coś takiego możemy skonfigurować zarówno
na poziomie aplikacji, jakie również na poziomie serwera.
Tak naprawdę jedno i drugie ustawienie powinno być tutaj wykorzystywane.
Kolejnym wątkiem jest w zasadzie nie tyle
walidacja, co zabezpieczanie się na wypadek błędów walidacji w taki sposób, że
w momencie gdy wystąpią, dodajemy je do naszego pliku logów.
Coś takiego bardzo przydaje się w sytuacji, gdy później na przestrzeni czasu
chcemy zweryfikować to, czy nasza aplikacja działa poprawnie lub też
ewentualnie dowiedzieć się, co działo się w sytuacji, gdy np.
z jakiegoś powodu aplikacja przestała
działać, a potem okazało się, że ktoś próbował się do niej dostać.
Zatem z całą pewnością warto o to zadbać i tym również będziemy się jeszcze zajmować.
Kolejnym wątkiem jest nielubiana przez wszystkich cecha, natomiast warto ją
rozważyć szczególnie w momencie, gdy mamy do czynienia z publicznymi formularzami,
które chcemy zabezpieczyć przed różnego rodzaju botami.
Dodam jeszcze, że najnowsze wersje CA działają również w taki sposób, że nie
wymagają od użytkownika za każdym razem uzupełniania jakichś quizów, tylko
wyświetlają takie okno tylko wtedy, gdy nie ma innego wyjścia.
Kolejnym wątkiem jest już temat z zakresu
typowo security, a konkretnie wykorzystanie tokenów zabezpieczającymi
przed atakami CS, o których również będziemy mówić.
W każdym razie na ten moment zapamiętaj tylko tyle, że istnieje coś takiego jak
kod oraz CSS i są to tematy z zakresu security, które należy brać pod uwagę w
momencie, gdy w Twojej aplikacji pojawiają się jakieś dane.
No i kolejny wątek to wspomniany już kod,
czyli zabezpieczenie się na wypadek zapytań z innych domen.
I tutaj warto to brać pod uwagę ze względu na to, że bardzo często spotykam się z
przykładami tutoriali, które rozwiązują problem w taki sposób, że całkowicie
eliminują zabezpieczenie przed takimi atakami.
W związku z tym, nawet jeżeli masz
potrzebę komunikowania się pomiędzy domenami, to zawsze upewnij się, że nie
wyłączasz jej całkowicie, tylko wskazujesz, które.
Są upoważnione do kontaktu z Twoją aplikacją.
I ostatni temat być może oczywiste dla
niektórych osób, natomiast warto zadbać o to, aby usuwać nieużywane już ścieżki.
Łatwo o nich zapomnieć, a w przypadku modyfikacji jakichś innych ustawień
aplikacji można doprowadzić w ten sposób do sytuacji, w której użytkownicy uzyskają
przypadkowy dostęp do danych, do których dostępu mieć nie powinni.
I tak właśnie wygląda pełna lista przynajmniej tematów, które mi przyszły do
głowy w temacie walidacji danych, które trafiają do naszej aplikacji.
Natomiast pamiętaj o tym, że lista
security jest zdecydowanie większa i pomimo tego, że jako full stack
developerzy mamy do opanowania wiele różnych obszarów, tak z pewnością temat
security warto znać przynajmniej na poziomie, który da nam świadomość tego, co
grozi naszej aplikacji oraz tego jak możemy się przed tym zabezpieczyć.
Naturalnie tutaj nie mówimy o budowaniu
jakiś systemów bankowych, ale chodzi po prostu o unikanie tych najbardziej
popularnych błędów, które często nawet nie muszą wiązać się z atakami na naszą
aplikację, ale na zwykłe pomyłki użytkowników bądź też nas samych.
Niemal wszystkie wymienione na tej liście tematy będą jeszcze poruszane na
praktycznych przykładach lub też już do tej pory zdążyliśmy o nich wspomnieć.
Jeżeli jednak któryś z nich Cię zaciekawił, to polecam również poczytać
jakieś artykuły na ich temat, bądź pooglądać filmy na youtubie.
Aczkolwiek na koniec dnia, tak jak
powiedziałem, jeszcze zobaczymy je w praktyce.
Dzięki za uwagę i do usłyszenia za chwilę.