2013-12-15 6 views
3

Любой игрок может легко обмануть эту игру, изменив количество кексов через консоль браузера. Я хотел знать, есть ли способ предотвратить использование пользователем. Это также размещено на github.Запретить пользователю изменять значения игры в консоли браузера

var numberOfCupcakesDisplay = document.getElementById("numberOfCupcakes"); 
var cupcake = document.getElementById("cupcake"); 

function updateValues() { 
    numberOfCupcakesDisplay.innerHTML = amountOfCupcakes.toString(); 
    //displays number of cupcakes to screen 
    document.getElementById("amountOfToasters").innerHTML = amountOfToasters.toString(); 
    //displays number of toasters to screen 
    document.getElementById("toasterButton").innerHTML = "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp" + Math.round(costOfToasters).toString() + " cc"; 
    //changes cost of toaster every time it is bought by 110% 
} 

cupcake.addEventListener('webkitAnimationEnd', function(e){ 
    e.preventDefault(); 
    this.style.webkitAnimationName = ''; 
}, false); 

function clickCupcake() { 
    ++amountOfCupcakes; 
    cupcake.style.animation = "shiftCupcake"; 
    cupcake.style.webkitAnimationName = "shiftCupcake"; 
} 

updateValues(); 
+1

Любая защита, которую вы пытаетесь вставить, люди могут отменить. Это невозможно. – epascarello

+1

JS - ** клиентская сторона **. Это невозможно изменить. – Doorknob

+0

Создайте локальную переменную, которая содержит значение для защиты и никогда не будет напрямую использовать предоставленные пользователем значения, чтобы изменить его значение. Конечно, если вы отправляете баллы на раскол, тогда все труднее (поскольку HTTP-запросы могут быть легко подделаны). Если бы вы предоставили больше информации, мы могли бы помочь вам лучше. –

ответ

3

Вы не можете предотвратить это. Лучшее, что вы можете сделать, это минимизировать JS, поэтому игрокам сложнее найти правильные значения для изменения. На самом деле вы не можете предотвратить это с помощью любой игры или даже приложения; компьютер пользователя контролирует всю информацию, чтобы они могли делать все, что захотят.

Единственный способ защитить себя от этого - сделать всю обработку на сервере, которым вы управляете. Хотя игроки могут лгать об их входных данных (следовательно, прицеливание или другие хаки).

3

путем изменения количества кексы через браузер консоли

Ну, технически вы можете предотвратить это, создавая новые возможности:

(function(){ 
    var cupcakes = 10; 
})(); 

console.log(cupcakes); // ReferenceError: cupcakes is not defined 

Но обратите внимание, что все еще существуют способы «обмануть», даже с этой защитой (т. е. отредактировать исходный код JS). И если вы отправляете результат на сервер ... ну, это будет еще сложнее, если не невозможно, поскольку вы можете легко отправить простой HTTP-запрос через XMLHttpRequest.

6

Да! В качестве других ответов упоминается IMPOSSIBLE, чтобы пользователи не могли изменять значения из консоли браузера. Другими словами, вы просто спрашиваете Как написать JS-код, чтобы пользователь не мог отлаживать его. Вы всегда можете использовать некоторые методы, которые усложняют жизнь людям, которые хотят обмануть игру.

1. Извлечь код.

Посмотрите данные ссылки для получения дополнительной информации об обфускации.

2.Do не хранит значения управления игрой в глобальной переменной.

Не хранить контрольные значения в глобальных переменных. Вместо этого определите класс и сохраните эти переменные как частные. Таким образом, пользователь должен глубоко разбираться, чтобы выяснить, где поставить точки останова.

3.Minify/Compress your javascripts.

Обфускация более или менее покрывает минерализацию.

0

Возможно, на самом деле есть способ достичь вашей цели. Но это зависит от логики игры.

Если вы можете имитировать игру на своем сервере, вы можете генерировать случайные идентификаторы для тортов, а когда игра создает новый торт (на клиенте), он запрашивает идентификатор для него. Позже, когда пирог «разрушен», он свяжется с сервером и предоставит ему идентификатор торта. Окончательный счет затем вычисляется на сервере из полученных им идентификаторов.

Таким образом вы можете отслеживать, что на самом деле было сделано пользователем.

Но противник может прослушивать сетевые запросы и определять запрос на создание нового идентификатора. Точно так же он может определить запрос, чтобы сообщить серверу, что этот идентификатор был «уничтожен».

Если ваша игровая логика позволяет, вы можете, например. сообщите серверу, чтобы генерировать только один идентификатор каждые 5 секунд или около того. Вы также можете отметить как подделанные все результаты, где все торты были «уничтожены», и ни один из них не был пропущен (если игра достаточно сложная).

Таким образом, он по-прежнему не на 100% безопасен, но вы можете достичь относительно высокого уровня защиты от спуфинга. С другой стороны, это добавляет много осложнений кода, и вы должны взвесить плюсы и минусы.

Смежные вопросы