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

ماريكو كوساكا

إنّ سياسة المصدر نفسه هي ميزة أمان في المتصفّح تفرض قيودًا على طريقة تفاعل المستندات والنصوص البرمجية على أحد المصادر مع الموارد على مصدر آخر.

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

تمنع سياسة المصدر نفسه حدوث ذلك من خلال حظر الوصول للقراءة إلى الموارد التي يتم تحميلها من مصدر مختلف. "ولكن انتظر"، قلت: "أحمّل الصور والنصوص من مصادر أخرى طوال الوقت". تتيح المتصفحات لبعض العلامات تضمين موارد من مصادر مختلفة. وتكون هذه السياسة في الغالب أداة تاريخية ويمكن أن تعرِّض موقعك الإلكتروني لثغرات أمنية مثل الاستيلاء على النقرات باستخدام إطارات 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>.
نص برمجي يمكن تضمين النصوص البرمجية المشتركة المصدر، ومع ذلك، قد يتم حظر الوصول إلى واجهات برمجة تطبيقات معيّنة (مثل طلبات الجلب من مصادر متعددة).

قائمة المهام: DevSite - تقييم التفكير والتحقّق

كيفية منع تمويه النقر

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

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

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

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

الخاتمة

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