Безопасность Рекордов Ajax

Я создаю игру в жанре Tower Defense на javascript и хочу получить высокий балл и другие многопользовательские взаимодействия. Возможно, пусть несколько игроков одновременно запустят игру и расскажут им, как быстро двигаются другие ребята, и тому подобное.

Я не знаю, как флеш-игры отправляют свои результаты или события, чтобы убедиться, что информация, которую отправляет каждый клиент, действительно верна, а не просто кто-то присылает невероятные результаты. Я помню, как пару лет назад, когда флеш-игры начали получать высокие баллы, очень часто можно было увидеть ненастоящие (взломанные) баллы, и, ну... это довольно странно, нет; так в чем тут секрет?


person DFectuoso    schedule 12.06.2009    source источник


Ответы (4)


Люди всегда будут способны на читерство в играх... лучшее, что вы можете сделать, это затруднить читерство. Счета для старых флеш-игр было очень легко сфальсифицировать, потому что счет отправлялся через HTTP-запрос. Анализ трафика покажет URL-адрес отправки и какие переменные необходимо передать, чтобы обновить оценку. Я надеюсь, что с тех пор он изменился.

На вашем месте я бы использовал некоторый код проверки ошибок, который будет передан вместе с итоговой оценкой, чтобы убедиться, что оценка является законной. Алгоритм кода проверки ошибок должно быть трудно определить по счету (если человек его обнюхивает). JavaScript также должен быть произвольно запутан. Это далеко не идеально, но должно отпугнуть большую часть мошенников.

person Patrick Gryciuk    schedule 12.06.2009

Лучшей практикой, которую я видел для этого, является проверка работоспособности.

Записывайте прошедшее время, убитых врагов и т. д. Сверяйте счет с данными и смотрите, складываются ли они.

person Unknown    schedule 12.06.2009

Это прежде всего неизвестность в наши дни. Как правило, вы назначаете уникальный токен для каждой игры и формируете своего рода хэш счета и токена и проверяете его при отправке (или непрерывной отправке, проверке и переключении токенов на протяжении всего игрового процесса).

Вам будет намного сложнее сделать это через javascript.

person Matt    schedule 12.06.2009

Используйте комбинацию следующих инструментов, которые обычно используются для предотвращения поддельных результатов и отчетов о прогрессе.

  1. Неясность — сжимайте и скрывайте логику, которая вычисляет строку оценки. Распространите его и затрудните обратный инжиниринг.
  2. Случайная смена ключей. Когда ваша игра начинается, пусть javascript запросит ключ, который можно использовать для шифрования строки, содержащей рекорды и т. д. Сервер также должен иметь закрытый ключ, который позволит вам расшифровать сообщение.
  3. Проверка работоспособности. Хотя пользователь может изменить счет, ваши запросы также должны содержать количество убийств и т. д., которые являются известными границами. Сервер проверит хэши и убедится, что данные действительны.
  4. Подумайте об использовании комет-сервера. Поскольку вы будете передавать данные в реальном времени обоим клиентам, вам будет лучше использовать комет-сервер, такой как Orbited или Jetty. Это позволит вести потоковую передачу без сбоя сервера.
  5. Сделайте это разочаровывающим. 'достаточно.
person skyronic    schedule 12.06.2009