نفس سياسة المنشأ
في لغات البرمجة من جانب العميل، مثل JavaScript وActionScript، تعد سياسة المصدر نفسه مفهومًا أمنيًا مهمًا للغاية، وله أهمية كبيرة في ضمان أمان البيانات. تنص سياسة المصدر نفسه على أن البرامج النصية عبر النطاقات معزولة ولا يمكن للبرامج النصية الموجودة في مجال واحد الوصول إلى معظم خصائص وأساليب مجال آخر وتشغيلها. إذن ما هو نفس المجال وما هو المجال المختلف؟ عندما يكون لنطاقين نفس البروتوكول (مثل http)، ونفس المنفذ (مثل 80)، ونفس المضيف (مثل www.example.org)، فيمكننا اعتبارهما نفس النطاق. على سبيل المثال، http://www.example.org/index.html وhttp://www.example.org/sub/index.html موجودان في نفس النطاق، بينما http://www.example.org وhttps ://www أي اثنين من .example.org، http://www.example.org:8080، http://sub.example.org سيشكلان مجالًا مشتركًا. يجب أن تتعامل سياسة المصدر نفسه أيضًا مع بعض المواقف الخاصة، مثل تقييد أذونات الوصول للنصوص البرمجية ضمن بروتوكول الملف. يتم فتح ملفات HTML المحلية في المتصفح من خلال بروتوكول الملف، وإذا تمكن البرنامج النصي من الوصول إلى أي ملفات أخرى على القرص الصلب من خلال بروتوكول الملف، فسوف تنشأ مخاطر أمنية حاليًا، ولا يزال IE8 يواجه مثل هذه المخاطر.
نظرًا لتأثرها بنفس سياسة الأصل، سيتم تقييد مشاركة الموارد عبر النطاقات. ومع ذلك، مع ممارسة الأشخاص وتقدم المتصفحات، يوجد حاليًا الكثير من الخبرة القيمة المتراكمة والمتراكمة في مهارات الطلبات عبر النطاقات. أقوم هنا بتقسيم مشاركة الموارد عبر المجال إلى نوعين، أحدهما هو طلب البيانات في اتجاه واحد، والآخر هو اتصال الرسائل في اتجاهين. بعد ذلك، سأقوم بإدراج بعض الطرق الشائعة عبر المجال، ويمكن الحصول على الكود المصدري للأمثلة عبر المجال التالية هنا .
اتجاه واحد عبر المجال
JSONP
JSONP (JSON with Padding) هي طريقة بسيطة وفعالة عبر المجالات، ويمكن لعلامة البرنامج النصي في HTML تحميل JavaScript وتنفيذها من مجالات أخرى، حتى نتمكن من تحميل الموارد ديناميكيًا من المجالات الأخرى من خلال علامات البرنامج النصي. على سبيل المثال، إذا كنت أرغب في تحميل بيانات المجال B من الصفحة pageA للمجال A، ففي الصفحة pageB للمجال B، أعلن البيانات المطلوبة بواسطة pageA في شكل JavaScript، ثم استخدم علامة البرنامج النصي في pageA لتحميل pageB، ثم في pageB سيتم تنفيذ البرنامج النصي. تضيف JSONP وظيفة رد الاتصال على هذا الأساس، بعد تحميل الصفحة B، سيتم تنفيذ الوظيفة المحددة في الصفحة A، وسيتم تمرير البيانات المطلوبة إلى الوظيفة في شكل معلمات. من السهل تنفيذ JSONP، ولكن هناك أيضًا بعض المخاطر الأمنية. إذا تم تنفيذ برنامج نصي لجهة خارجية حسب الرغبة، فيمكنه التلاعب بمحتوى الصفحة واعتراض البيانات الحساسة. ولكن عند نقل البيانات بين أطراف موثوقة، يعد JSONP خيارًا مناسبًا للغاية.
محمل URL فلاش
يحتوي Flash على مجموعة خاصة به من سياسات الأمان. يمكن للخادم استخدام ملف crossdomain.xml للإعلان عن ملفات SWF للمجال التي يمكن الوصول إليها. ويمكن أيضًا استخدام واجهة برمجة التطبيقات (API) لتحديد النطاقات التي يمكن تحميلها من خلالها. عند الوصول إلى الموارد عبر النطاقات، مثل طلب البيانات على النطاق www.b.com من النطاق www.a.com، يمكننا استخدام Flash لإرسال طلبات HTTP. أولاً، قم بتعديل crossdomain.xml على المجال www.b.com (يتم تخزينه عادةً في الدليل الجذر، إذا لم تكن هناك حاجة لإنشائه يدويًا)، وأضف www.a.com إلى القائمة البيضاء. ثانيًا، يتم إرسال طلب HTTP من خلال Flash URLLoader، وأخيرًا، يتم تمرير نتيجة الاستجابة إلى JavaScript من خلال Flash API. يعد Flash URLLoader حلاً شائعًا جدًا عبر النطاقات، ولكن إذا كان يحتاج إلى دعم نظام التشغيل iOS، فلا يمكن لهذا الحل أن يفعل أي شيء.
التحكم في الوصول
يعد التحكم في الوصول طريقة أكثر تجاوزًا عبر النطاقات، وهو مدعوم حاليًا فقط في عدد قليل من المتصفحات التي يمكنها إرسال طلب HTTP عبر النطاقات (يتم تنفيذ Firefox وGoogle Chrome وما إلى ذلك من خلال XMLHTTPRequest، ويتم تنفيذ IE8 من خلال XDomainRequest). ). يجب أن تتضمن الاستجابة للطلب رأس استجابة HTTP Access-Control-Allow-Origin، الذي يعلن إمكانية الوصول إلى المجال المطلوب. على سبيل المثال، يرسل www.a.com طلب HTTP عبر النطاق إلى الأصول.php ضمن www.b.com ، ثم يجب على الأصول.php إضافة رأس الاستجابة التالي:
header("Access-Control-Allow-Origin: http://www.a.com");