Wpis z mikrobloga

Robię teraz projekt quizowej stronki który mam zamiar wrzucić na portfolio wiec chce dobrze podejść do kwestii bezpieczeństwa i stad moje pytanie jak przechowywac poprawna odpowiedz w załóżmy typowym ABCD quizie? Żeby nie była dostępna w frontendzie dla użytkownika, myślałem żeby to zhashowac jakoś ale nie wiem czy to najlepszy practice. #programowanie #webdev #javascript
  • 21
@Kacperoo2: Pierwsze co mi przychodzi na myśl to nietrzymanie tego na frontendzie. Odpowiedzi są przesyłane po kliknięciu "zakończ quiz" i zwracany jest wynik z backendu. Teraz są takie narzędzia że proste api wylikasz sam.
Jeśli to apka dla zabawy i koniecznie chcesz to mieć na frontendzie to trzymaj to w jakimś localstorage czy coś
@Kacperoo2: Dobrze wiesz, że nie ma opcji żeby to ukryć na froncie. Żadne security-by-obscurity nie sprawdzi się na poważnie bo przecież użytkownik będzie miał niekontrolowany dostęp do kodu aplikacji.

@Kacperoo2: generalnie co do zasady najlepiej gdyby był backend czyli nie trzymasz nic na froncie a po wysłaniu odpowiedzi usera, backend odpowiada czy odpowiedź jest dobra czy zła.

No ale jest jeszcze sporo innych metod bo możesz po prostu mieć jakąś jsonową listę gdzie będzie dodatkowe pole całkowicie zahashowane i to z danych oraz takim algorytmem że usera na pierwszy rzut oka nie będzie bez głębokiej analizy w stanie stwierdzić jaka
@Rst00: co Ci da zahashowanie odpowiedzi jak są 4 możliwe odpowiedzi? Wiadomo, trochę to utrudni sprawę, ale ktoś z wiedzą szybko to ogarnie. Tak samo z obfuskacją. Jakieś to utrudnienie jest ale też do przeskoczenia.

Wszystko sprowadza się do pytania jakie motywację ktoś miałby żeby to robić. Jeśli to quiz typu onetowego "sprawdź się czy znasz seriale" to takie "zabezpieczenia" wystarczą bo po co ktoś miałby nad tym siedzieć jak może
@awiner: ale mi chodziło o to żeby tylko nam znanym algorytmem zahashować w dodatkowym polu poprawną odpowiedź a nie wszystkie bo to nie ma kompletnie sensu.

Tak samo z obfuskacją. Jakieś to utrudnienie jest ale też do przeskoczenia.


Trochę nie rozumiem, przecież dokładnie to samo napisałem że da się to przeskoczyć ale doświadczony programista będzie potrzebował nawet godzin żeby dojść do tego jaka odpowiedź jest poprawna.

Co do drugiej części wypowiedzi
ale mi chodziło o to żeby tylko nam znanym algorytmem zahashować w dodatkowym polu poprawną odpowiedź a nie wszystkie bo to nie ma kompletnie sensu


@Rst00: a w jaki sposób chcesz zrobić ten algorytm "tylko nam znanym" jak umieścisz go gdzieś w kodzie JS który jest publicznie dostępny.

Rozkodowanie kodu, który jest po obfuskacji to dla doświadczonego programisty jest chwila. Jest pełno narzędzi które w tym bardzo pomagają. Może dla kogoś
@awiner:

Rozkodowanie kodu, który jest po obfuskacji to dla doświadczonego programisty jest chwila.


Tak Ci się wydaje. Jeszcze po samej obfuskacji to może jeszcze nie byłoby ciężko ale teraz dołóż do tego że trzymasz algorytm w różnych częściach aplikacji, jego składowe jeszcze w innych a do tego masz założenia w stylu że: w momencie wygenerowania pytania z odpowiedziami był też zrobiony timestamp, który też jest przesyłany razem z pytaniami i odpowiedziami
@awiner: no rozmawialiśmy teoretycznie o możliwościach, wskazywałem po prostu że jak ktoś chce, nawet dla podwyższenia swojego skilla to jest w stanie zrobić to tak że zwykły szary user i tak nie odczyta tak prostu jaka jest poprawna odpowiedź, a doświadczony programista będzie musiał spędzić kilka/kilkanaście godzin nad rozwiązaniem. Tak, backend ma najlepszy stosunek jakości do czasu i nie ma co nawet dyskutować bo pisałem o tym od samego początku.
@awiner: piszę po raz trzeci: żeby podwyższyć swojego skilla.

Lepsze takie bawienie się w kombinowanie i zaciemnianie kodu niż składanie kolejnej prostej quizowej appki których jest milion w każdym portfolio.
tylko nam znanym algorytmem zahashować


@Rst00: jak będzie na froncie to będzie znany kazdemu. To o czym piszesz to właśnie security by obscurity czyli grzech glowny zasad bezpieczenstwa.
@leoha: ale ja nigdzie nie powiedziałem że to idealne rozwiązanie, ale w skrajnym przypadku dla zwykłej gówno appki można się tak pobawić, świat się nie zawali. To nie jest aplikacja bankowa tylko quiz, który można właśnie urozmaicić przez takie "zabezpieczenie".
@Rst00: to jest dokładnie pytanie które bym zadał gdyby ktoś zrobił takie zabezpieczenie by obscurity na froncie. „Jaki to ma sens”.
No taki że zapijając się debuggerem na koniec algorytmu dostaniesz gotową odpowiedź czy to była poprawna odpowiedz czy nie, bez zagłębiania się w algorytm. Potem w debuggerze możesz sobie nawet wynik tego „poprawna” „niepoprawna” zmienić przed wysłaniem na serwer o ile to nie gowno quiz jakim zwierzęciem chce być. Ale
Wiem ze może to nie mieć sensu, ale chciałbym działać w backendzie i wrzucenie na portfolio projektu z takim zabezpieczeniem wydaje mi się, ze może być dobrym pomysłem. Dzięki za wszystkie pomysły, narazie siedzę nad frontendem, jak dojdę do tego szyfrowania to mogę dać jakiś update. No i tez fajna opcja żeby się nauczyć czegoś nowego a to lubię w programowaniu najbardziej