Xpoint
   [напомнить пароль]

Как узнать URL сайта, на котором выполняется Flash ролик?

Метки: [без меток]
[арх]
2005-11-10 09:48:32 [обр] SpainArd[досье]
Ситуация следующая:
Мой сайт генерирует тег <object> (Flash тег), чтобы другие пользователи могли вставить этот тег на страницы своих сайтов. То есть мой Flash ролик будет загружаться с моего сайта, но показываться на любых других.
Могу ли я во Flash узнать, на каком именно сайте показывается мой ролик, чтобы отследить список этих сайтов.
В Java в апплете например есть метод getCodeBase().
Есть ли во Flash что-нибудь подобное? (Может как то через fscommand)
Спасибо.
спустя 1 час 16 минут [обр] Алексей В. Иванов(276/2861)[досье]
Боюсь, что без JS никак. А JS приплетать сюда ненадежно и слишком муторно.
спустя 1 час 15 минут [обр] SpainArd[досье]
М-да..
Мне JS даже нельзя использовать, поскольку клиент может спокойно написать в JS функции любое свое значение.
А можно ли сделать так:
Загружать JS Прямо во флэш? Т.е. не в браузере его выполнять, чтобы клиент поправить код не смог?
спустя 1 час 20 минут [обр] SpainArd[досье]
А с помощью fscommand?
Должна же быть команда, возвращающая url текущей страницы!
спустя 13 минут [обр] Алексей В. Иванов(276/2861)[досье]
Должна, но нет. Флэш даже referrer не отправляет в HTTP-запросе.
Можно выполнить JS через getURL('javascript:...'), но это остановит загрузку страницы, да и вернуть результат работы JS будет очень проблематично.
Вы генерируйте у себя <script src="http://ваш.хост/скрипт" type="text/javascript"></script>, отдавайте такой код для вставки на страницы, а далее никаких проблем не составит определить домен и вывести нужный "object"
спустя 32 минуты [обр] Дмитрий Шер aka sherd(0/84)[досье]
по логам сервера еще можно. реферреры от браузеров пользователя, запрашивающих ваш флэш с вашего сервера, вставленный на других сайтах
спустя 3 минуты [обр] Алексей В. Иванов(276/2861)[досье]
Кстати, да, тоже вариант. Можно же в качестве src указать свой скрипт, который SWF-content будет отдавать, записывая REFERER.
спустя 31 минуту [обр] SpainArd[досье]

Алексей В. Иванов[досье] Если я буду просто генерить скрипт <script... на своем сервере, то пользователь также сможет его скачать. Переопределить вызываемую мной функцию (если она например будет возвращать referer), и вставить на свою страницу не мою ссылку, а свой код. Соответственно во флэш будет идти уже измененное значение.
Было бы здорово использовать getURL(javascript:<мой код на javascript>), но только если я смогу получить из этого кода referer? Как мне это значение передать во флэш?
Дмитрий Шер aka sherd[досье] По логам не совсем удобно, поскольку я должен в реальном времени определять, показывать ли мне информацию в моем модуле на конкретно этом сайте или нет.

Вообщем, вызываем getUrl, он выполняет прописанный во флэшке код на javascript, и возвращает что-нибудь во флэш. Так возможно сделать?

спустя 1 час 13 минут [обр] SpainArd[досье]
сообщение промодерировано
С помощью Javascript во Flash можно получить referer вот таким способом:
var myVar:String = "";
getURL("javascript:myFlaFileName.SetVariable('myVar', document.location)");
спустя 2 минуты [обр] SpainArd[досье]

Нашел в документации объект document во флэше. Но не могу понять как им пользоваться
Document object
Availability
Flash MX 2004.

Description
The Document object represents the Stage. That is, only FLA files are considered documents.
....

У него есть свойство path:
Read-only property; a string that represents the path of the document. If the document has never been saved, this property is undefined

Не подскажете что это за объект и с чем его едять? Может все таки удастся вытащить location прямо из Flash, без javascript.

спустя 7 минут [обр] Алексей В. Иванов(276/2861)[досье]

Поправка: document.myFlaFileName
Но это решение, повтоюсь, "убьет" загрузку всех картинок на сайте, где будет размещен такой флэш. Делать так нельзя.
Проверяйте REFERER в HTTP-запросе на загрузку. Это гораздо надежнее и правильней.

Нашел в документации объект document во флэше. Но не могу понять как им пользоваться
Document object

Это Вы нашли в JSFL. Это совсем не то.

спустя 44 минуты [обр] SpainArd[досье]
Алексей В. Иванов[досье] Спасибо за совет.
Поясните пожалуйста, почему убъет, не понимаю. Я ведь вызываю javascript при загрузке, как это может повлиять на загрузку картинок?
Про Referer я согласен. Думаю, так и буду делать.
спустя 4 минуты [обр] Алексей В. Иванов(276/2861)[досье]
Когда Вы делаете getURL (неважно, что написано в самом url) браузер думает, что произошел переход и прекращает загрузку любых объектов на странице (ну, кроме ActiveX'ов всяких). Поскольку флэш загружется параллельно с другими объектами на странице, не мудрено, что getURL выполнится до полной загрузки.
спустя 6 минут [обр] Дмитрий Шер aka sherd(0/84)[досье]
SpainArd[досье]: не яваскрипт возвращать, а в качестве src у флэшки server-side'ный скрипт (php, perl, да что угодно), который будет записывать referer и отдавать саму swf-ку.
спустя 4 минуты [обр] SpainArd[досье]
Алексей В. Иванов[досье] Понятно. М-да. Решение через javascript не годится.
Все таки, неужели у Flasha нет никакого доступка к DOM браузера? И к браузеру он никак не может обратится? метод getDocumentDom?
Я тут подумал, решение с referer'ом тоже не подойдет, поскольку мой flash показывает меняющиеся данные на других сайтах, соответственно сам ролик загружается на чужой сайт, а потом сам периодически начинает тащить информацию с моего сайта.
Поэтому код <object> в принципе может получить кто угодно, но вот инфа может показываться только на определенных сайтах.
Соответственно я и должен из ролика уже послать моему сайту, на каком сайте сейчас он показывается.
спустя 4 минуты [обр] Алексей В. Иванов(276/2861)[досье]

Кстати, в Flash Player 8 getURL('javascript:...') не работает. Из-за проблем безопасности он не будет работать в будущем, есть мнение, для чужих доменов без спец. разрешений.

Все таки, неужели у Flasha нет никакого доступка к DOM браузера? И к браузеру он никак не может обратится? метод getDocumentDom?

Нет. Не мудрено, ведь вставка флэша в браузер лишь частный случай.

спустя 14 минут [обр] SpainArd[досье]
Алексей В. Иванов[досье] Если в 8-ке не работает, значит ориентироваться нельзя не него.
Я понимаю что это частный случай, но ведь у флэша есть методы (хотя бы тот же getUrl), которые ориентированы на инет.
Скажите пожалуйста, что такое getDocumentDom, и как с ним работать!?
спустя 32 минуты [обр] Алексей В. Иванов(276/2861)[досье]
getDocumentDom это из JSFL. Возвращает DOM екущего .fla-файла. JSFL — Это такая штука, которая позволяет автоматизировать работу с самим редактором Flash.
С готовым SWF-файлом JSFL уже никак не связан.
Overview of the Macromedia Flash JavaScript API
The ActionScript language lets you write scripts to perform actions in the Flash Player environment (that is, while a SWF file is playing). The Flash JavaScript API lets you write scripts to perform several actions in the Flash authoring environment (that is, while a user has the Flash program open). These scripts can be used to help streamline the authoring process. For example, you can write scripts to automate repetitive tasks, add custom tools to the Tools panel, or add timeline effects.
спустя 19 минут [обр] SpainArd[досье]
Алексей В. Иванов[досье] Спасибо, понятно.
Блин, как же быть..
спустя 12 минут [обр] SpainArd[досье]
Дмитрий Шер aka sherd[досье] Насчет src, где будет записан скрипт, и который будет возвращать swf.
Вы предлагаете возвращать бинарный поток? То есть сам swf файл перенапрявлять?
При желании это мне кажется можно обойти. Реферер подделать при запросе, и сохранить swf. Потом этот пользователь может положить закаченный swf на свой сайт, и прописать в теге <object> ссылку на него. А данные будут браться с моего сайта.
Гхм.. Что же делать как же быть..
спустя 6 минут [обр] Алексей В. Иванов(276/2861)[досье]
На REFERER нельзя никак погалаться, это понятно. Он вообще многими не передается, но надежность его немного выше, чем тем же JS извращаться. Именно по этому данное решение и было предложено.
Кстати, URL, с которого загружена SWF-ка (не HTML, а именно SWF-файл) Flash знает, адрес находится в переменной _root._url его можно тоже проверять.
Вы, лучше опишите ситуацию конкретней, что защищаете? А то мы обсуждаем в пустую не зная того, что в конечном итоге должно быть.
спустя 8 минут [обр] Дмитрий Кучкин(0/236)[досье]
Может быть перенести логику выбора нужной информации на сервер? Тогда сессии помогут.
Ссылка со страницы ведет на скрипт, например http://mysite.ru/script. При запросе браузер выставит referer. Скрипт стартует сессию, в которой сохраняет referer и выдает редирект на, например, http://mysite.ru/script/<id сессии>/start.swf
Дальнейшие запросы из флэшки должны быть относительными и попадать на урлы, типа http://mysite.ru/script/<id сессии>/info1, http://mysite.ru/script/<id сессии>/info2. Скрипт, используя информацию из PATH_INFO, в зависимости от сохраненного в сессии referer'а будет отдавать нужные данные либо самостоятельно, либо через редирект.
спустя 33 минуты [обр] SpainArd[досье]
Алексей В. Иванов[досье] С удовольствием. Пользователь получает учетную запись на моем сайте. Под каждой учетной записью может быть настроено разное количество сайтов (от одного и более), на которых может показываться моя флэшка. То есть например user1 может размешать мой флэш только на одном сайте user1site.com, а user2 на трех (каких-нибудь).
Пользователи заходят на мой сайт под своей учетной записью и получают html тэг <object>. После чего каждый может вставит этот тег на страницы своих (своего) сайтов.
Внутри ролика есть скрипт, который переодически обращается на мой сайт за новой информацией и показывает ее во флэш. То есть все посетители user1site.com и тех трех сайтов user2 будут видеть обновляющуюся информацию.
Но может вдруг найтись недобросовестный user3, который разместил мою флэшку еще на двух других своих сайтах: kurkino.ru и kuropatkino.ru, хотя разрешено ему размешать только на ciplatkino.ru.
Соответственно, мне во флэше хорошо бы проверять где выполняется мой swf, чтобы показывать инфу или нет.
Вот.
спустя 34 минуты [обр] Дмитрий Кучкин(0/236)[досье]
Так информация для разных сайтов разная или одинаковая?
Если одинаковая, то надо просто проверять referer. Если он выставлен, значит запрос пришел от браузера со странички с внедренным <object ...> — проверяем referer на принадлежность законному пользователю.
Если referer не выставлен, то считаем, что запрос пришел изнутри ролика и просто отдаем контент.
Если информация разная, то можно обойтись и без сессий — это я перемудрил.
Любой запрос с выставленным реферером либо считается незаконным, либо редиректится на урл вида http://mysite.ru/flash/site_id/infoN. Запрос без реферера приходит от ролика и должен иметь такой же вид http://mysite.ru/flash/site_id/infoN, то есть, нести в урл информацию о сайте. Задача решается либо скриптом, либо средствами веб-сервера (mod_rewrite)
спустя 13 часов [обр] SpainArd[досье]
Дмитрий Кучкин[досье] Инфа одинаковая везде. Не понял какой запрос с referer будет приходить от странички с внедренным object?
Пользователь просто вписывает на свой сайт код (object) моего флэша. Когда посетители будут заходить на его сайт - они будут видеть мой флэш. Флэш при загрузке, при показе на его сайте, (по идее, по хорошему, как я думал), должен проверять, на странице какого сайта он показывается, и вместе с запросом на получение инфы посылать id user'а и url этой страницы. Мой сервер, который инфу отдает, должен проверять может ли user с таким id показывать флэш на странице с таким Url. И соответственно либо отдаст инфу, ли вернет сообщение, типа "не хорошо размещать мой флэш там, где тебе размещать нельзя".
Не могли бы вы подробнее описать свою идею, я не очень ее понял.
спустя 57 минут [обр] Дмитрий Кучкин(0/236)[досье]

Когда посетители будут заходить на сайт вашего клиента, они будут загружать в браузер веб страницу. На веб-странице вписан код object со ссылкой на ваш сайт. Браузер пошлет на ваш сайт запрос с выставленным http-заголовокм Referer, в котором будет значиться адрес веб-страницы, в которую внедрена ваша флэшка. Вот по этому адресу и можно проверить на стороне сервера, может ли отображаться флэшка на этой странице.
Кстати, именно это уже предлагали и Алексей В. Иванов[досье]: Как узнать URL сайта, на котором выполняется Flash ролик? (315847) и Дмитрий Шер aka sherd[досье]: Как узнать URL сайта, на котором выполняется Flash ролик? (315885)

Где-то я встречал инфу, что при загрузке дополнительных частей ролика средствами самого флэш referer не передается. Поэтому, если интересует просто правомерность загрузки дополнительной части ролика, то в этом случае достаточно факта отсутствия заголовка Referer в запросе.
Если же есть желание знать при загрузке каждой части ролика, через какой конкретно сайт посетитель попал на вашу флэшку, можно эту информацию сохранить прямо в url с помощью редиректа (скриптом или средствами веб-сервера) при первоначальном вызове ролика непосредственно с вебстраницы. Механизм я уже расписал.

Весь смысл заключается в том, что referer передается браузером посетителя сайта вашему серверу при запросе флэшки независимо от желания человека, разместившего ссылку на своей веб-странице. То есть, подменить referer может только человек, который смотрит ваш ролик на своем компьютере, но никак не человек, который разместил ссылку на ролик на своей странице.

спустя 7 минут [обр] Дмитрий Кучкин(0/236)[досье]
P.S. Этот вариант уводит ветку из тематики форума по Flash. Если устроит такое решение, лучше будет перенести тему в более подходящий форум либо в Интернет::Веб-серверы, либо в Программирование::Технологии CGI и SSI.
спустя 1 час 10 минут [обр] SpainArd[досье]
сообщение промодерировано

Дмитрий Кучкин[досье] Правильно ли я Вас понял, что в теге object вместо ссылки на swf файл будет стоять ссылка на php, perl, asp файл, который будет отдавать в бинарном виде мой swf?
То есть вместо:

<object ...>
...
<param name="movie" value="http://mysite/MyMovie.swf" />
<embed src="http://mysite/MyMovie.swf"..../>
</object>

Будет:

<object ...>
...
<param name="movie" value="http://mysite/MyMovie.php" />
<embed src="http://mysite/MyMovie.php" .../>
</object>

?

спустя 15 минут [обр] Дмитрий Кучкин(0/236)[досье]
Да, скриптом можно так. Тот же функционал можно реализовать с помощью apache + mod_rewrite.
спустя 17 минут [обр] SpainArd[досье]
Дмитрий Кучкин[досье] Ясно, спасибо. Мне кажется это хорошее решение.
спустя 15 минут [обр] Дмитрий Кучкин(0/236)[досье]
Обнаружил минус такого решения. Можно будет сделать свою флэшку, в которую подгружать ваши добавочные ролики. В этом случае использование механизма сессий окажется оправданным.
спустя 48 минут [обр] Дмитрий Шер aka sherd(0/84)[досье]

Дмитрий Кучкин[досье] запрос все равно откуда-нибудь да будет, с реферерром, который можно посмотреть, или без оного, и тогда запрос можно будет отвергнуть.

SpainArd[досье] да, про это я и говорю с самого начала

спустя 16 минут [обр] Дмитрий Кучкин(0/236)[досье]
Дмитрий Шер aka sherd[досье] Повторюсь, где-то встречал информацию (и только что проверил — подтвердилось) о том, что при запросе из флэш-ролика реферер не передается. То есть, вполне законные запросы из флэшролика автора на дополнительную информацию будут приходить без реферера. Именно отсутствие реферера я предлагал использовать как признак того, что дополнительная информация запрошена законно. Но это очень легко обходится. Поэтому надежнее будет использовать сессии.
Кстати, куки флэш передает, поэтому id сессии можно встраивать как в урл, так и в куки.
спустя 2 часа 8 минут [обр] SpainArd[досье]

Дмитрий Кучкин[досье] Да вы совершенно правы. Я только не ролики подгружаю, а актуальную информацию. Но если кто-либо сделает свой Flash, и разберется с протоколом, который я использую, тогда даже если я во флэшке бы сумел определять location, то это бы не спасло. Он спокойно забирал бы себе информацию, посылая мне все что хочется.

Дмитрий Шер aka sherd[досье] Да, я просто не очень понял Вашу идею с самого начала.

Спасибо!

спустя 46 минут [обр] Дмитрий Шер aka sherd(0/84)[досье]
SpainArd[досье] не за что ;)
спустя 19 часов [обр] Алексей В. Иванов(276/2861)[досье]
сообщение промодерировано

Дмитрий Кучкин[досье] совершенно прав. При запросах данных из Flash (с помощью ActionScript) рефереры не передаются.
Более того, заинтересовавшись темой я проверил "а передает ли REFERER ActiveX при загрузке самого SWF" и оказалось, что нет :( Другие браузеры передают, IE — нет. Но не все так плохо. Поэкспериментировав далее, оказалось, что есть встраивать флэш-объект на страницу таким образом:

<object type="application/x-shockwave-flash" data="src.swf" width="100%" height="100%">
   <param name="movie" value="src.swf" />
</object>

(см. FAQ форума Flash (Flash генерирует невалидный HTML(XHTML) код. Можно ли придерживаться стандартов верстки?))
То все работает отлично во всех браузерах. Большой плюс такому решению это то, что оно html/xhtml валидно, но небольшой минус таков, что флэш не начинает проигрываться до полной загрузки (да оно Вам и не надо, как я понял), тем более, что флэшка обещает быть маленькой по размеру.
Но должен предупредить, что я тестировал пока только на IE6 с Flash Player 8.5 под WinXP. Возможно, поведение неустойчиво.

Теперь вернусь к сути проблемы: на самом деле защититься от зарегистрированного пользователя невозможно в принципе, поскольку информация для всех сайтов одинаковая, как Вы говорите, но Вы должны трезво прикинуть стоимость Вашей услуги, если она небольшая, то взламывать Вас не будут т.к. время опытного программиста стОит больше, да и кому охота ссорится из-за мелочей.
В качестве защиты я Вам предлагаю такой способ:
Встраиваете на страницу приведенный выше код, где в качестве src будет указано http://ваш.домен/скрипт?siteid=000. Этот скрипт будет просто отдавать swf, записывая id сайта и REFERER. Если REFERER'а нет или он не соответствует сайту, то ничего делать не надо — путь флэшка показывается в нормальном режиме. Дело в том, что по независимым от пользователя обстоятельствам они могут не только не передавать REFERER, но и передавать в качестве него всякую чушь (не раз видел, как в этом поле стоит веб-страница пользовательского файрвола или прочий хлам). Все это надо будет отслеживать вручную. Если Вы заметите, что REFERER'ы очень часто пустые или там оказался неизвестный сайт, то должны будете самостоятельно заняться проверкой.

спустя 1 день 21 час [обр] SpainArd[досье]
Алексей В. Иванов[досье] Очень полезное сообщение.
Опущу пока комментарии к первой части сообщения. Хотел бы остановиться на второй. Насчет мусора в поле REFERER.
В каких случаях браузер пользователя будет передавать Пустое значение или Мусор в поле Referer? И какова вероятность того, что это может произойти, по каким причинам? Не могли бы Вы описать по подробнее или дать ссылки. Как от этого можно защититься?
Ценность возможности показа на неразрешенных сайтах не очень велика, но и не очень мала. То есть крайне нежелательно допустить, чтобы пользователь мог проделать Один раз ряд операций, после которых смог бы безнаказанно пользоваться сервисом.
Насчет первой части сообщения.
При такой записи мой код Action Script при запросе на мой сервер за данными БУдет передавать Referer? Не очень я понял в чем суть решения.
спустя 1 час 9 минут [обр] SpainArd[досье]
сообщение промодерировано

Алексей В. Иванов[досье]
Я сейчас проверил на своем примере, вот мой код:

<object type="application/x-shockwave-flash" data="http://localhost/FlashResponse/WebForm1.aspx" width="100%" height="100%">
<param name="movie" value="http://localhost/FlashResponse/WebForm1.aspx" /> 
</object>

В aspx скрипте я в текстовый файл записываю Referer и IP адрес клиента (и отдаю свой флэш). Так вот адрес у меня 127.0.0.1, а вот referer Пустой!
Может я что не так делаю?
Может быть всегда анализировать IP адрес клиента, или он тоже может быть пустым при отправке запроса на swf из ActiveX объекта?

спустя 36 минут [обр] SpainArd[досье]
Я наврал в предыдущем сообщении.
Referer есть, если публиковать как <object type="application/x-shockwave-flash", а если стандартным способом - то referer нету.
Блин, вот история :).
Получается, это единственный способ?
IP адрес тут конечно совсем не причем, мне нужен именно Referer.
Как же мне тогда проверять версию проигрывателя? Или просто внутрь <object> включить подобный код:
<a href="macromedia/link_to_plugin/"><img src="noflash.gif"></a>
?
спустя 22 часа [обр] Алексей В. Иванов(276/2861)[досье]
В каких случаях браузер пользователя будет передавать Пустое значение или Мусор в поле Referer? И какова вероятность того, что это может произойти, по каким причинам?

Достаточно установить какой-нибудь firewall (какие точно умеют подменять — не скажу) или воспользоваться прокси (настроенным соотв. образом), причем не обязательно сознательно, можно быть просто пользователем в компании, где выход в Интернет через прокси.
Вероятность не считал, но, думаю она есть приличная.

При такой записи мой код Action Script при запросе на мой сервер за данными БУдет передавать Referer?

Думаю, такого кода не существует. Никогда не слышал о том, чтобы кто-то смог заставить передавать referer при запросе из Flash'a.

Как же мне тогда проверять версию проигрывателя?

По стандарту — да, если объект не может быть отображен, то показывается то, что внутри него, но на самом деле ничего подобного. Да данный момент я не знаю поддерживают ли это альтернативные браузеры, но IE не поддерживается — это точно.
При экспорте флэша можно выбрать опцию "определять наличие флэш плагина", но там VB+JS кода генерируется огромная куча и работает он глючно, так что самый верный способ определить флэш — попробовать его проиграть. Такой стратегии придерживалась предыдущая версия Flash. Идея была такова, что создается маленький SWF-файл, который загружется в самом начале и если он выполнился нормально, то он делает getURL('страница.с.флэшем'). Если вызова не произошло, то срабатывает <meta http-equiv="refresh" content="3; url=страница.без.флэша">.
В вашем случае это подойдет только, если создавать iframe окошко у пользователя на странице, но это по мне лучше, чем запихивать туда огромный шмоток кода.

По поводу реализации доп. мысли напишу чуть позже. Сейчас должен убегать.

спустя 9 минут [обр] Алексей В. Иванов(276/2861)[досье]
Доп. информация: Наличие Flash-плагина
Замена Flash картинкой (это был вредный совет)
спустя 4 часа 42 минуты [обр] SpainArd[досье]
Алексей В. Иванов[досье] Насколько я знаю, в подавляющем большинстве компаний используются прокси. Таким образом, можно смело предположить, что скажем 50% пользователей, загрузив в браузер страницу с моим флэшом, ничего в поле Referer мне не отправят. Значит, если на своем сервере я буду отдавать свой флэш только тем сайтам, referer которых есть в моей базе, то скажем 50% пользователей Даже на валидных сайтах мой флэш попросту НЕ УВИДЯТ!?
(Нет, нет, скажите что это Не так!!!)
Получается нельзя опираться на Referer при моей проверке. И получается, что такой способ мне использовать нельзя?
Правильно ли я вас понял?
И как же тогда.. хм.. мне быть. :(
спустя 4 минуты [обр] Алексей В. Иванов(276/2861)[досье]
(Нет, нет, скажите что это Не так!!!)
Нет, не совсем так :) Не все прокси одинаково полезны и скриывают referer. Я бы сказал, что таких меньшинство.
На этот способ, как я уже говорил не стоит закладываться, как на 100%. Надо всем флэш отдавать, а уже дальше логи вручную смотреть. Ну, можно, конечно, крови попортить нечистивым клиентам (не более, т.к. если им надо будут — украдут), но и себе тоже реализацию завернуть надо будет.
спустя 33 минуты [обр] SpainArd[досье]
Алексей В. Иванов[досье] Если не рассматривать вариант декомпиляции флэшки, то как же они украдут?
Понятно, что информация не зашифрована, но им то не информация нужна, а Модуль, который они смогут расместить на свой сайт.
Просто если referer не проверять, тогда они легко размещают на любых сайтах и вперед. Вручную логи конечно можно, но блин, это сильно все осложняет.
А если referer проверять, тогда я боюсь могут пострадать и честные пользователи. Причем сам клиент, который модуль будет размещать, об этом может и не знать. Учитывая, что логотипы будут стоять на модулях, таким образом репутацию подмочим и себе и клиентам. И пользователи будут не довольны.
Грхм..
Крик души: может быть (все же) существует другие способы, у меньшим числом условностей?
спустя 13 минут [обр] SpainArd[досье]
Алексей В. Иванов[досье] Вы не знаете, спрашивал ли кто-нибудь об этом саму Макромедию?
Что сами разработчики по этому поводу говорят, может быть в 8 версии появилась возможность получить current url из флэша?
спустя 6 часов [обр] Дмитрий Кучкин(0/236)[досье]
SpainArd[досье]
Я бы реализовал вариант с сессиями в сочетании с вариантом Алексея[досье] Как узнать URL сайта, на котором выполняется Flash ролик? (316073).
Реферер проверяется при загрузке начальной флэшки, только я наличие реферера, не соответствующего сайту, считал бы нарушением.
Если проверка на реферер прошла (правильный или отсутствует), стартует сессия. Дополнительная информация отдается только в том случае, если запрос происходиит в рамках существующей сессии.
И время от времени, как предложил Алексей[досье], проверял бы по логам запросы без рефереров и с неправильными реферерами, заодно набирая статистику.
спустя 7 часов [обр] Алексей В. Иванов(276/2861)[досье]
сообщение промодерировано
Если не рассматривать вариант декомпиляции флэшки, то как же они украдут?

Декомпиляция, подделка запросов (в том числе посылаемого REFERER),...
Надо — сделают. Тут сомневаться не приходится. Опять же повторюсь, что это вопрос цены (времени).
СтОит вспомнить баннерные системы, которым уже много лет и ни одна не защищена от накруток или, например, софт, к которому можно найти "crack" или серийный номер.
Помнить надо, что зачастую все у программистов держится на доверии. Каждый человек может в Интернете за 5 минут найти "crack" к интересующей его программе, ан, нет, покупают. Баннерные системы тоже не в убытке надо сказать.

Вы не знаете, спрашивал ли кто-нибудь об этом саму Макромедию?
Что сами разработчики по этому поводу говорят, может быть в 8 версии появилась возможность получить current url из флэша?

В 8-м ничего подобного в документации я не нашел. В Flash Player 8.5 (AS 3.0 — совершенной новый флэш, новый язык), кстати, тоже, хотя документация еще не дописана, но надежд мало.
Макромедию конечно же спрашивали и не раз. Вопрос насущный.
Вот ссылки на темы официального форума:
Please, help me! How can I get current url of html page with ActionScript?
Getting current url?
How to get referer URL?
how to get the url of the page the movie is in ?
и т.д.

Крик души: может быть (все же) существует другие способы, у меньшим числом условностей?

...

спустя 1 день 4 часа [обр] SpainArd[досье]
Алексей В. Иванов[досье] Ясно, спасибо Вам большое, а также Вам Дмитрий Кучкин[досье] и Вам Дмитрий Шер aka sherd[досье]. Решение с проверкой referrer на сервере пожалуй самое подходящее.
Хотел все же спросить еще про куки. Уважаемый Дмитрий Кучкин[досье] указал в одном из предыдущих сообщений (не знаю как сделать ссылку на message), что флэш может посылать куки. Правильно ли я понял, что из флэшки при запросе на получение например XML с моего сервера, с могу передать туда и куки? Так бы я смог отслеживать сессию.
?
спустя 23 минуты [обр] Дмитрий Кучкин(0/236)[досье]

SpainArd[досье]
Флэш-ролик при запросе данных передает на сервер куки, если они были до этого установлены. Но обрабатывает ли флэш-ролик куки, которые сервер передает ему для устаонвки, я не проверял.

То есть, установить куки при запросе ролика со страницы, а потом проверять при запросе данных из флэшки можно.

спустя 14 минут [обр] SpainArd[досье]
Дмитрий Кучкин[досье] Чем установить "куки при запросе ролика со страницы"? Установить их флэшом, с помощью SharedObject?
Или установить их серверным скриптом при запросе ролика, а потом получить во флэшке? Как мне это сделать. Не могли бы по подробнее?
спустя 36 минут [обр] Дмитрий Кучкин(0/236)[досье]

Со страницы ссылка ведет на скрипт http://ваш.домен/скрипт?siteid=000 (см. Как узнать URL сайта, на котором выполняется Flash ролик? (316073)) Скрипт проверяет соответствие referer'а сайту и пишет результат в лог для статистики. Если все правильно, стартует сессию, отдает id сессии в куке в заголовке ответа, отдает ролик в бинарном виде.
Когда данные запрашиваются из флэша, он отдаст выставленные куки. Запрос тоже должен идти на скрипт, который проверяет куки и отдает данные, если такая сессия есть.

P.S. Чтобы получить адрес конкретного сообщения в теме, нужно правой кнопкой мышки скопировать ссылку под значком слева от имени пользователя.

спустя 8 минут [обр] SpainArd[досье]
Дмитрий Кучкин[досье] Технология ясна. Кстати, можно ведь в куки выставлять сам referrer, и из флэша его забирать. Как вариант.
Скажите пожалуста Как мне во флэше забрать куки, которые были выставлены скриптом на сервере для данного пользователя?
спустя 1 час 15 минут [обр] Дмитрий Кучкин(0/236)[досье]

С flash не работал, поэтому как забрать куки подсказать не могу. Темой заинтересовался, потому что вопрос вышел за рамки конкретной клиентской технологии.

Кстати, нашел, где встречал информацию о том, что реферер из флэш не передаётся. Оказывается, прямо в этой же теме и встречал :) Как узнать URL сайта, на котором выполняется Flash ролик? (315839)

спустя 10 минут [обр] Алексей В. Иванов(276/2861)[досье]
Флэш ничего не знает об установленных на страницах куках и никак с ними не умеет работать. У него свои куки (SharedObject).
Кстати то, передают ли все ActiveX компоненты cookie при запаросах еще надо проверить.
Вставлять referer в cookie нет никакого смысла.
спустя 8 минут [обр] SpainArd[досье]
сообщение промодерировано

Дмитрий Кучкин[досье] Спасибо.
Алексей В. Иванов[досье] Спасибо, ясно. Значит этот вариант отпадает :(.
Остается то, что обсуждалось. Но в этом варианте больше всего меня смущает даже не то, что у некоторых ролик может не проигрываться из-за их прокси, а то, что мне обязательно прийдется делать iframe, чтобы проверить - стоит у юзера флэш или нет.
Ведь при обычной публикации, такой вот:

<object ...>
...
<param name="movie" value="http://mysite/MyMovie.swf" />
<embed src="http://mysite/MyMovie.swf"..../>
</object>

 вылезает сообщение, и происходит попытка установить Flash Player.
А если публиковать так (чтобы referrer пересылался):

<object type="application/x-shockwave-flash" data="src.swf" width="100%" height="100%">
   <param name="movie" value="src.swf" />
</object>

, тогда ничего этого происходить не будет.
То есть автоматически предложение об установке Player'а вылезать не будет? Или можно сделать так, чтобы вылезало?

спустя 1 минуту [обр] SpainArd[досье]
К предыдущему сообщению: Не хочется использовать iframe.
спустя 21 минуту [обр] Алексей В. Иванов(276/2861)[досье]
Почему не хочется использовать iframe?
спустя 9 минут [обр] Алексей В. Иванов(276/2861)[досье]

Можно даже было бы минимизировать проверку на наличии флэша, лишнии загрузки, время.
Механизм:

  1. У пользователя на странице стоит код: <iframe src="http://ваш.хост/Ваш.скрипт"></iframe>
  2. "Ваш.скрипт" смотрит, если к нему пришла кука "дай мне сразу флэш, без определения его наличия", то иди на шаг 5
  3. Отдаете html с маленькой SWF для определения наличия флэша
  4. Если флэша нет, то идете на альтернативный вариант (текст о том, как хорошо иметь флэш или картинка, его заменяющая). got to "конец"
  5. Отдаете html-страницу с флэшовиной, и ставите куку "у меня есть флэш, больше не надо меня тиранить"

IMHO, самый надежный и правильный вариант.
Где-то на этих шагах, если хочется попортить кровь "хацкерам" можно стартовать сессии.

спустя 56 минут [обр] SpainArd[досье]
Алексей В. Иванов[досье] Потому что, хм.. Я клиенту даю код object, который он вставляет куда Ему захочется, прямо на свою страницу, или в свой iframe или еще куда. Дело в том, что клиент у меня может настроить размеры будущего флэша. В том числе задать это значение в Процентах! При это флэш соответственно будет растягиваться на то окно, куда юзер его разместил.
Если еще iframe будет прослойкой - не знаю на сколько все это будет хорошо. Капуста какая-то.
Не помню, кстати, можно ли для iframe задать размеры в процентах?
При публикации <object type="application/x-shockwave-flash" нельзя задать codebase и др. так, чтобы в случае если Player не стоит, то выдавать запрос на установку (ну как при обычной публикации). Можно так сделать?
спустя 6 минут [обр] Алексей В. Иванов(276/2861)[досье]

Защита от наличия iframe не пострадает, наоборот.

Не помню, кстати, можно ли для iframe задать размеры в процентах?

Можно

чтобы в случае если Player не стоит, то выдавать запрос на установку (ну как при обычной публикации). Можно так сделать?

Для "satay-метода", кажется, нельзя. Хотя я не уверен на 100%. Но оно для Вашей ситуации только вредно будет. Преставьте, как каждую загрузку пользователя будет это доставать. Лучше молча альтернативу предлагать.

спустя 41 минуту [обр] SpainArd[досье]
Алексей В. Иванов[досье] Satay-метод, как я понял это <object type="application/x-shockwave-flash"..
Только вредно мне кажется это не будет, если у него Player стоит, то ничего никогда вылезат то и не будет.
Ах.. вы имеете в виду наверное, что если он сознательно его не ставит, то будет просто безобидная страничка, а не message каждый раз. Ну да.
Все равно трабла вылезает.
Ведь я думал буду генерить ему object, где стоит FlashVars, в которых во флэш передаются его размеры, а также в пикселях размер, или в процентах. Соответственно, воткнув этот код - он получит флэш на странице.
А так я ему буду должен давать код iframe, в котором ссылка на скрипт, в который передаются эти параметры (размер и т.д) через &.
Этот скрипт будет геренить страницу с <object>, в котором будет ссылка на скрипт, который будет отдавать swf файл или нет. И еще тут где-то будет реферер анализироваться.
Тогда без сессий не обойтись..
Блиииииииин... Ох как все.. Ё маё.
спустя 3 минуты [обр] SpainArd[досье]
Да, а потом этот swf будет должен еще переадресовывать на другой скрипт страницу, которая соответственно также будет генерить уже <object> работающего ролика, и в нем также будет стоять ссылка на скрипт, который return swf.
Ох ох ох...
спустя 2 месяца 10 дней [обр] SpainArd[досье]

Я нашел интересное решение во Flash 8. Оно похоже на getUrl("javascript:..."), только при этом не происходит прибивание закрузки всех картинок и других объектов на странице. Метод работает чисто, при этом сам код зашит в ролике, а не на html странице.
Код написан в первом кадре ролика на ActionScript.
Вот он:
 var SWFLocation:String = "";
 flash.external.ExternalInterface.call("test2.SetVariable('SWFLocation',window.document.location)");

Где test2 - это имя swf файла.

спустя 3 минуты [обр] SpainArd[досье]
Сори, не swf файла, а id объекта <object.. на странице
спустя 48 минут [обр] Алексей В. Иванов(276/2861)[досье]
До популярности плеера 8 надо дожить, а во-вторых, злоумышленнику достаточно изменить имя ролика, чтобы JS не сработал.
спустя 10 дней [обр] SpainArd[досье]
Алексей В. Иванов[досье] Я с Вами согласен, он может его поменять, только он в этом не заинтересован. Ему нужно, чтобы ролик работал, а мне нужно чтобы в ролик попал действительный location.
Безусловно, это не идеальное решение, но мне кажется не плохое.
Powered by POEM™ Engine Copyright © 2002-2005