Проблема с кроссдоменом Flash / Flex - использование BitmapData.draw () для изображения из AWS S3 приводит к SecurityError: Error # 2122: нарушение изолированной программной среды безопасности

Я использую BitmapData.draw () в DisplayObject, который включает изображение из моего ведра AWS S3. Изображение отлично загружается в swf, когда я устанавливаю URL-адрес изображения S3 в качестве источника для объекта Image, но когда я использую BitmapData.draw () на нем, он дает мне эту ошибку:

SecurityError: Ошибка № 2122: нарушение изолированной программной среды безопасности: BitmapData.draw: https://www.example.com/Example.swf не может получить доступ к https://s3.amazonaws.com/example-images/example.jpg. Требуется файл политики, но флаг checkPolicyFile не был установлен при загрузке этого носителя.

Код AS:

var bmpd:BitmapData = new BitmapData(objectToDraw.width,objectToDraw.height);
bmpd.draw(objectToDraw);

Я попытался поместить следующий файл crossdomain.xml в корень корзины S3, но безрезультатно:

<?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="*"/>
</cross-domain-policy>

person Steven    schedule 09.02.2012    source источник
comment
Пробовали ли вы явно загрузить файл политики с помощью Security.loadPolicyFile (something.com/crossdomain.xml) также проверьте с помощью прокси-инструмента отладки (например, Charles), правильно ли загружается файл crossdomain.xml.   -  person shaunhusain    schedule 10.02.2012
comment
@shaunhusain Я пробовал Security.loadpolicyFile () для файла crossdomain.xml в моем ведре S3, но все еще вызывает ошибку безопасности. Не могли бы вы подробнее рассказать о том, как использовать прокси-инструмент отладки, чтобы узнать, правильно ли он загружается?   -  person Steven    schedule 10.02.2012
comment
Конечно, вы можете установить отладочный прокси отсюда: charlesproxy.com, тогда вы просто запустите его, не так ли? люблю, когда все легко :). Charles отлично подходит для Flex, в частности, потому что он выполняет декодирование AMF / SSL за вас, чтобы вы могли проверять результаты как типизированные объекты, и это здорово. Он установит настройку прокси в Firefox, и запросы будут проходить через Charles (он также каким-то образом устанавливает прокси Windows в системах Windows, вы можете отключить либо в параметрах Charles, а также сузить его, чтобы только декодировать / отображать определенные URL-адреса, используя настройки прокси) - ›настройки записи.)   -  person shaunhusain    schedule 10.02.2012
comment
Обратите внимание, что в более поздних версиях Charles проксирование SSL отключено по умолчанию, вы можете щелкнуть правой кнопкой мыши запрос в представлении последовательности и нажать «Включить проксирование SSL», и он будет проксировать SSL-запросы для этого домена. Затем последующие запросы к этому домену будут декодированы, в основном Charles предоставит браузеру сертификат и примет сертификат из домена от имени вашего браузера, после чего он сможет декодировать информацию перед повторным кодированием и передачей.   -  person shaunhusain    schedule 10.02.2012
comment
Извините за стену текста, но также обратите внимание, если вам нужен действительно низкоуровневый мониторинг пакетов, летающих вокруг, вы также можете использовать Wireshark (мы использовали это в моем классе связи Java-сокетов, это было бесценно при попытке написать TCP поверх ненадежного канал как UDP).   -  person shaunhusain    schedule 10.02.2012
comment
Это может вам помочь: stackoverflow.com/ questions / 2332856 /   -  person Aaron    schedule 14.02.2012


Ответы (1)


Есть два способа получить доступ к файлам на S3:

  • s3.amazonaws.com/[bucket name]/file.ext
  • [bucket name].s3.amazonaws.com/file.ext

Поскольку файл crossdomain.xml должен находиться в корневой папке домена, а у вас нет доступа к корневой папке s3.amazonaws.com, вы не можете управлять файлом crossdomain.xml, если используете первый метод.

Если вы используете второй метод, вы можете поместить файл crossdomain.xml в корневую папку вашего сегмента, и он будет правильно использоваться проигрывателем Flash Player.

person thehiatus    schedule 26.02.2012