Как сделать безопасную игру в javascript?
Я работаю над играми, используя javascript, некоторые html и css, и мне было интересно, есть ли способ защитить игру, чтобы пользователь не мог просто вызвать game.php? Result=victory, чтобы закончить игру и заработать немного очков,
На данный момент вот решение, которое у меня есть.
Для случайной игры, запустите страницу с уже достигнутым результатом, выиграйте или проиграйте, затем просто сделайте несколько анимаций, чтобы показать это, но все результаты выигрыша / проигрыша выполняются на стороне сервера.
Для игры в битву просто получите действие от вызова javascript, сделайте расчет урона, реакцию оппонента на сервере и просто отправьте обратно данные.
но последнее решение подразумевает, что мне придется отправлять действия каждый раз, когда пользователь что-то делает. Это может сработать для битвы ход за ходом, но я думаю, что это будет медленным для любой другой игры. Поэтому мой вопрос заключается в том, есть ли какой-то безопасный способ, которым я могу подготовить свой javascript для защиты отправленной информации.
5 ответов
Единственный способ обеспечить его безопасность - все вычисления и проверки выполняются на стороне сервера. Вот как это делается практически во всех онлайн-играх. Клиенту никогда нельзя доверять онлайн-общению, и вы всегда должны на стороне сервера убедиться, что пользователь действительно делает что-то корректное. (В любом случае, теоретически, на практике вы должны в некоторой степени доверять клиенту за компенсацию задержки и разгрузку некритических вещей на сторону клиента).
По этой причине javascript не очень хороший язык для разработки онлайн-игр, так как каждое действие должно быть обработано и проверено сервером. Для других языков программирования это не такая большая проблема, потому что вы можете создавать свои собственные протоколы связи, используя TCP/IP для сервера и клиента. Однако для javascript такой возможности нет, потому что вы должны полагаться на протокол HTTP и обработчики XMLHTTPRequest, которые обеспечивают очень неэффективную живую связь клиент-сервер.
Как вы сказали, вы всегда можете сделать интерфейс в javascript, но в целях безопасности вам все равно нужно выполнять множество действий на стороне сервера, и это, безусловно, не работает для игр, требующих более ориентированного на действие управления. Итак, вы в значительной степени ограничены пошаговыми играми, если вам нужна безопасность.
Вы можете сделать что-нибудь, чтобы помешать наивному пользователю, но, вероятно, не всем. Все зависит от того, насколько мотивирован человек "атаковать" вашу игру. В конце концов, пользователь может использовать отладчик javascript, чтобы точно увидеть, что делает ваш код, и воспроизвести его. Даже если вы отправите обратно каждое игровое действие, пользователь все равно сможет повторить это. Если вы не знаете, какие действия может выполнить пользователь, он может отослать назад действия, которые были бы невозможны, если бы они контролировали игру с помощью схемы управления по умолчанию.
Там не должно быть URL для победы. Во время игры клиент должен отправлять действия пользователя, и если они выиграли, сервер перенаправляет их на страницу победы.
На странице победы не должно быть никаких расчетов / вознаграждений, если таковые имеются.
Будет ли это рассматриваться как вариант? (Поздний ответ)
Перенесите критические (вещи, которые вы не хотите взламывать), на скрытый внутренний флеш-плеер, который действует как хранилище критических переменных, калькулятор (например, точки жизни) и "коммуникатор" на сервер для таких игровых данных.
Это определенно более безопасно, чем JavaScript. Но до сих пор; Всегда лучше предположить, что ваша клиентская сторона на 100% небезопасна. (Даже в играх C++, LOL: хакеры)
Однако, передавая трафик игровых данных во флэш-память, вы можете использовать некоторые из его более интересных коммуникационных функций, например: P2P =)
Нет, нет пути.
Что не так с отправкой пользовательских действий на сервер?