Flex: ошибка безопасности при попытке доступа к Google Checkout
Я пытаюсь интегрировать приложение Flex с Google Checkout, и код, который отлично работает на моем локальном компьютере, выдает ошибку безопасности при тестировании на моем сайте.
Вот ошибка:
Warning: Failed to load policy file from https://sandbox.google.com/crossdomain.xml
*** Security Sandbox Violation ***
Connection to https://sandbox.google.com/checkout/api/checkout/v2/request/Merchant/12345 halted - not permitted from http://www.mysite.com/demo/cartTest/main.swf
ERROR (flash.events::SecurityErrorEvent)#0
bubbles = false
cancelable = false
currentTarget = (flash.net::URLLoader)#1
bytesLoaded = 0
bytesTotal = 0
data = (null)
dataFormat = "text"
eventPhase = 2
target = (flash.net::URLLoader)#1
text = "Error #2170: Security sandbox violation: http://www.mysite.com/demo/cartTest/main.swf cannot send HTTP headers to https://sandbox.google.com/checkout/api/checkout/v2/request/Merchant/12345."
type = "securityError"
Error: Request for resource at https://sandbox.google.com/checkout/api/checkout/v2/request/Merchant/12345 by requestor from http://www.mysite.com/demo/cartTest/main.swf is denied due to lack of policy file permissions.
Как я уже сказал, он работает нормально на местном уровне. Как я могу обойти эту ошибку безопасности?
3 ответа
Чтобы обойти это, я собрал HTML-форму во Flex, а затем передал ее js на странице, добавил ее в пустую форму на странице и затем отправил форму. Я скрываю форму, чтобы все входные данные и действия пользовательского интерфейса происходили в SWF. Я не люблю это, но я буду жить с этим.
Вы загружаете SWF из http:
и пытается получить доступ к https:
URL. По умолчанию это будет заблокировано (ошибка № 2170).
Чтобы он работал, целевой домен (тот, к которому вы пытаетесь получить доступ из Flash) должен иметь /crossdomain.xml
который позволяет небезопасный доступ (secure="false"). Следующие crossdomain.xml
сработало бы в вашем случае, если бы только вы могли сделать его доступным в корне целевого URL, т.е. https://sandbox.google.com/crossdomain.xml
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" secure="false"/>
<allow-http-request-headers-from domain="*" headers="*" secure="false"/>
</cross-domain-policy>
Подробнее о флаге безопасности здесь: http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html
Файл crossdomain.xml - это ограничение безопасности, обычно предназначенное для предотвращения вредоносного поведения. Права доступа различаются при локальном запуске SWF.
Если вы делаете запрос в другой домен, этот другой домен должен содержать файл crossdomain.xml. Если они этого не сделают, это не будет работать. Например, Amazon размещает файл crossdomain.xml.
Этот предыдущий поток Stackru предоставляет вам несколько вариантов.
Также см. Статью Кертиса Морли о файлах crossdomain.xml.