سياسة ذات المصدر نفسه

Mariko Kosaka

سياسة المصدر نفسه هي ميزة أمان للمتصفّح تحدّ من كيفية تعامل المَستندات والنصوص البرمجية من مصدر معيّن مع الموارد من مصدر آخر.

يمكن للمتصفّح تحميل الموارد من مواقع إلكترونية متعددة وعرضها في الوقت نفسه. قد تكون لديك علامات تبويب متعددة مفتوحة في الوقت نفسه، أو قد يضمّن موقع إلكتروني إطارات iframe متعددة من مواقع إلكترونية مختلفة. إذا لم يكن هناك أي قيود على التفاعلات بين هذه الموارد، واخترق مهاجم نصًا برمجيًا، يمكن للنص البرمجي إظهار كل شيء في متصفّح المستخدم.

تمنع سياسة المصدر نفسه حدوث ذلك من خلال حظر إذن القراءة للموارد المحمَّلة من مصدر مختلف. قد تسأل: "لكنني أُحمِّل الصور والنصوص البرمجية من مصادر أخرى طوال الوقت". تسمح المتصفّحات لبعض العلامات بدمج موارد من مصدر مختلف. هذه السياسة هي في الأساس أثراً تاريخيًا ويمكن أن تُعرّض موقعك الإلكتروني للاختراقات، مثل التصيّد الاحتيالي بالنقر باستخدام divs متناوبة في إطار iframe. يمكنك حظر قراءة هذه العلامات من مصادر مختلفة باستخدام سياسة أمان المحتوى.

ما هي العناصر التي تُعدّ من المصدر نفسه؟

يتم تحديد المصدر من خلال المخطط (المعروف أيضًا باسم البروتوكول، على سبيل المثال HTTP أو HTTPS) والمنفذ (إذا تم تحديده) والمضيف. عندما تكون العناصر الثلاثة متطابقة لعنوانَي URL، يُعتبَر أنّهما من المصدر نفسه. على سبيل المثال، http://www.example.com/foo هو المصدر نفسه الذي تنتمي إليه http://www.example.com/bar ولكن ليس https://www.example.com/bar لأنّ المخطّط مختلف.

ما هي المحتوى المسموح به والمحظور؟

بشكل عام، يُسمح بتضمين مرجع من مصدر خارجي، في حين يتم حظر قراءة مرجع من مصدر خارجي.

إطارات iframe يُسمح عادةً بتضمين المحتوى من مصادر مختلفة (حسب توجيه X-Frame-Options)، ولكن لا يُسمح بقراءة المحتوى من مصادر مختلفة (مثل استخدام JavaScript للوصول إلى مستند في إطار iframe).
CSS يمكن تضمين ملفات CSS من مصادر مختلفة باستخدام عنصر <link> أو @import في ملف CSS. قد يكون عنوان Content-Type الصحيح مطلوبًا.
النماذج يمكن استخدام عناوين URL من مصادر مختلفة كقيمة لسمة action لعناصر النماذج. يمكن لتطبيق الويب كتابة بيانات النموذج إلى وجهة من مصادر متعددة.
صور يُسمح بتضمين صور من مصادر متعددة. ومع ذلك، يتم حظر قراءة بيانات الصور من مصادر متعددة (مثل استرداد البيانات الثنائية من صورة من مصدر متعدد باستخدام JavaScript).
الوسائط المتعددة يمكن تضمين الفيديو والصوت من مصادر مختلفة باستخدام عنصرَي <video> و<audio>.
نص برمجي يمكن تضمين نصوص برمجية من مصادر مختلفة، ولكن قد يتم حظر الوصول إلى واجهات برمجة تطبيقات معيّنة (مثل طلبات الجلب من مصادر مختلفة).

TODO: DevSite - Think and Check assessment

كيفية منع خدعة النقر

تمويه النقر
الشكل: آلية Clickjacking موضّحة في 3 طبقات منفصلة (الموقع الإلكتروني الأساسي، الموقع الإلكتروني المضمّن في إطار iframe، الزر الشفاف).

في هجوم يُعرف باسم "التصيّد بالنقر"، يتم تضمين موقع إلكتروني في iframe مع وضع زرّات شفافة فوقه تؤدي إلى وجهة مختلفة. يتم خداع المستخدمين ويُخيَّل إليهم أنّهم يصلون إلى تطبيقك أثناء إرسال البيانات إلى المهاجمين.

لحظر المواقع الإلكترونية الأخرى من تضمين موقعك الإلكتروني في إطار iframe، أضِف سياسة محتوى أمان تتضمّن frame-ancestorsتوجيه إلى عناوين HTTP.

بدلاً من ذلك، يمكنك إضافة X-Frame-Options إلى رؤوس HTTP، اطّلِع على MDN للاطّلاع على قائمة الخيارات.

الخاتمة

نأمل أن تشعر بالارتياح بعد معرفة أنّ المتصفّحات تعمل جاهدة للحفاظ على أمانك على الويب. على الرغم من أنّ المتصفّحات تحاول الحفاظ على الأمان من خلال حظر الوصول إلى الموارد، قد تحتاج أحيانًا إلى الوصول إلى موارد من مصادر مختلفة في تطبيقاتك. في الدليل التالي، تعرَّف على مشاركة الموارد المتعدّدة المصادر (CORS) وكيفية إخبار المتصفّح بأنّه يُسمح بتحميل الموارد المتعدّدة المصادر من مصادر موثوق بها.