Wilu88
11.08.2010, 10:22:42
Witam
Mam oto taki problem. Robię moduł głosowania na najlepszego gracza. Formularz po stronie użytkownika wygląda następująco:
|Zawodnik|Ocena (pole select)|Zawodnik ID(pole input atrybut hidden)|
Sprawa wygląda następująco po naciśnięciu przycisku submit w pętli odczytuję ID zawodnika i wybraną dla niego ocenę i wysyłam do bazy. No ale tu jest pewien problem, bo przecież mając np Firefoxa bez problemu możemy manipulować zawartościami pól ukrytych a tym samym, ktoś mógłby ocenić 10 razy tego samego zawodnika, lub gracza, którego nie ujęliśmy w głosowaniu.
Macie jakiś pomysł jak się przed tym zabezpieczyć?
Chodzi mi jeszcze po głowie żeby wrzucić id zawodników przy generowaniu formularza do sesji i później je porównać z tym co jest w ukrytych polach, czy ma to jakiś sens?
MacDada
11.08.2010, 10:42:20
Użyj sesji. Przy wejściu na stronę użytkownik będzie generował ciasteczko. Teraz gdy użytkownik głosuje na zawodnika to po stronie serwera sprawdzasz w sesji info o tym. Przechowujesz np tablicę z ID zawodników. Jeśli id jest w sesji to nie dodajesz głosu.
everth
11.08.2010, 11:07:50
Możesz użyć sesji, możesz użyć sum kontrolnych, możesz użyć ciasteczek.
Mi pierwsze co wpadło do głowy to dodanie ukrytego pola checksum w formularzu z sumą np. md5 liczoną po wierszu w tabeli+jakaś sól. Później jak masz id to liczysz sumę po tym wierszu i sprawdzasz do sumy kontrolnej - zgadza się to nie ma manipulacji (przy założeniu że pola w tabeli nie zmienią swojej zawartości po drodze).
Które rozwiązanie wybierzesz - już twoja wola i umiejętności.
EDIT: Drugie spojrzenie - rozwiązanie z sumą ma wadę - zbyt łatwo powiązać id <=> suma kontrolna. Lepiej jednak użyć sesji.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.