"سياسة المصدر المشترك" هي ميزة أمان في المتصفّح تفرض قيودًا على كيفية تفاعل المستندات والنصوص البرمجية في مصدر معيّن مع الموارد في مصدر آخر.
يمكن للمتصفّح تحميل الموارد وعرضها من مواقع إلكترونية متعدّدة في الوقت نفسه. قد يكون لديك عدة علامات تبويب مفتوحة في الوقت نفسه، أو قد يضمّن موقع إلكتروني عدة إطارات 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>.
|
| نص برمجي | يمكن تضمين نصوص برمجية متعدّدة المصادر، ولكن قد يتم حظر الوصول إلى بعض واجهات برمجة التطبيقات (مثل طلبات الجلب المتعدّدة المصادر). |
TODO: DevSite - Think and Check assessment
كيفية منع سرقة النقرات
يُعرف أحد أنواع الهجمات باسم "سرقة النقرات"، ويتم فيه تضمين موقع إلكتروني في iframe وتراكب أزرار شفافة تؤدي إلى وجهة مختلفة. يتم خداع المستخدمين للاعتقاد بأنهم يصلون إلى تطبيقك أثناء إرسال البيانات إلى المهاجمين.
لمنع المواقع الإلكترونية الأخرى من تضمين موقعك الإلكتروني في إطار iframe، أضِف سياسة أمان المحتوى مع توجيه frame-ancestors إلى عناوين HTTP.
بدلاً من ذلك، يمكنك إضافة X-Frame-Options إلى عناوين HTTP. يُرجى الاطّلاع على
MDN
للحصول على قائمة بالخيارات.
الخاتمة
نأمل أن تشعر ببعض الارتياح لأنّ المتصفّحات تعمل بجدّ لتكون حارسًا لأمان الويب. على الرغم من أنّ المتصفّحات تحاول الحفاظ على الأمان من خلال حظر الوصول إلى الموارد، قد تحتاج أحيانًا إلى الوصول إلى موارد متعدّدة المصادر في تطبيقاتك. في الدليل التالي، يمكنك التعرّف على ميزة "مشاركة الموارد المتعدّدة المصادر" (CORS) وكيفية إعلام المتصفّح بأنّ تحميل الموارد المتعدّدة المصادر مسموح به من مصادر موثوقة.