PDA

Просмотр полной версии : Как определить Referer при отправке данных флешом (LoadVars)


iNils
28.11.2005, 14:13
Есть сайт A, который подгружает флеш с другого сайта B.
Это флеш отправляет данные с помощью LoadVars php-скрипту на сайт B.
Чтобы некий "не хороший человек" не мог отправлять левые данные, я хотел определить peferer и таким образом узнать что данные отправила флешка загруженная именно с сайта B.

Но выяснилось, что peferer при этом отсутствует. Есть ли какие другие решения?

Antares
28.11.2005, 17:12
Прикладывай свой референс, отправляя __url рута, обрезая его, как надо. А вообще я не очень понял расстановку, флэшку в домене В пишшь ты?

iNils
28.11.2005, 17:28
Флешку я пишу. Но посмотрев, что она отправляет и куда, любой может сам отправить данные, в том числе и измененный _root.url. Если бы было так все просто, я бы не спрашивал :)
Выходит, узнать, что данные пришли от www.b.ru/flash.swf не возможно, только если в сами данные эту информацию не вставить.

Jlekc
28.11.2005, 17:34
урл рута, хмм.
А есе просто в строке броузера кинут данные и приатачать урлРута??
неа, не катит


На сайте В зарег сессию. (есе кнешна ты можеш)
Перед отсылкой данных сделай запрос на получения некого ключа(генериться в сессию).
С этим ключом отсылаеш данные. Время жизни ключа поставь на 3сек, или чтот подобное.
Тут прявязка к сесии, данные кодируються ключом. Из адресной строки неуспееш ниче сделать, как не старайся

Правда, мона повесить маппер на порте броузера, но это уже сложнее.

iNils
28.11.2005, 17:46
В промежутке мужду загрузкой флеша с сайта B и отправкой обратно информации, продолжает грузиться контент сайта B. Сколько времени пройдет между загрузкой и отправкой, таким образом узнать не получиться.

Antares
28.11.2005, 18:03
Прицепи хедер с помощью addRequestHeader, я просто не помню, какой. Но это можно найти. По идее тот рефферент, что в $_SERVER, передается приложением, и браузеры генерят его стопудово, а вот прочие приложения -- как хотят

iNils
28.11.2005, 18:23
Прицепи хедер с помощью addRequestHeader, я просто не помню, какой. Но это можно найти. По идее тот рефферент, что в $_SERVER, передается приложением, и браузеры генерят его стопудово, а вот прочие приложения -- как хотят
Ну все, вопрос снят.
Если я смогу внутри флеша переопределить refere, то это может сделать любой и смысл проверять его отпадает.

Отсутствие результата тоже результат :)

Jlekc
28.11.2005, 18:28
а причиной его использования что было? мона поинтересоваться?

iNils
28.11.2005, 18:32
Обработка только тех данных пришедших из флеша, загруженного с определенного урла.

Jlekc
28.11.2005, 18:38
данных пришедших из флеша, загруженного с определенного урла.
а есе данные вмонтировать внутрь флеши, загруженного с определенного урла. Ты небудеш уверен в их подлиности?

Jlekc
28.11.2005, 18:39
ЗЫ: или флеша должна делать запрос и ты хочеш быть уверен что это зделала флеша, загруженного с определенного урла?

Nirth
28.11.2005, 18:40
а не подходит в этом случае LocalConnection ?

iNils
28.11.2005, 19:12
ЗЫ: или флеша должна делать запрос и ты хочеш быть уверен что это зделала флеша, загруженного с определенного урла?
Вот именно.
Если посмотреть что отслылает флеш и куда, можно сделать свою флешку которая отправляет совсем другие данные.

iNils
28.11.2005, 19:12
а не подходит в этом случае LocalConnection ?
Можешь мысль развить?

Nirth
28.11.2005, 19:14
насколько я понял, все дело происходит с двумя флэшками работающими на одном компе? тогда локалконекшн и не разрешать конектиться с других доменов.

iNils
28.11.2005, 19:16
насколько я понял, все дело происходит с двумя флэшками работающими на одном компе? тогда локалконекшн и не разрешать конектиться с других доменов.
Нет, флешка одна.

Jlekc
28.11.2005, 19:28
Вот именно.
Если посмотреть что отслылает флеш и куда, можно сделать свою флешку которая отправляет совсем другие данные.

дык повторюсь.
На сервере регистрируеш сесию. Броузер ее получает, есе загрузил внутрь флешу, она будет превязана к данной сесии.
Во время передачи данных генериш ключ, и отсылаеш его флешке, он им криптует данные и отсылает назад.

Есе данную флешку запустить отдельно от броузера(просто с харда, как я понимаю в этом проблема?), она не будет привязана к сесии, и проверку не пройдет.
Есе запустить ее намана в броузере, получить ключь, декомпильнуть, и ключем криптонуть данные и отослать. На это нуна время. Есе ключ будет активен пару сек, тада твоя проблема решена.

Или чота не так??

Antares
28.11.2005, 20:47
айНилс, увы, это совершенно не способ защиты. Проще тогда уж посылать ключ, который знать будешь только ты, сверять его в php, действовать accordingly...

Однако такая уж хитрая штука все эти сетевые манипуляции, что можно прикинуться дядей Васей и посмотреть то, что отправил другой, а то и отправить самому.

Тут скорее надо читать Essential PHP Security, чем думать о флэшовых средствах.

Поговорил с матерыми php кодерами. Матерые php кодеры сказали, что дело все это зависит так же и от настроек Апача, а значит, жопа это, а не метод проверки. Вот так.

Jlekc
28.11.2005, 20:51
вообщем твой сайт кроме генерации ключа должен использовать https-протокол!
Снифер повесить мона, разгребсти геморно.

iNils
28.11.2005, 20:55
Остановились (я не один над этим думал) на том, что скрипт который генерит код для html, отдает туда уникальный ключ, который флешка возращает с данными. Ключ будет активен некоторое время. При приходе данных, скрипт сверяет ключ с теми что выдывал и время выдачи.
В принципе достаточно. Основной смысл был в том, что бы нельзя было посылать массово данные в цикле.

Skubent
28.11.2005, 20:58
И все же отправлять sid ака идентификатор сессии со стороны пхп и привязывать оный ко всем запросам от флэшки.
Тогда схема (в простейшем виде) такая:
Страница ввода логина/пароля -> скрипт php, стартующий сессию и генерящий страницу с флэшкой и вписаным sid'ом -> флэш вставляет sid во все отданные данные -> скрипт php проверяет, была ли запущена такая сессия с того адреса, откуда пришел запрос и там уж делает, что ему надо.

iNils
28.11.2005, 21:00
Нет никакой регистрации.

Jlekc
28.11.2005, 21:01
И все же отправлять sid ака идентификатор сессии со стороны пхп и привязывать оный ко всем запросам от флэшки.
Тогда схема (в простейшем виде) такая:
Страница ввода логина/пароля -> скрипт php, стартующий сессию и генерящий страницу с флэшкой и вписаным sid'ом -> флэш вставляет sid во все отданные данные -> скрипт php проверяет, была ли запущена такая сессия с того адреса, откуда пришел запрос и там уж делает, что ему надо.
неа ни так.

Jlekc
28.11.2005, 21:03
2iNils есе нуна - есть алгоритм crypt/decrypt на стороне флеша и пхп

iNils
28.11.2005, 21:06
Всем большое спасибо за советы. :)
Уже решено использовать метод описанный в посте 20.