Я хочу создать игру полностью на html5/css/js. Единственным взаимодействием с сервером планирую сделать отправку очков и, возможно, ещё некоторых данных, а также запрос на рейтинг игроков. Эта информация будет заноситься/выбираться из базы данных при помощи php
Как сделать так, чтобы пользователь не смог отправить на сервер «накрученные» данные?
Я думал, может при загрузке страницы передать в одну из переменных какой-то код, а на сервере потом уже сверять его опять...
Ответ
Доказать, что предотвратить накрутку невозможно, просто: представьте, что это не игра и очки, а банк и деньги. Код на стороне клиента, вплоть до каждой переменной – целиком в руках мотивированных злодеев. Разумеется, разберут, поймут, как, и накрутят.
Но это всего лишь игра. Поэтому достаточно усложнить накрутку до такой степени, что вряд ли кто-то озадачится её провернуть.
Можно подумать про время: пусть в процессе игры на сервер отправляются промежуточные данные. Напр. для тетриса ускорение игры прогнозируемо. И если во время t1 он уже набрал x1 очков, в t2 – x2, то супер-результат xs, он может набрать примерно во время ts. Школьный хакер вряд ли заморочится до подбора такой динамики с отправкой промежуточных результатов, и вы сможете отличить отправялемые живой игрой от накрученных.
Можно не отправлять очки в лоб, а устроить диалог Клиента (К) и Сервера (С):
К: хочу отправить рекорд
С: что, правда? Ну вот тебе случайное число.
К: прибавляет к случайному свой результат, и проделывает ещё какие-то вычисления и результат тут же отправляет серверу.
С: ок, ты справился с заданием почти мгновенно, вроде все ок, записал результат.
Если вычисления нетривиальны, а JS код обфусцирован, мало кто доберется до сути и подделает результат.
Комментариев нет:
Отправить комментарий