Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.05.2012, 03:26
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 1  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
По умолчанию JSON.parse

Доброго времени суток.
Обращаюсь к Вам, т.к. уже несколько часов промаялся с этим.
Суть происходящего.
На сервере(php-скрипт) - формирую ответ - строку.
PHP код:
$key1 '{"message":"login", "value1":'.$value1.'}';
$key2 $serverTime;
$key3 MD5($key1.$key2.$signature[$random]);
echo 
'{"key1":'.$key1.', "key2":'.$key2.', "key3":"'.$key3.'"}'
С этим проблем не возникает. Он как надо выдаёт эхо, всё без проблем.

Далее в клиенте парс строки в объект c тремя ключами. Причём, первый ключ - сам по себе тоже объект.
Что-то вроде такого получается
Код AS3:
var response:Object = JSON.parse(e.target.data);
//где response.key1 - объект
//response.key2 - значение времени
//response.key3 - сигнатура от двух первых ключей, сделанная на сервере
НО

Столкнулся с тем, что после парса - меняется положение ключей в объекте key1. Он становится не
Код AS3:
{"message":"login", "value1":'.$value1.'}
а
{"value1":'.$value1.', "message":"login"}
Соответственно, дальнейшие проверки на "правильность" сигнатуры - бессмысленны, т.к. строка от key1 - уже другая. Собственно, вопроса два.
1) как это можно побороть?
2) есть ли какой-нибудь алгоритм составления? Алфавитный порядок/ число символов в ключе - чтобы составляя ответы сервера - можно было хотя бы заранее расставить всё в нужном порядке, чтобы клиент их не перетасовал в другом.

Старый 21.05.2012, 03:38
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 2  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
обращайтесь к элементам объекта по именам. Объект - это неупорядоченный хеш, и нет никаких обязательств по порядку очередности выдачи эл-тов.

Старый 21.05.2012, 03:48
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 3  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от fish_r Посмотреть сообщение
обращайтесь к элементам объекта по именам. Объект - это неупорядоченный хеш, и нет никаких обязательств по порядку очередности выдачи эл-тов.
я бы и рад, но MD5 - криптит строку. А клиент не даёт её собрать вновь.

Старый 21.05.2012, 04:00
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Криптите только элементы своего ассоциативного массива.

Старый 21.05.2012, 04:04
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 5  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от Bgg Посмотреть сообщение
Криптите только элементы своего ассоциативного массива.
Т.е. сначала создавать массив из значений, криптить их в нужной очередности, а потом из этих же элементов составлять строку?

UPD: так-то это ничего не даст, потому что количество value в первом ключе - может быть разным. А перебирать все случаи - это глупо.


Последний раз редактировалось Frost47rus; 21.05.2012 в 04:08.
Старый 21.05.2012, 04:29
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 6  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Ничо не понял. И проблемы не понял.
PHP код:
echo '{"timestamp":'.$key1.', "sig":'.$key2.', "data":"'.$key3.'"}'
Код AS3:
var response:Object = JSON.parse(e.target.data);
if(response.sig == MD5.encrypt(response.data + response.timestamp + superSecretParam){
  //ok
}else{
  //не ok
}

Старый 21.05.2012, 07:54
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 7  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
Цитата:
Сообщение от Bgg Посмотреть сообщение
Ничо не понял. И проблемы не понял.
PHP код:
echo '{"timestamp":'.$key1.', "sig":'.$key2.', "data":"'.$key3.'"}'
Код AS3:
var response:Object = JSON.parse(e.target.data);
if(response.sig == MD5.encrypt(response.data + response.timestamp + superSecretParam){
  //ok
}else{
  //не ok
}
Всё дело в том, что data(у меня это key1) - это объект. Соответственно в пхп он будет выглядеть как строка.
А клиент флеш примет его вот так:
Код AS3:
{"key1":{"message":"login", "value1":2}, "key2":1337568049, "key3":"69efd29eb68d9f35fad49ef7e78616b5"}
И после JSON.parse - он будет выглядеть не как {"message":"login", "value1":2}, а рандомно.
{"message":"login", "value1":2} или {"value1":2, "message":"login"}
Соответственно, приведение уже распарсенного объекта key1 к строке - будет в 50% случаев строкой, отличной от той, что была на сервере. (и это только при наличии двух значений в ключе).

Проблему решил, вручную перебрав максимальное количество значений в первом ключе. Если придумаю более оригинальное решение - напишу.
Код AS3:
serverData = JSON.parse(e.target.data);
var str:String = new String();
str+=serverData.key1.message;
if (serverData.key1.value1) { str += serverData.key1.value1; }
if (serverData.key1.value2) { str += serverData.key1.value2; }
if serverData.(key1.value3) { str += serverData.key1.value3; }
if (serverData.key1.value4) { str += serverData.key1.value4; }
if (serverData.key1.value5) { str += serverData.key1.value5; }
 
if (serverData.key3 != MD5.encrypt(str+serverData.key2)) {
var k:Object = new Object();
k.message = 'Cheat Detected';
banThatBitch();
loader.close();
errorFunc(k);				
return;
}
//нет подмены

Старый 21.05.2012, 10:03
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 8  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от Frost47rus Посмотреть сообщение
Если придумаю более оригинальное решение...
это... вряд ли )

Старый 21.05.2012, 10:24
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Может передавать на объект с ключами, а массив объектов с ключами? Тогда и порядок сохранится, и кол-во объектов будет очевидным.
__________________
hauts.ru

Старый 21.05.2012, 10:54
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 10  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Если важен порядок - надо использовать JSON массив. А от, что вы хотите - хотеть от JSON в принципе нельзя.

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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