Безопасность веб-приложений для логических операций на стороне клиента - PullRequest
4 голосов
/ 27 августа 2011

Я работаю над игрой в браузере, используя преимущества Canvas, доступные в HTML5. Однако я понял, что у меня большая уязвимость в системе. Счет игры и другая статистика игрового процесса рассчитываются на стороне клиента в Javascript, а затем отправляются на сервер для хранения и сравнения с другими игроками через XMLHTTPRequest. Это, очевидно, подвергает статистику манипуляциям и потенциальному обману.

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

Существуют ли другие умные способы решения этой проблемы? Я думаю, что с ростом HTML5 все больше и больше игр будут иметь дело с этим.

Ответы [ 4 ]

1 голос
/ 27 августа 2011

Не совсем. Ваш сервер в этом сценарии - не что иное как база данных, которая доверяет клиенту. Вы можете запутать, но люди легко смогут понять, что делает ваш API. Это неразрешимая проблема со всеми автономными играми, и поэтому, например, вы видите, как Blizzard делает Diablo3 игрой клиент-сервер. Тот факт, что это игра на javascript, делает ее еще более прозрачной и простой в использовании для отладки и использования.

0 голосов
/ 28 августа 2011

100% -ная безопасность недостижима, когда вам приходится доверять данным клиента. Тем не менее, вы можете усложнить мошенничество, запутав код js, а также данные, которые вы отправляете с клиента.

У меня есть идея, похожая на комментарий gviews.

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

Кроме того, я бы предложил использовать некоторые контрольные точки, где вы будете проверять реальное состояние игры на клиенте и состояние на сервере. (состояние клиента не изменится, если мошенник изменит только обновления сервера на xhr).

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

0 голосов
/ 27 августа 2011

К сожалению, вы ничего не можете с этим поделать. Сокращение / запутывание вашего кода всегда является хорошим вариантом. Я не совсем уверен, но я думаю, что ваш код внутри

(function() { /* code */ })();

должен защищать любые переменные от редактирования пользователями (если только вы не прикрепили их к объекту, подобному window). Но пользователи по-прежнему могут использовать ваш AJAX-вызов и отправлять на сервер все свои результаты. Просто никогда не доверяйте ничему, что делается на стороне клиента. Проверьте все на стороне сервера.

РЕДАКТИРОВАТЬ: Еще одна вещь, о которой я подумал: возможно, сгенерировать код на стороне сервера и отправить его в браузер. Затем при каждом ajax-вызове отправляйте этот код, чтобы убедиться, что это вы, а не какой-то злоумышленник.

0 голосов
/ 27 августа 2011

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

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