Страница 1 из 2

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

Добавлено: 23 мар 2011, 15:54
aaanet
Доброго времени суток!

Всё еще задаюсь вопросами безопасности приложения.
Вопрос состоит в том, как создать сессию или что нужно чтобы запрос к php нельзя было дублировать. Или просто несколько раз повторить.
Ибо тут никакая проверка auth_key не поможет.

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

Добавлено: 23 мар 2011, 16:47
Noise Gate
Я пишу md5 от запроса в базу и каждый раз проверяю, не повторяется ли он...

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

Добавлено: 23 мар 2011, 20:23
aaanet
ну а если, к примеру.
запрос сам по себе повторяется. т.е. несколько раз пользователь выполняет задание. следовательно каждый раз идет запрос.

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

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

Правдо надо понимать, что от декомпиляции это все-равно не спасет, но не так то и много людей ее используют.

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

Добавлено: 24 мар 2011, 14:02
aaanet
А поподробнее можно насчет "добавить в сам запрос время в милисекундах"?
а что в скрипте?

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

Добавлено: 25 мар 2011, 10:35
Noise Gate
ох....
а самому подумать?))))

какие у тебя запросы отправляются?

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

Добавлено: 29 мар 2011, 16:33
Skaler
вместе с запросом нужно отправлять ещё и unix time или рандом, т.к. он зависит от времени и всегда разный.
его каждый раз нужно перезаписывать в базу и сверять полученный с тем что в базе.

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

Добавлено: 11 апр 2011, 02:02
aaanet
Skaler писал(а): вместе с запросом нужно отправлять ещё и unix time или рандом
ты имеешь ввиду в URLRequest добавлять рандом или unix time?
Или как-то по-другому?
Если да, поподробнее))

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

Добавлено: 11 апр 2011, 20:50
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");    }//дальше скрипт сам закончишь)

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

Добавлено: 14 апр 2011, 01:21
aaanet
Спасибо.

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

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

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