Wpis z mikrobloga

Czy react jest bezpieczny? W jaki sposób mogę sprawdzić czy użytkownik może coś zrobić? Niezależnie od tego czy robię zapytanie do serwera, aby to sprawdzić, czy pobieram wartości z reduxa, czy sprawdzam jakąś wartość w localStorage czy z czegokolwiek innego, to przecież odpowiedź i tak jest zwrócona do klienta i to tam jest ten jeden "if" np. if (response.userLoggedIn == true) { zrób coś }. A skoro ten "if" jest po stronie klienta to przecież ktoś może go całkowicie zamienić, odwrócić itp. Czy moje myślenie jest prawidłowe? Jeśli nie to poproszę o jakieś wytłumaczenie/artykuł/filmik, cokolwiek
#react #javascript #programowanie
  • 11
@Alodnog: Kolego, niezależnie od użytej biblioteki albo frameworka, weryfikacja uprawnień użytkownika po stronie klienta to pomysł równie dobry, co podcieranie się jeżem. Jeśli masz dane wrażliwe i zależne od uprawnień/autoryzacji/autentykacji, trzymasz je na serwerze i zwracasz do klienta, a nie robisz jakieś dziwne miksy. Jak sam zauważyłeś, podmiana tego lokalnie jest trywialna.
@Solidly: @Czesiowcy: @Zavis: A więc dla przykładu: Chcę pokazać użytkownikowi jakieś zdjęcie na stronie po tym jak poda prawidłowe hasło. A więc robię zapytanie do serwera, aby sprawdzić czy podane hasło się zgadza. Hasło jest prawidłowe. I co dalej? Jak mam temu użytkownikowi pokazać to zdjęcie? Mam na serwerze zrobić komponent ze zdjęciem i wysłać go do klienta? Może robię z siebie idiotę, ale nie potrafię tego pojąć...
@Alodnog: Masz np. logowanie w appce Reactowej, w którym użytkownik przekazuje do serwera login i hasło wysyłając request pod endpoint, np. "/api/login". Serwer weryfikuje podany login i hasło z credentialsami użytkownika w bazie, a jeśli są prawidłowe, to generuje mu token (poczytaj o JWT) + ew. dodatkowo zwraca obiekt usera zawierający np. jego role/uprawnienia. FE (React) zapisuje gdzieś ten token, żeby był dostępny po przykładowo odświeżeniu strony. Możesz też wprowadzić np.
@Zavis: A jeżeli chodzi właśnie o ten panel administratora? No bo mogę zwrócić z serwera link do tego przykładowego obrazka, ale jeżeli chodzi o cały komponent, całą stronę? Muszę ją wysłać z serwera? Bo wyrenderowanie jej na kliencie na podstawie odpowiedzi serwera jest niebezpieczne
@Alodnog: od strony klienta, tak jak napisał @Zavis nie powinieneś np. wyświetlać linku do strony /admin, jeśli ktoś nie ma odpowiednich uprawnień. Ale, jeśli taka osoba przekopie sobie kod źródłowy i znajdzie link do tej strony to może ją odwiedzić bezpośrednio.

W takiej sytuacji, możesz zabezpieczyć całą stronę podobnym middlewarem, jeśli jej załadowanie wymagało zapytania do serwera. Jeśli nie, a użytkownik został tam przekierowany np. za pomocą react-routera, to