О безопасности Online Flash-игр
Победителем природно является тот, кто быстрее/точнее/правильнее выполнил задание.
Содержание
Как это трудится?
Подобная онлайн игра обычно состоит из 2 или 3 частей:
- Непосредственно «флэшка», в какой играет пользователь
- Статистика на сервере, сохраняющая результат и определяющая победителя.
- [Опционально] Вспомогательный скрипт на сервере, обеспечивающий флэшку необходимой информацией по запросу.
В случае двухкомпонентной игры (п1, п2), вся игра реализована во флэш. Итоги просто отправляются по HTTP скрипту на сервере.
Если же присутствует вспомогательный скрипт, то во пора игры, флэшка обращается к нему чтобы получить/отправить кой-какую информацию об игре, например текущий прогресс.
Безопасно ли?
С одной сторонки всё правильно и практически безопасно — флэшка общается напрямую со скриптами сервера, пускай и по HTTP, но «замкнуто» для пользователя.
Однако, если принять тот факт что любая информация, получаемая от пользователя, может быть подделана, то эта схема перестаёт быть безопасной.
«Хакер» может проследить протокол общения флэшки с сервером, а затем воспроизвести его, но уже с изменёнными по его усмотрению параметрами.
Под протоколом общения тут понимаются аргументы запроса, передаваемые от клиента серверу и соответствующие аргументы ответа на запрос.
Так как общение флэшки с сервером выходит по протоколу HTTP, подделка информации становится совершенно тривиальной задачей, для решения какой достаточно любого браузера.
Как защититься?
Стоит начать с того, что можно лишь постараться усложнить подделку результатов сокрытием алгоритмов защиты.
Для этого в простейшем случае можно применить кой-какую контрольную сумму, генерируемую на основе случайного числа, времени, параметров браузера и т.д.
Так можно реализовать такую схему:
При начале игры, на сервер пускается случайно сгенерированное число, которое сохраняется в базе данных совместно со временем его получения.
По завершению игры, внутри флэшки по некоторому алгоритму создаётся контрольная сумма из посланного числа, время начала / завершения игры, результата и т.д., которая пускается на сервер вместе с результатом.
Скрипт на сервере по аналогичному алгоритму вычисляет какой образцово должна быть эта сумма и сравнивает её с полученной. Если они равны или имею допустимое отличие (в зависимости от алгоритма), то результат принимается, иначе считается подделанным и отвергается.
Также можно использовать передачу этих по зашифрованному каналу. Это во многих случаях сложнее и может требовать добавочного программного обеспечения, но потенциально более безопасно т.к. «хакеру» будет сложнее получить протокол общения.
Сейчас игра в безопасности?
На некоторое время да, пока ей не заинтересуется более «продвинутый» в безопасности человек.
Стоит также учесть тот факт, что флэш игру можно декомпилировать и посмотреть алгоритм.
Подводя итоги
Любой хаки механизм должен обеспечивать должный уровень безопасности, принятый как минимально необходимый.
Чем немало сложные и надежные алгоритмы применены в защиты, тем больше желающих получить первое пункт на халяву «пойдут лесом». Однако все-таки стоит учитывать целесообразность применения сложной защиты.
Не секрет что её разработка спрашивает определённое число соотношения человек/часов, причем чем сложнее защита, тем вяще будет данное соотношение.
Так например если на сайте попросту выложены флэш-игры для всех желающих, то можно вообще обойтись без защиты.
Однако если по итогам игр подводятся какие либо итоги и/или раздаются награды, то стоит поразмыслить о защитных механизмах. Чем более значимый приз — тем более сложным должен быть механизм защиты от «нечестных» игроков.
Свежие комментарии