Flash Security.AllowDomain ()

У меня есть Flash-фильм, загружающий данные с внешнего URL-адреса. Фактически, это программа для чтения RSS внутри баннера.

Все работает отлично, когда Flash-ролик и URL-адрес данных находятся в одном домене. Однако, если Flash-фильм находится в другом домене, срабатывает защита Flash.

В руководстве сказано, что я могу разрешить доступ к домену через Security.AllowDomain ()

system.Security.allowDomain("http://www.mydomain.abc/")
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("http://www.mydomain.abc/content.php");

Но когда я встраиваю .swf в HTML-страницу, данные не загружаются. Любые советы, как отладить или решить эту проблему?


person Gerrit    schedule 16.04.2010    source источник


Ответы (3)


Я думаю, вы неправильно понимаете цель метода. Как документы: скажите , allowDomain:

Позволяет файлам SWF в указанных доменах обращаться к объектам и переменным в файле SWF, который содержит вызов allowDomain ().

[...]

Вызывая Security.allowDomain ("siteA.com"), siteB.swf дает siteA.swf разрешение на его создание сценария.

Таким образом, вызов, который вы делаете, позволяет SWF-файлам на www.mydomain.abc выполнять скрипт SWF-файла с вызовом. Вы в основном говорите: «Я верю, что они меня правильно используют». Это не позволяет вам делать то, что вы пытаетесь сделать (загружать ресурсы из этого домена).

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

Чтобы делать то, что вы хотите, вы можете использовать crossdomain.xml на www.mydomain.abc или на прокси-сервере на стороне сервера. По сути, файл crossdomain.xml должен содержать такую ​​строку:

<allow-access-from domain="www.yourswfdomain.com" />

, где www.yourswfdomain.com - это домен для файла SWF. Очевидно, это решение требует поддержки со стороны www.mydomain.abc.

Yahoo имеет информацию о настройке прокси на стороне сервера. Он нацелен на XMLHttpRequest, но те же принципы применимы и к Flash.

person Matthew Flaschen    schedule 16.04.2010
comment
Из документации AS3 не сразу ясно, но Security.allowDomain также необходимо использовать, когда файлы HTML / JS из одного домена пытаются вызвать функции AS3 в swf, встроенном из другого домена. - person Octavian Naicu; 02.06.2015

system.Security.allowDomain("www.mydomain.abc")

Не добавляйте http://, это домен, а не URL.

person thesunfei    schedule 29.11.2012
comment
Это домен, поэтому правильно указан Security.allowDomain (*. Mydomain.abc), а не www.mydomain.abc, который является записью HOST. - person Hao Nguyen; 05.07.2017

Починил это. Adobe Docs объясняет метод создания файла с именем crossdomain.xml в корень mydomain.abc

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-access-from domain="www.domain-of-swf.com" />
</cross-domain-policy>

Не используйте <allow-access-from domain="*" />, потому что это позволит любому SWF в Интернете выполнять вызовы в ваш домен от имени ваших пользователей со всеми файлами cookie, прикрепленными к запросам. Это приведет к утечке личных данных, если ваш домен не хранит их или не использует файлы cookie / HTTP-аутентификацию.

person Gerrit    schedule 16.04.2010
comment
это разрешает все домены, что не рекомендуется. Разрешить только нужные домены. - person Raptor; 08.11.2011