Предотвратить Обман на Javascript Game
В настоящее время я занимаюсь разработкой игры с использованием JavaScript/JQuery. Это простой тип игры, учитывающий счет, уровни и т. Д. Я планирую внедрить таблицу лидеров, в которую пользователи могут отправлять свои итоговые результаты. Единственная проблема, с которой я сталкиваюсь, это то, что пользователи манипулируют счетом с помощью инструментов разработчика в большинстве браузеров. Я понимаю, что хранение вещей на стороне сервера решит большинство из этих проблем, однако, если большое количество пользователей, это сильно ударит по моему серверу с запросами. Файлы cookie - легко изменяются на стороне клиента. У меня, честно говоря, нет логических идей для продвижения честной игры, потому что ВСЕГДА есть люди, которые стремятся обмануть / стать лидерами. С учетом вышесказанного, каков эффективный и эффективный способ отслеживать счет пользователя, не давая ему доступа к его изменению?
7 ответов
Запутать их счет, создав уравнение, которое можно рассчитать только на стороне сервера.
Изменить: RobG является правильным в том, что он должен быть рассчитан на стороне клиента.
Я взломал игру Angry Birds, когда она была запущена на Chrome:
http://wesbos.com/all-levels-html5-angry-birds/
Однако с тех пор они настолько запутывают код, что невозможно понять, какая функция вычислила хэш.
Сделайте так, чтобы на странице была представлена полная переигровка игры, а не только итоговый счет. С учетом случайного начального числа и покадровой записи пользовательского ввода ваш сервер должен иметь возможность моделировать и реконструировать игру и проверять счет.
Очевидно, что воспроизведение также может быть сфальсифицировано, но это будет стоить такой большой работы (фактически играя в игру и фактически получая хороший счет, хотя и с несправедливым преимуществом помощи AI, замедления и других хаков клиента), что результаты с помощью инструмента должны заслуживают быть в списке лидеров.
У меня была идея использовать таймер игры. Если пользователь изменяет счет на сумму, которая, очевидно, невозможна с учетом прошедшего времени, откажитесь регистрировать информацию. Вы можете запустить таймер и проверить таймер в вашем серверном скрипте.
Теперь, конечно, если они изменят балл только на несколько пунктов, эта проверка может провалиться, но, если они добавят только менее влиятельную сумму, то, возможно, это не будет иметь для вас такого значения?
Вы не можете гарантировать отсутствие обмана, это невозможно. Сервер отвечает на запросы, вот и все. Он не знает, какой код выполняется на клиенте, в каком типе пользовательского агента или в какой среде он находится, и даже на том, выполняет ли он ваш код или факсимильный аппарат.
Вы можете сделать различные шаги, чтобы сделать подделку более сложной, но вы не можете сделать это невозможным. Стоимость таких мер (обычно рассматриваемых как "безопасность") обычно балансируется со стоимостью защищаемого актива.
Никогда ничего не кладите на клиента. Клиент в руках врага. Никогда никогда не забуду это.
Вы также можете сделать таблицу лидеров менее важной, поделившись результатами только с "доверенными" друзьями. Или просто позволяя людям делиться своим счетом на любом сайте социальной сети. Может быть, это устраняет основную мотивацию обманывать в первую очередь.
Затем вы всегда можете неявно сравнивать результаты со статистикой, которую вы собрали, чтобы определить, хорошо ли работает кто-то или нет.
base64 кодирует вашу страницу JavaScript. Это должно остановить людей с IQ ниже 120