Я планирую создать однопользовательский ролевый экшн в js / html5, и я хотел бы предотвратить мошенничество. Мне не нужна 100% защита, так как это не многопользовательская игра, но я хочу некоторый уровень защиты.
Так какие стратегии вы предлагаете помимо минимизации и запутывания?
Я бы не стал делать какую-то простую проверку на стороне сервера, но я не хочу идти по пути Diablo 3, сохраняя все свои изменения состояния игры на стороне сервера.
Так как это будет своего рода ролевая игра, мне пришла в голову идея сделать инспектор статистики, который проверяет резкие изменения их значений, но я не уверен, насколько он может быть последовательным и достоверным.
А как насчет переменных и функций? Работать с небольшими эскопами всегда, когда это возможно, безопаснее, но стоит ли это усилий?
Есть ли какой-нибудь способ для javascript для самостоятельной проверки его текста, как в контрольной сумме?
Есть браузерные решения? Я не стал бы ограничивать это для Chrome только в ранних сборках.
источник
Ответы:
Короткий ответ: ты не можешь этого сделать. Все, что работает на стороне клиента, особенно из источника, может быть модифицировано, чтобы тривиально победить вашу тактику. Если вы установили средство проверки на стороне клиента для поиска резких изменений, пользователь может просто отключить средство проверки.
Хорошая новость заключается в том, что, как правило, в однопользовательских играх очень мало читерства. Единственное серьезное исключение - игры, в которых есть большие сообщества «рекордов YouTube», такие как Line Rider, где игроки соревнуются друг с другом за YouTube.
Если вы стремитесь к этому, или просто слишком упрямы, чтобы признать, что люди могут обманывать в игре, или ведете высокие рекорды самостоятельно (что является формой многопользовательской игры), то вам нужно выполнить все вычисления на стороне сервера. , Да, все, что имеет значение. Вы даже не можете повторить подсчет на стороне клиента, чтобы попытаться дать пользователю оценку, а затем «проверить» ее на сервере, потому что тогда пользователь может просто отключить проверку и отключить любую систему, которая обеспечивает проверку.
Хотелось бы, чтобы был лучший ответ на это, но нет.
Тем не менее, есть вещи, которые вы можете сделать, чтобы немного сложнее было обмануть. Они не помешают кому-либо серьезному сделать это и выпустить набор инструментов для обмана, но это замедлит их:
Так. Как видите, идти по этому пути, наверное, не стоит. Это трудно. Требует большого количества действительно глупых методов кодирования, и в конечном итоге все еще относительно легко победить. Вам нужно будет выполнить все вычисления на стороне сервера, чтобы предотвратить мошенничество. Или отпусти, и признай, что обман случится.
источник
Я уже ответил на такой вопрос здесь , и мне жаль говорить, но:
Это самое плохое, что вы могли бы здесь сказать. Если вы хотите использовать анти-чит-движок, вам придется это сделать. Вы можете добавить все, что вы хотите на стороне клиента, чтобы облегчить работу на стороне сервера, но вы никогда не должны доверять клиенту. Вся ваша логика должна быть как минимум на стороне сервера. Вы можете воспроизвести его на стороне клиента, если хотите, но ни одно решение на стороне клиента не сделает это.
И, кстати, если вы хотите найти слабость вашей программы, не запутывайте ее, пусть люди увидят ваш код и скажут вам «здесь, у вас есть проблема».
Это хорошо для вас, для вашего кода, для ваших пользователей и для сообщества.
источник
Что ж, для начала лучше всего использовать функцию Object.freeze (которая включит защиту от исправления объектов).
Это «предотвращает добавление новых свойств», «предотвращает удаление существующих свойств», «предотвращает изменение существующих свойств или их перечислимости, конфигурируемости или возможности записи»; любые изменения во внутреннем состоянии должны быть сделаны через средства доступа. Следующий пример работает на chrome (должен работать на firefox, хотя я не знаю об IE ...):
источник
Object.freeze = function(o) {};
в консоль JS.К сожалению, вы должны пойти по пути Diablo 3, если вы действительно обеспокоены хаки / читы. если нет, то необходимо выполнить базовые проверки или настоятельно рекомендуем их выполнить.
... и так далее
1 очко немного хитро - это позиция героя, так как вы не сильно беспокоитесь об этом, вы можете оставить его, но лучше делать это тоже с минимальным чеком, как показано ниже
Надеюсь, это поможет, это звучит сложно, но вам нужно научиться делать реальные рабочие игры
источник
Это в принципе невозможно. Было бы так легко обойти все, что вы положили, чтобы избежать мошенничества.
Дело в том, что с любым распространяемым программным обеспечением люди могут легко изменять его в памяти.
Кроме того, если они хотят обмануть, пусть они. Они просто разрушают игру для себя. Там нет реального практического использования, чтобы обмануть в этой ситуации, вы просто разрушите игровой процесс для себя.
источник
У меня была идея, какую меру вы могли бы предпринять, чтобы предотвратить / уменьшить мошенничество (в дополнение к другим ответам). Вы можете настроить его так, чтобы клиенту не давали весь исходный код за один раз, вместо этого каждый раз, когда клиент хочет, скажем, купить новый товар в магазине, чтобы клиент должен был отправить определенную информацию сервер, и получать всю информацию только для того, что они покупают, если вся информация соответствует тому, что он должен. Если это не так, сервер помещает в черный список их IP или что-то еще.
Вы можете использовать это в сочетании с тем, что Dampes8n сказал об использовании разных версий исходного кода, что если вы сможете найти способ генерировать множество разных версий, чтобы каждый пользователь каждый раз использовал совершенно другую исходную версию, что приводило к сбою проверьте черные списки этой исходной версии, чтобы они никогда не выдавали правильную информацию об элементе для этой исходной версии.
Основная причина, по которой это может быть эффективным, заключается в том, что если хакер не получит правильный взлом в первый раз, ему будет намного сложнее модифицировать хак, потому что каждый раз, когда хак работает не идеально, они должны измените их IP и напишите взломать заново для новой исходной версии.
источник
Да, это не может быть полностью сделано. Всегда проверяйте на сервере. Все, что влияет на игру, требует авторизации с сервера.
Это та степень, в которой я повторю другие ответы.
Тем не менее, мы можем сделать гораздо больше для предотвращения читов, чем просто проверка на сервере. Ну, нам, возможно, придется добавить некоторые специальные проверки сервера. Однако следует помнить, что проверки на стороне клиента не бесполезны, они сохраняют пропускную способность и работу сервера, когда мошенники не задействованы.
С этим сказал:
Да, это все смягчения. У нас все еще может быть пользовательский браузер, который не будет проверять целостность и позволит вам связываться с переменными в локальных областях и связываться с ними ... тогда игровой код отправит измененные данные с нужным токеном, и именно здесь сервер проверяет играть.
источник