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