Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2013, 11:24   #1
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию Игра. AJAX -> PHP защита данных при передаче

Здраствуйте, друзья.

Пишу небольшую игру (браузерную) на Canvas. И возник такой вопрос.

У меня есть поле, на котором расположены объекты. При взоимодействии этих объектов (например, при их столкновении, графически) запускается функция, которая генерирует рандомное число в диапазоне от A до B и отсылает его серверной части (PHP скрипту) при помощи AJAX. Далее PHP скрипт обрабатывает полученое значение и производит определенные действия (например, запись каких-либо данных в базу).

Проблема заключается в том, что запрос к PHP скрипту при желании, возможно эмулировать. То есть злоумышленник теоретически может самостоятельно отослать данные PHP скрипту и он (скрипт) будет их обрабатывать.

Задача следующая.
Мне необходимо сделать так, чтобы PHP скрипт обрабатывал только те данные, которые формируют функции клиента (клиентской части игры, js). При попытке отправки данных скрипту вручную он не должен производить никаких действий.

Вопрос.

Как отличить данные, отправленные PHP скрипту злоумышленником вручную от данных, сформированных на клиентской части игры? Или, может есть другой способ защиты? Шифрование передаваемых данных? Если так, то нужен надежный алгоритм, который будет не сильно влиять на производительность (ибо Canvas, как вы понимаете сам по себе скоростью работы не блещет ). Но опять же, шифрование данных на клиенте - звучит сомнительно. Ибо все, что находится в клиентской части - доступно для изучения злоумышленнику. Следовательно, он будет видеть алгоритм шифрования.

Вообщем, я с таким заданием сталкиваюсь впервые. Наверняка, должно быть какое-то простое решение. Подскажите, в каком направлении двигаться.
No name. Just Linel.

Последний раз редактировалось Linel; 06.04.2013 в 11:26.
Linel вне форума Ответить с цитированием
Старый 06.04.2013, 13:12   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Главное правило любого веб-разработчика - не доверять клиентской стороне.
Проверяйте на сервере правильность данных в запросе и только.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 06.04.2013, 13:54   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
Проверяйте на сервере правильность данных в запросе и только.
Каким образом я могу их проверить?
Скажем, JS-функция по задумке должна генерировать число от 1 до 1000. По игре, если это число равно 1, то игроку крайне не повезло, а если 1000 - то сегодня явно его день.

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

Скажем, скрипту приходят запросы с числами: 1000, 1000 и 1000 в течении 3 секунд. Как я могу сделать проверку на то, что это игровая клиентская часть отсылает данные или же это пользователь своими рученками пытается сжульничать?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 06.04.2013, 14:46   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Цитата:
или же это пользователь своими рученками пытается сжульничать?
Никак. Генерируйте случайно число на сервере и отправляйте клиенту, а он пусть обрабатывает.
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 06.04.2013, 18:57   #5
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
Генерируйте случайно число на сервере
Дело в том, что сервер не знает, в какой момент необходимо генерировать число и добавлять данные в базу. Это зависит от игрового процесса, который происходит на клиенте и опять же, запрос может быть эмулирован.

Правильно ли я понимаю, что единственный способ решения моей проблемы - это перенос всей логики игры в серверную часть? Например, переход на общение клиента с сервером через сокеты?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 06.04.2013, 19:13   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну и кто помешает эмулировать с сокетами?
eval вне форума Ответить с цитированием
Старый 06.04.2013, 20:32   #7
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
ну и кто помешает эмулировать с сокетами?
Что именно эмулировать? Все действие происходит на стороне сервере. Взаимодействие объектов - тоже на стороне сервера.

Клиент лишь отсылает серверу такие данные, как: координаты, информацию о том, что была нажата какая-либа кнопка и так далее.

Злоумышленник хочет отослать серверу координаты путем эмуляции сокетов вместо того, чтобы кликнуть мышкой на "карте"? Да ради бога. Пускай, если очень хочется. Но только зачем?
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 07.04.2013, 10:31   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а я откуда знаю зачем..
это вы сокеты приплели,а я лишь только сказал, что это не препятствие
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условие при передаче данных серверу DEA7H C# (си шарп) 0 04.01.2013 21:52
Ошибка в программе [Delphi 7] при передаче данных - "socket error" -Jack- Работа с сетью в Delphi 7 18.07.2012 07:29
Ошибка при передаче по ссылке N-Cat Помощь студентам 4 10.05.2011 01:24
Ошибка в передаче данных Krasi PHP 3 01.05.2011 17:15
При передаче данных с накопителя на комп или наоборот комп перезагружается? СисТемникс Компьютерное железо 3 15.06.2010 15:21