گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

Same-Origin Policy به سبک فلش (Flash) و فلکس (Flex)

نویسنده:
20 نوامبر 14

خیلی مواقع پیش میاد که برنامه نویس یک برنامه را تولید میکنه و بعد از باگ گیری و کلی تست مطمئن میده دست مشتری. خیلی نمیگذره که مشتری تماس میگیره و میگه برنامه کار نمیکنه. برنامه نویس هم بعد بررسی مشکل مشتری متوجه میشه که طرف درست میگه !!! بلافاصله روی سیستم خودش چک میکنه و میبینه همه چیز خوب کار میکنه ! سیستم را عوض میکنه و به مشتری هم میگه روی یک سیستم دیگه چک کن. با بررسی روی سیستم دیگه متوجه میشه همه چیز درسته و مشکل از سیستم مشتری بوده. حالا جالبتر میشه اگه مشتری بگه روی هر سیستمی چک میکنه همین مشکل را داره.

برنامه نویس

برای من هم امروز همین مشکل پیش اومد. باید برنامه‌ای را با یک نرم‌افزار فلش هماهنگ میکردم که اطلاعات ورودیش را از پایگاه ما بخونه. خوب کار خاصی نبود و فوری کار ها انجام شد. اما با مشکلی که برای مشتری پیش اومده چه کنیم ؟ خوب باید سیستم مشتری را بررسی کنیم. پس با استفاده از Team Viewer از توی شرکت سیستم را بررسی میکنم و متوجه میشم برنامه Flash نمیتونه اطلاعات را از ورودی جدید بخونه !

تنها کاری که میشه کرد این هست که روی Firefox افزونه Live HTTP Headers را نصب کنم و ببینم اون پشت چه خبره. بعد از بررسی متوجه میشم که فلش درخواستی برای فایل crossdoman.xml توی ریشه سایت ارسال میکنه و چون چنین فایلی وجود نداره و وب سرور من داره خطای ۴۰۴ میده کلاً اطلاعات دریافتیش را بی خیال میشه. پس از کمی بررسی متوجه میشم که Flash هم برای بحث Same-Origin Policy بجای Header از یک فایل Xml استفاده میکنه.

پس از کمی بررسی توی سایت‌ ها به فرمت زیر میرسم :

<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation=
"http://www.adobe.com/xml/schemas/PolicyFile.xsd">
  <allow-access-from domain="domain.com" />
    <site-control permitted-cross-domain-policies="master-only"/>
  <allow-http-request-headers-from domain="*.domain.com" headers="*" secure="false"/>
</cross-domain-policy>

فایل را با نام crossdomain.xml ذخیره و توی ریشه سایت کپی میکنم و مشکل حل میشه.

البته داشتم گیج بازی در میاوردم ، چون فایل داره فقط به domain و subdmoain ها اجازه دسترسی میده و اصلاً من subdomain نداشتم. پس چرا باید اصلاً Cross Domain موضوعیت پیدا کنه ؟ پاسخ این بود که domain.com با www.domain.com فرق میکنه و من فلش را با www.domain.com صدا میزدم ولی فایل ورودی اطلاعات را با domain.com. عجیب اینجاست که یکسری از نسخه های فلش این crossdomain.xml را نیاز دارند و مثلاً نسخه ۱۰ و ۱۱ ی که من روی ubuntu داشتم چنین مشکلی نداشت ! البته شاید هم به خود مرورگر برگرده که بعیده !