Сессии или как защитить запросы.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
aaanet
Сообщения: 27
Зарегистрирован: 08 фев 2011, 02:50

Сессии или как защитить запросы.

Сообщение aaanet »

Доброго времени суток!

Всё еще задаюсь вопросами безопасности приложения.
Вопрос состоит в том, как создать сессию или что нужно чтобы запрос к php нельзя было дублировать. Или просто несколько раз повторить.
Ибо тут никакая проверка auth_key не поможет.
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Сессии или как защитить запросы.

Сообщение Noise Gate »

Я пишу md5 от запроса в базу и каждый раз проверяю, не повторяется ли он...
aaanet
Сообщения: 27
Зарегистрирован: 08 фев 2011, 02:50

Re: Сессии или как защитить запросы.

Сообщение aaanet »

ну а если, к примеру.
запрос сам по себе повторяется. т.е. несколько раз пользователь выполняет задание. следовательно каждый раз идет запрос.
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Сессии или как защитить запросы.

Сообщение Noise Gate »

Добавь в сам запрос время в микросекундах, желательно в зашифрованном виде. Тогда md5 от запросов будут разные, хотя запрос по сути будет один и тот же.

Правдо надо понимать, что от декомпиляции это все-равно не спасет, но не так то и много людей ее используют.
aaanet
Сообщения: 27
Зарегистрирован: 08 фев 2011, 02:50

Re: Сессии или как защитить запросы.

Сообщение aaanet »

А поподробнее можно насчет "добавить в сам запрос время в милисекундах"?
а что в скрипте?
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

Re: Сессии или как защитить запросы.

Сообщение Noise Gate »

ох....
а самому подумать?))))

какие у тебя запросы отправляются?
Аватара пользователя
Skaler
Сообщения: 38
Зарегистрирован: 22 мар 2010, 23:29

Re: Сессии или как защитить запросы.

Сообщение Skaler »

вместе с запросом нужно отправлять ещё и unix time или рандом, т.к. он зависит от времени и всегда разный.
его каждый раз нужно перезаписывать в базу и сверять полученный с тем что в базе.
aaanet
Сообщения: 27
Зарегистрирован: 08 фев 2011, 02:50

Re: Сессии или как защитить запросы.

Сообщение aaanet »

Skaler писал(а): вместе с запросом нужно отправлять ещё и unix time или рандом
ты имеешь ввиду в URLRequest добавлять рандом или unix time?
Или как-то по-другому?
Если да, поподробнее))
Аватара пользователя
Skaler
Сообщения: 38
Зарегистрирован: 22 мар 2010, 23:29

Re: Сессии или как защитить запросы.

Сообщение Skaler »

короче вот мой класс:

Код: Выделить всё

package il{    import flash.errors.*;    import flash.events.*;    import flash.net.*;        import vk.api.serialization.json.*;        public class Connection    {        private var _viewer_id:String;        private var _auth_key:String;                public function Connection(viewer_id:String,auth_key:String)        {            this._viewer_id = viewer_id;            this._auth_key = auth_key;        }                    public function connect(scrpt:String, params:Object, onComplete:Function = null, onError:Function = null):void        {            var variables:URLVariables = new URLVariables();            variables['viewer_id']= _viewer_id;            variables['auth_key'] = _auth_key;            variables['random'] = Math.random();            if (params)                for (var i: String in params)                    variables[i] = params[i]                        var request:URLRequest = new URLRequest("http://site.su/"+scrpt+".php")            request.method = URLRequestMethod.POST;            request.data = variables;                        var loader:URLLoader = new URLLoader();            loader.dataFormat = URLLoaderDataFormat.TEXT;            if (onError != null)             {                loader.addEventListener(IOErrorEvent.IO_ERROR, function():void                 {                    onError(new Error("Произошла ошибка соединения"));                });                                loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function():void                 {                    onError(new Error("Произошла ошибка безопасности"));                });            }                        loader.addEventListener(Event.COMPLETE, function(e:Event):void            {                var loader:URLLoader = URLLoader(e.target);                trace(loader.data);                if (loader.data == '')                    onError(new Error('0'))                else                {                    var data:Object = JSON.decode(loader.data);                    if (data.error)                        onError(new Error(data.error))                    else if ((onComplete != null) && data)                        onComplete(data)                }                            });                        try             {                loader.load(request);            }            catch (error:Error)             {                onError(error);            }        }    }}
вот эта строка variables['random'] = Math.random(); добавляет рандом в запрос
вот php:

Код: Выделить всё

<?phpinclude('db_login.php'); $viewer_id = $_POST["viewer_id"];$auth_key = $_POST["auth_key"];$random = $_POST["random"];//получаем рандом из запроса $api_id = '000001';$api_secret = 'qwertyuiop'; if ( $auth_key == md5($api_id."_".$viewer_id."_".$api_secret)) {        $connection = mysql_connect($db_host, $db_username, $db_password);        if (!$connection) die(json_encode(array('error'=>'0')));    $db_select = mysql_select_db($db_database);        if (!$db_select)  die(json_encode(array('error'=>'0')));        $result = mysql_query("SELECT random FROM users WHERE uid = $viewer_id");//в таблице есть поле random    while($result_arr = mysql_fetch_array($result,MYSQL_ASSOC))    {        if ($result_arr['random'] == $random) die();//сверяем рандомы из базы и полученный        else mysql_query("UPDATE users SET random = $random WHERE uid = $viewer_id");    }//дальше скрипт сам закончишь)
aaanet
Сообщения: 27
Зарегистрирован: 08 фев 2011, 02:50

Re: Сессии или как защитить запросы.

Сообщение aaanet »

Спасибо.

Код ясен полностью. Но не могу дошарить(
В чем суть?

Flash делает и передает рандом скрипту.
php принемает рандом и записывает в базу, сравнивает.

ведь при передаче можно поймать рандом?
Ответить