Страница 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 принемает рандом и записывает в базу, сравнивает.
ведь при передаче можно поймать рандом?