Wpis z mikrobloga

#webdev #programowanie

Jak się zabezpiecza strony internetowe przed modyfikowaniem i ręcznym wywoływaniem pewnych rzeczy? Przykładowo mielibyśmy sobie jakąś funkcję JSową typu "SaveUserData", która zapisuje ustawienia użytkownika do bazy. No i teraz jakby ktoś był sprytny, to mógłby sobie pod F12 taką funkcję odkopać (ma przecież nawet debuger, może sobie popatrzeć co się dzieje w programie jak ktoś kliknie przycisk) i ją sobie wywołać z innymi argumentami albo po prostu ją skopiować, przepisać po swojemu i podmienić aby aplikacja sama siebie zrobiła w wuja. Jak są zabezpieczone fejzbuki, banki i inne takie?
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Khaine: backend po prostu musi być zabezpieczony. Jak user "wywołuje" daną akcję np. modyfikacja hasła to przesyła do serwera pewne dane pozwalające na identyfikację np. cookies, nagłówek z tokenem itd. Backend następnie te dane sprawdza i jeżeli stwierdzi że user może wykonać tę akcję to ją wykonuje, jeżeli nie no to zwraca odpowiedni kod błędu np. 401
  • Odpowiedz
@Gilbertus: A skąd ja mam wiedzieć w backendzie kto jest zalogowany w tej chwili skoro sesja jest zapisana po stronie klienta? Backend dostaje POST i go obsługuje. Jak mam zweryfikować, że ktoś nie podmienił ID użytkownika przykładowo?
  • Odpowiedz
@Khaine: jak sesja jest zapisana po stronie klienta? Sesje masz na serwerze, a user ma tylko jakiś identyfikator sesji który jest przesyłany razem z zapytaniem np. w cookiesie czy jako header np. token. Jak tego nie ma lub jest błędne to backend zwraca "spadaj".
  • Odpowiedz
  • 0
@Khaine zasada taka jak przy grach multiplayer. To serwer weryfikuje prawidłowość danych, autoryzuje możliwość wykonania żądania. Czyli Twoje SaveUserData powinno z poziomu JS powinno pozwalać na zmianę tylko tych parametrów, które użytkownik ma prawo zmieniać samemu (np. Adres). Nie możesz np. wysłać informacji, że zapłacił jakąś fakturę, bo będziesz miał problem jak opisałeś powyżej.
Do tego istnieją programy, które skracają i podmieniają nazwy zmiennych, żeby kod był lżejszy i mniej czytelny,
  • Odpowiedz
Sesja po stronie klienta? Śmiałe podejście. Jeśli rozmawiamy o PHP to sesja jest po stronie backendu, a jedynie klucz sesji jest po stronie klienta.
  • Odpowiedz
  • 0
@Khaine widzę że się spóźniłem trochę. Jeśli chodzi o taką zmianę hasła no to przykładzik jest oczywisty. Musisz mieć sesje powiązaną z użytkownikiem i użytkownik ma prawo zmieniać tylko swoje hasło. W każdym innym przypadku zwracasz błąd autoryzacji.
  • Odpowiedz
@Rst00: Czyli mówiąc krótko backend nie jest bezstanowy i pamięta kto się logował? Każdorazowo pewnie sprawdza także autoryzację użytkownika do uzyskania pewnych danych, bo jakiś cwaniak mógłby kombinować z wywoływaniem funkcji z konsoli.
  • Odpowiedz
@Khaine: Do samej autoryzacji i autentykacji użytkownika dochodzi jeszcze autoryzacja aplikacji. Serwer moze byc tak skonfigurowany że nie zaakceptuje zapytań pochodzących z nieznanych domen/aplikacji.
  • Odpowiedz
@Khaine: no oczywiście że nie jest bezstanowy, musi pamiętać kto wywołuje tę akcję bo np. w przypadku zmiany hasła komu miałby je zmienić? W dużym skrócie w nowoczesnej aplikacji:
1. User wywołuje strzał do API np. zmiana hasła
2. Leci request z headerem Authorization: JWT TOKEN
3. Backend odczytuje request, w "kontrolerze" ma warunek np. isUserAuth() a ta metoda z kolei sprawdza czy token jest poprawny i jeżeli tak to
  • Odpowiedz