Сессии или как защитить запросы.
Сессии или как защитить запросы.
Доброго времени суток!
Всё еще задаюсь вопросами безопасности приложения.
Вопрос состоит в том, как создать сессию или что нужно чтобы запрос к php нельзя было дублировать. Или просто несколько раз повторить.
Ибо тут никакая проверка auth_key не поможет.
Всё еще задаюсь вопросами безопасности приложения.
Вопрос состоит в том, как создать сессию или что нужно чтобы запрос к php нельзя было дублировать. Или просто несколько раз повторить.
Ибо тут никакая проверка auth_key не поможет.
-
Noise Gate
- Сообщения: 691
- Зарегистрирован: 28 апр 2010, 12:34
Re: Сессии или как защитить запросы.
Я пишу md5 от запроса в базу и каждый раз проверяю, не повторяется ли он...
Re: Сессии или как защитить запросы.
ну а если, к примеру.
запрос сам по себе повторяется. т.е. несколько раз пользователь выполняет задание. следовательно каждый раз идет запрос.
запрос сам по себе повторяется. т.е. несколько раз пользователь выполняет задание. следовательно каждый раз идет запрос.
-
Noise Gate
- Сообщения: 691
- Зарегистрирован: 28 апр 2010, 12:34
Re: Сессии или как защитить запросы.
Добавь в сам запрос время в микросекундах, желательно в зашифрованном виде. Тогда md5 от запросов будут разные, хотя запрос по сути будет один и тот же.
Правдо надо понимать, что от декомпиляции это все-равно не спасет, но не так то и много людей ее используют.
Правдо надо понимать, что от декомпиляции это все-равно не спасет, но не так то и много людей ее используют.
Re: Сессии или как защитить запросы.
А поподробнее можно насчет "добавить в сам запрос время в милисекундах"?
а что в скрипте?
а что в скрипте?
-
Noise Gate
- Сообщения: 691
- Зарегистрирован: 28 апр 2010, 12:34
Re: Сессии или как защитить запросы.
ох....
а самому подумать?))))
какие у тебя запросы отправляются?
а самому подумать?))))
какие у тебя запросы отправляются?
Re: Сессии или как защитить запросы.
вместе с запросом нужно отправлять ещё и unix time или рандом, т.к. он зависит от времени и всегда разный.
его каждый раз нужно перезаписывать в базу и сверять полученный с тем что в базе.
его каждый раз нужно перезаписывать в базу и сверять полученный с тем что в базе.
Re: Сессии или как защитить запросы.
ты имеешь ввиду в URLRequest добавлять рандом или unix time?Skaler писал(а): вместе с запросом нужно отправлять ещё и unix time или рандом
Или как-то по-другому?
Если да, поподробнее))
Re: Сессии или как защитить запросы.
короче вот мой класс:
вот эта строка variables['random'] = Math.random(); добавляет рандом в запрос
вот php:
Код: Выделить всё
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); } } }}вот 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: Сессии или как защитить запросы.
Спасибо.
Код ясен полностью. Но не могу дошарить(
В чем суть?
Flash делает и передает рандом скрипту.
php принемает рандом и записывает в базу, сравнивает.
ведь при передаче можно поймать рандом?
Код ясен полностью. Но не могу дошарить(
В чем суть?
Flash делает и передает рандом скрипту.
php принемает рандом и записывает в базу, сравнивает.
ведь при передаче можно поймать рандом?