Передача информации в php файл из javascript, не позволяя пользователю делать это самостоятельно? - PullRequest
1 голос
/ 06 апреля 2010

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

Лучший способ сделать это - заставить javascript запустить функцию ajax, когда пользователь выигрывает POST-что-то вроде addxp.php? Amount = 235, но если я это сделаю, то пользователь может легко взглянуть на источник и посмотреть, что они могут просто войти на этой странице, чтобы обновить свой XP без боя. Но это единственный способ, которым я знаю, как это сделать?

Помогите пожалуйста: - /

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

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

Прежде всего подумайте о том, какой наивысший балл можно получить за определенный период времени. Например, вы можете сказать, что наибольшее количество очков, которое вы могли разумно получить после игры в течение 1 минуты, составляет 200 баллов.

Каждый раз, когда кто-то начинает играть в игру, вы делаете AJAX-вызов на свой сервер, чтобы получить идентификатор игры. Через определенные промежутки времени (скажем, 10 секунд) ваш игровой телефон возвращается домой с идентификатором игры и последним счетом. Таким образом, единственный способ обмануть это создать скрипт, который периодически связывается с сервером с медленно увеличивающимся счетом, который падает ниже вашего максимума. Это не сложно, но, по крайней мере, теперь мы входим на территорию, где мы устранили случайных хамов с помощью TamperData и несколько минут, чтобы убить скуку.

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

Мое последнее предложение таково: вы никоим образом не заставляете своих пользователей сразу же осознавать, что вы делаете. То есть, если чей-то рейтинг падает выше вашего порога рекордов / времени, вы ничего не делаете, чтобы сообщить им, что они сработали на вашем чит-детекторе. В созданной мной игре я даже записал их рекорд вместе с их cookie. При получении рекордов из вашей базы данных вы выбираете * ОТ баллов ГДЕ обманывают = ЛОЖЬ ИЛИ cookie = userscookie. Таким образом, до тех пор, пока они не очистят свои cookie и не проверит еще раз, (только для них) окажется, что их попытка взлома была успешной.

Ох, и еще одна вещь; минимизировать свой JavaScript. Это запутает код и сделает его очень трудным для чтения. Опять же, кто-то достаточно решительный может легко обойти это и взглянуть на ваш код, но все дело в том, чтобы сделать вашу систему достаточно сложной, чтобы люди не беспокоились.

К сожалению, самая сильная сторона сети иногда может быть и самой слабой. Природа WWW заключается в том, что исходный код открыт и доступен для чтения всем, что означает, что хранить секреты от ваших пользователей очень сложно, если не невозможно.

1 голос
/ 06 апреля 2010

Если вы используете код, запущенный в веб-браузере клиента, для обновления результатов битвы, вы не можете контролировать этот код. Многие javascript и флеш-игры, которые имеют доску рекордов и зависят от браузера, отправляемого при регистрации рекордов, уязвимы для этого. Не существует простого способа обойти это.

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

Как отметил knoopx в своих комментариях, единственный надежный способ обойти это - выполнять вычисления на стороне сервера. Например, клиентский браузер отправляет действия пользователя на сервер, а именно сервер определяет исход битвы, вставляет результат в базу данных MySQL и отправляет результат обратно клиенту. Это, очевидно, серьезное архитектурное изменение, и вам придется решить, стоит ли оно того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...