Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Безопасность. (http://www.flasher.ru/forum/showthread.php?t=129677)

Tr1te 07.09.2009 20:58

Безопасность.
 
Есть флэш игра, которая взаимодействует с SQL через PHP.
Допустим есть какая то переменная. которая храниться в SQL на сервере. Загружаю эту переменную во флэш, отправляя запрос на сервер, он мне возвращает его значение. И теперь у меня есть эта переменная, и допустим у меня эта переменная меняется, и мне нужно передать на сервер что она изменена. Я формирую запрос, и отправляю на сервер, он записывает в базу новую переменную.

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

Как можно это пресечь?

flash33 07.09.2009 23:19

Убить читера. Более никак

VVall 08.09.2009 01:04

Читеру даже код смотреть не надо, он может воспользоваться каким-нибудь ArtMoney. В сетевой игре все расчёты игровой ситуации должны происходить на сервере, у игрока в клиенте информация только отображается.

random13 08.09.2009 11:15

ну да ну да, плюс ко всему читер может даже оперировать не деньгами а самими запросами отсылаемыми на сервер, из серии пошел туда то, сделал то то... здесь вся защита должна быть на уровне логики сервера, то есть чтобы не получилось что человек сидит например у него в в его виртуальном кошельке 15р, через пол минуты уже оказывается что у него там 10000р

Tr1te 09.09.2009 12:23

Цитата:

Сообщение от random13 (Сообщение 849033)
здесь вся защита должна быть на уровне логики сервера, то есть чтобы не получилось что человек сидит например у него в в его виртуальном кошельке 15р, через пол минуты уже оказывается что у него там 10000р

Да тоже думал насчет этого, думал над алгоритмами. А есть ли какие-то конкретные решения, или примеры, какие алгоритмы уже есть.

mre 09.09.2009 12:58

Цитата:

Сообщение от Tr1te (Сообщение 848963)
и допустим у меня эта переменная меняется, и мне нужно передать на сервер что она изменена

Меняться она должна на сервере, тогда проблемы не будет.

Tr1te 09.09.2009 13:52

Цитата:

Сообщение от mre (Сообщение 849387)
Меняться она должна на сервере, тогда проблемы не будет.

Это не поможет, флэшка то должна отправлять команду на смену переменной, и не важно на сервере она или нет. Подделываешь запрос, и сервер меняет переменную. Меня другое интересует, про то что random13 писал.

random13 09.09.2009 13:58

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

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

mre 09.09.2009 14:33

Цитата:

Сообщение от Tr1te (Сообщение 849419)
Это не поможет, флэшка то должна отправлять команду на смену переменной, и не важно на сервере она или нет.

Ну, приведите пример, какую переменную игры Вы хотите изменить.

iNils 09.09.2009 14:40

Цитата:

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

random13 09.09.2009 14:46

Цитата:

Сообщение от iNils (Сообщение 849438)
Все не так. Флешка сначала получает диапазон возможных изменений, отображает его игроку, он выбирает и отправляет на сервер, где значение проверяется на вхождение в заданный диапазон. Поэтому подделка ничего не даст.

дельное замечание

Tr1te 09.09.2009 16:28

Цитата:

Сообщение от iNils (Сообщение 849438)
Все не так. Флешка сначала получает диапазон возможных изменений, отображает его игроку, он выбирает и отправляет на сервер, где значение проверяется на вхождение в заданный диапазон. Поэтому подделка ничего не даст.

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

iNils 09.09.2009 16:41

Вы упустили следующий момент.
Цитата:

Флешка сначала получает диапазон возможных изменений
Скажем это 5-9, флеш получает эти данные, вы выбираете 9, посылаете, смотрите запрос, подделываете его и посылаете 10, но на сервере скрипт проверяет 10 на вхождение в диапазон 5-9 и получает false.

Tr1te 09.09.2009 17:02

Цитата:

Сообщение от iNils (Сообщение 849491)
Вы упустили следующий момент.

Скажем это 5-9, флеш получает эти данные, вы выбираете 9, посылаете, смотрите запрос, подделываете его и посылаете 10, но на сервере скрипт проверяет 10 на вхождение в диапазон 5-9 и получает false.

Но внутри диапазона можно подделать. Спасибо за способ. А еще есть что нибудь?

mre 09.09.2009 17:10

Как же до Вас донести.
Например, есть персонаж, он стоит на карте, есть скрипт, который обрабатывает действия пользователя (actions.php).
Возможные действия: пойти налево, пойти направо, пойти вверх, пойти вниз.
Любые другие передаваемые скрипту действия игнорируются, то есть пользователь подделав запрос ну никак не сможет пойти по-диагонали.

iNils 09.09.2009 17:17

Цитата:

Но внутри диапазона можно подделать.
Зачем? Ведь тоже самое можно сделать и из флешки?

random13 09.09.2009 17:29

и INils и mre говорят про одни и те же варианты, дело говорят))

Tr1te 09.09.2009 20:54

Дело то дело.
Но дело в валюте, например чтобы купить что-то надо 10000 попугаев, А у него, 200 попугаев, и злоумышленник фабрикует запрос на получение 10к попугаев, я же не ограничу диапазоном, так как он эти 10к реально может получить.
И проблема вовсе не идти направо, налево и пр.

DarkLight 09.09.2009 21:05

Цитата:

так как он эти 10к реально может получить.
Откуда он из получит? Сведения о причине транзакции должны быть, запрос на транзакцию должен проверяться сервером на валидность. Если юзер пытается манипулировать результатами несуществуещей транзакции - баним.

Tr1te 09.09.2009 21:16

Ладно, смысл понятен, спасибо всем, буду пробовать.

HraD 13.09.2009 17:45

Цитата:

Сообщение от Tr1te (Сообщение 849561)
Дело то дело.
Но дело в валюте, например чтобы купить что-то надо 10000 попугаев, А у него, 200 попугаев, и злоумышленник фабрикует запрос на получение 10к попугаев, я же не ограничу диапазоном, так как он эти 10к реально может получить.
И проблема вовсе не идти направо, налево и пр.

Как происходит у вас: С сервера юзеру приходит 10000 попугаев, он хочет купить вещь за 6000 попугаев. Юзер нажимает на кнопку КУПИТЬ и на сервер уходит сообщение, что у юзера количество попугаев поменялось с 10000 на 4000 и появилась вещь АРТЕФАКТ_1. Это пишется в базу.

Как должно быть: С сервера юзеру приходит 10000 попугаев, что является всего лишь отображением его суммы на сервере. Он хочет купить вещь за 6000 попугаев. Юзер нажимает на кнопку КУПИТЬ и на сервер уходит запрос на осуществление данной транзакции. Сервер проверяет, может ли этот юзер купить эту вещь, хватает ли ему попугаев для этого и т.д. В положительном случае сервер вычитает со счета юзера 6000 попугаев, записывает ему АРТЕФАКТ_1 и шлет сообщение, что теперь у тебя 4000 попугаев и АРТЕФАКТ_1.
Как-то так...

AL.exe 14.09.2009 00:08

Что-то какие-то странные споры. Что Вы за приложение делаете такое?

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

Tr1te 14.09.2009 09:21

Цитата:

Сообщение от HraD (Сообщение 850464)
Как должно быть: С сервера юзеру приходит 10000 попугаев, что является всего лишь отображением его суммы на сервере. Он хочет купить вещь за 6000 попугаев. Юзер нажимает на кнопку КУПИТЬ и на сервер уходит запрос на осуществление данной транзакции. Сервер проверяет, может ли этот юзер купить эту вещь, хватает ли ему попугаев для этого и т.д. В положительном случае сервер вычитает со счета юзера 6000 попугаев, записывает ему АРТЕФАКТ_1 и шлет сообщение, что теперь у тебя 4000 попугаев и АРТЕФАКТ_1.
Как-то так...

Этот вариант самый приемлемый, спасибо, буду делать именно так.


Часовой пояс GMT +4, время: 09:56.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.