Jak chronić wysyłanie wyników z gier HTML5 na mój serwer?

13

Na backend używam java. Mam grę w HTML5; gdy użytkownik go wypełni, wysyłam wywołanie Ajax, aby zapisać wynik w bazie danych. Teraz ktoś może łatwo użyć narzędzi takich jak Fiddler i Firebug, aby zmodyfikować to żądanie ajax i wysłać znacznie lepszy wynik na serwer. Jak upewnić się, że użytkownik nie może manipulować wynikami!

Deepak Singhal
źródło

Odpowiedzi:

18

Nie wysyłaj po prostu liczby całkowitej na serwer. Wyślij zbiór statystyk gry, których można użyć do zweryfikowania, czy wynik był realistyczny. Lub możesz wdrożyć wstępnie udostępniony klucz do obliczania wyniku. Możesz przesyłać przyrostowe wyniki i statystyki w trakcie gry i upewnić się, że wzrost jest rozsądny.

Jednak nie martwiłbym się tym zbytnio. Powyższe sugestie utrudnią, ale nie niemożliwe, przesłanie fałszywego wyniku. Jeśli jednak trochę to utrudnisz, zdecydowana większość osób grających w twoją grę nie będzie zainteresowana próbami oszukiwania.

Uważaj na sposób, w jaki pozwalasz grze komunikować się z serwerem. Nie chcesz, aby twoja gra była punktem wejścia na twój serwer do hakowania. Upewnij się, że zawsze weryfikujesz dane wejściowe i nigdy nie ufasz klientowi.

MichaelHouse
źródło
6
Zobacz programmers.stackexchange.com/questions/150127/... i gamedev.stackexchange.com/questions/37392/..., aby uzupełnić „Nigdy nie ufaj klientowi”
dievardump
@ Byte56 żadna forma zaciemnienia ani szyfrowania nie ochroni twojego kodu przed debuggerem używanym do modyfikowania danych gry podczas gry. Jeśli rozgrywka dzieje się na kliencie, w zasadzie niemożliwe jest zapobieganie tej formie oszukiwania. Przeglądarka obsługująca Javascript nie jest zaufanym urządzeniem komputerowym.
MarkR
10

Jak powiedział Byte56: „nigdy nie ufaj klientowi”, ale:

Nigdy nie ufając klientowi, ma swoją cenę:
Posiadanie wszystkich gier na serwerze znacznie zwiększy koszty infrastruktury.

Zakładając, że większość graczy nie będzie oszukiwać,
a najwyższy wynik osiągnie po pewnym czasie i przestanie się dużo zmieniać

jest środkowa droga.

Nagraj gry (na kliencie).
(W zależności od rodzaju gry może to być bardzo łatwe (np. Szachy) lub nieco skomplikowane (np. FPS dla wielu graczy),
ale zawsze jest to wykonalne.)

Gdy gracz zakończy grę, po prostu prześlij wynik.
Jeśli wynik znajduje się w pewnym zakresie na górze (np. 1% lub 5%),
zażądaj zarejestrowanych danych od gracza
i powtórz tę grę na serwerze.
Jeśli wyniki są zgodne, zaakceptuj wynik.

W ten sposób nie potrzebujesz żadnych dodatkowych zasobów po stronie serwera dla większości gier,
ale możesz zapewnić, że najlepsze wyniki są prawidłowe.

Andreas
źródło
2
Innymi słowy, kogo to obchodzi, jeśli oszukują za coś innego niż najwyższe wyniki (dlaczego i tak by to robili?), Więc tylko te należy zweryfikować.
jhocking
4

Nie martw się o to; ochrona przed wszystkimi atakami jest zasadniczo niemożliwa, jeśli ufasz klientowi. Jeśli nikt nie używa Fiddlera itp., Aby zmodyfikować żądanie AJAX, może po prostu odpalić debuger JS i zmodyfikować dane gry, aby dać sobie 1000 żyć, itp., Lub zmodyfikować kod lub wykonać 100 innych rzeczy, o których nie pomyślałeś.

Napisałem taką grę kilka lat temu i według mojej najlepszej wiedzy nikt nie oszukiwał w ten sposób. Nie było nagrody, oprócz wpisania twojego nazwiska na tablicy wyników.

MarkR
źródło
4

Zmniejsz społeczną motywację do oszukiwania, np. Korzystając z liderów społecznościowych (oszustwo tylko sprawia, że ​​dobrze wyglądasz dla garstki przyjaciół, nie psuje to wszystkim).

Zweryfikuj na serwerze. Joel Poloney dobrze napisał techniki w Game Developer 2012 September „Scale Your Online Game”

Vincent Scheib
źródło
2

Jeśli chcesz stworzyć grę online odporną na oszustwa, musisz obsługiwać całą logikę gry na serwerze. Wszystko, co dzieje się po stronie klienta, może być kontrolowane i manipulowane przez użytkownika. Istnieją techniki, takie jak szyfrowanie lub zaciemnianie, które można wypróbować, ale w końcu wszystko to po prostu bezpieczeństwo poprzez zaciemnienie, które może być omijane przez kogoś, kto jest wystarczająco zdeterminowany.

Oczywiście, gra, która działa na serwerze, jest o wiele bardziej skomplikowana do opracowania, wymaga dużo więcej zasobów po stronie serwera, a opóźnienie sieci ma negatywny wpływ na wrażenia z gry (szczególnie w przypadku szybkich gier), ale jest to jedyny sposób na skuteczne zapobiegać oszukiwaniu graczy.

Philipp
źródło
Nawet to nie zapobiegnie wszelkim oszustwom - po prostu oczywiste „tak, mam legitymację bazillion punktów”. Ponieważ coś musi działać na kliencie, niezależnie od tego mają pewną kontrolę. Przynajmniej każdy klient - szczególnie przeglądarka internetowa - jest skryptowalny.
cHao