Я работаю над играми с помощью JavaScript некоторый HTML и CSS, и я задавался вопросом, был ли какой-либо способ защитить игру так, чтобы пользователь не мог просто назвать game.php? result=victory, чтобы закончить игру и заработать некоторое очко.
С прямо сейчас вот решение, которое я имею.
Для случайной игры уже запустите страницу с результата на месте, победы или свободный, затем просто сделайте некоторые анимации для показа его, но весь счет и победить/освободить материал является сделанной серверной стороной.
Для игры сражения просто получите действие от вызова JavaScript, и сделайте вычисление повреждения, реакцию противника на сервере и просто передайте данные обратно.
но последнее решение подразумевает, что я должен буду отправить действиям каждый раз, когда пользователь делает что-либо. Это могло бы работать на поворот, по очереди борются против игры, но я думаю, что она должна была бы замедлиться для любого другого вида игры. Таким образом, мой вопрос, там некоторый безопасный способ, которым я могу подготовить свой JavaScript для обеспечения отправленной информации.
Единственный способ сделать его безопасным, чтобы все вычисления и проверка выполнялись на стороне сервера. Так это делается практически во всех онлайн-играх. Клиенту нельзя доверять в онлайн-общении, и вы всегда должны убедиться на стороне сервера, что пользователь действительно делает что-то правильное. (В любом случае теоретически, на практике вы должны в некоторой степени доверять клиенту в отношении компенсации задержек и передачи некритичных вещей клиентской стороне).
По этой причине javascript не очень хороший язык для разработки онлайн-игр, поскольку каждое действие должно обрабатываться и проверяться сервером. Для других языков программирования это не такая уж большая проблема, потому что вы можете создавать свои собственные протоколы связи, используя TCP / IP для сервера и клиента. Однако для javascript такой возможности нет, потому что вы должны полагаться на протокол HTTP и обработчики XMLHTTPRequest, которые делают очень неэффективную живую связь клиент-сервер.
Как вы сказали, вы всегда можете создать интерфейс на javascript, но для обеспечения безопасности вам все равно нужно выполнять много работы на стороне сервера, и это определенно не работает для игр, требующих более ориентированного на действия управления. Итак, вы в значительной степени ограничены пошаговыми играми, если вам нужна безопасность.
Вы могли бы кое-что сделать, чтобы помешать наивному пользователю, но, вероятно, нет все. Все зависит от того, насколько человек мотивирован «атаковать» вашу игру. В конце концов, пользователь может использовать отладчик javascript, чтобы точно увидеть, что делает ваш код, и воспроизвести его. Даже если вы отправите обратно каждое игровое действие, пользователь все равно сможет это воспроизвести. Если вы не будете осторожны с тем, какие действия может выполнять пользователь, они могут отправить обратно действия, которые были бы невозможны, если бы они управляли игрой со схемой управления по умолчанию.
Нет, никак.
Что не так с отправкой действий пользователя на сервер?
Для победы не должно быть URL. Во время игры клиент должен отправлять пользователю действия, и если он выиграл, сервер перенаправляет его на страницу победы.
На странице победы не должно производиться никаких вычислений/награждений, если таковые имеются.