سياسة الأصل نفسه

في مجال الحوسبة، تُعدّ سياسة المصدر نفسه ( SOP ) مفهومًا أساسيًا في نموذج أمان تطبيقات الويب . بموجب هذه السياسة، يسمح متصفح الويب للبرامج النصية الموجودة في صفحة ويب أولى بالوصول إلى البيانات في صفحة ويب ثانية، شريطة أن يكون للصفحتين نفس المصدر . يُعرَّف المصدر بأنه مزيج من مخطط URI واسم المضيف ورقم المنفذ. تمنع هذه السياسة البرامج النصية الخبيثة الموجودة في إحدى الصفحات من الوصول إلى البيانات الحساسة الموجودة في صفحة ويب أخرى عبر نموذج كائن المستند (DOM) الخاص بتلك الصفحة.

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

لا تنطبق سياسة المصدر نفسه إلا على البرامج النصية. وهذا يعني أنه يمكن الوصول إلى موارد مثل الصور وملفات CSS والبرامج النصية المحملة ديناميكيًا من مصادر مختلفة عبر وسوم HTML المقابلة (باستثناء الخطوط). وتستغل الهجمات حقيقة أن سياسة المصدر نفسه لا تنطبق على وسوم HTML.

هناك بعض الآليات المتاحة لتخفيف إجراءات التشغيل القياسية؛ إحداها هي مشاركة الموارد عبر المصادر (CORS).

تاريخ

تم تقديم مفهوم سياسة الأصل نفسه بواسطة Netscape Navigator 2.02 في عام 1995، [ 1 ] بعد فترة وجيزة من إدخال JavaScript في Netscape 2.0. [ 2 ] [ 3 ] وقد مكّن JavaScript من البرمجة النصية على صفحات الويب، وعلى وجه الخصوص الوصول البرمجي إلى DOM.

تم تصميم هذه السياسة في الأصل لحماية الوصول إلى DOM، ولكن تم توسيع نطاقها منذ ذلك الحين لحماية الأجزاء الحساسة من كائن JavaScript العام.

تطبيق

تُطبّق جميع المتصفحات الحديثة شكلاً من أشكال سياسة المصدر نفسه، باعتبارها ركيزة أساسية للأمان. [ 4 ] لا يُشترط أن تتطابق هذه السياسات مع مواصفات دقيقة [ 5 ولكن غالبًا ما يتم توسيعها لتحديد حدود أمان متوافقة تقريبًا مع تقنيات الويب الأخرى، مثل Microsoft Silverlight و Adobe Flash و Adobe Acrobat ، أو مع آليات أخرى غير التلاعب المباشر بنموذج كائن المستند (DOM)، مثل XMLHttpRequest .

قواعد تحديد المنشأ

تُحدد الخوارزمية المستخدمة لحساب "أصل" مُعرّف الموارد الموحد (URI) في RFC 6454، القسم 4. بالنسبة لمعرّفات الموارد الموحدة المطلقة، يكون الأصل هو الثلاثية {المخطط، المضيف، المنفذ}. إذا لم يستخدم مُعرّف الموارد الموحد عنصرًا هرميًا كمرجع للتسمية (انظر RFC 3986 ، القسم 3.2) أو إذا لم يكن مُعرّف موارد موحدًا مطلقًا، فسيتم استخدام مُعرّف فريد عالميًا. يُعتبر موردان من نفس الأصل إذا وفقط إذا كانت جميع هذه القيم متطابقة تمامًا.

ولتوضيح ذلك، يقدم الجدول التالي نظرة عامة على النتائج النموذجية لعمليات التحقق من عنوان URL " http://www.example.com/dir/page.html ".

عنوان URL المقارنحصيلةسبب
http://www.example.com/dir/page2.htmlنجاحنفس المخطط والمضيف والمنفذ
http://www.example.com /dir2/other.htmlنجاحنفس المخطط والمضيف والمنفذ
http:// اسم المستخدم: كلمة المرور@ www.example.com /dir2/other.htmlنجاحنفس المخطط والمضيف والمنفذ
http://www.example.com: 80 /dir/other.htmlنجاحتقوم معظم المتصفحات الحديثة بتعيين المنفذ الافتراضي للبروتوكول ضمنيًا عند حذفه. [ 6 ] [ 7 ]
http://www.example.com : 81 /dir/other.htmlفشلنفس المخطط والمضيف ولكن منفذ مختلف
https://www.example.com/dir/other.htmlفشلمخطط مختلف
http://en.example.com/dir/other.htmlفشلمضيف مختلف
http://example.com/dir/other.htmlفشلمضيف مختلف (يلزم تطابق تام)
http://v2.www.example.com/dir/other.htmlفشلمضيف مختلف (يلزم تطابق تام)
البيانات :صورة/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=فشلمخطط مختلف

على عكس المتصفحات الأخرى، لا يتضمن متصفح إنترنت إكسبلورر المنفذ في حساب المصدر، بل يستخدم منطقة الأمان بدلاً منه. [ 8 ]

إمكانية الوصول إلى الاستجابات الحساسة من مصادر متعددة عبر المصادقة القابلة لإعادة الاستخدام

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

يتوقع مالكو مواقع البنوك أن متصفحات المستخدمين الذين يزورون الموقع الخبيث لا تسمح للتعليمات البرمجية المحملة من الموقع الخبيث بالوصول إلى ملف تعريف ارتباط جلسة البنك أو بيانات التفويض على مستوى النظام الأساسي. صحيح أن جافا سكريبت لا تملك وصولاً مباشراً إلى ملف تعريف ارتباط جلسة البنك، إلا أنها قادرة على إرسال واستقبال الطلبات إلى موقع البنك باستخدام ملف تعريف ارتباط جلسة البنك. تم تطبيق سياسة المصدر نفسه كشرط أساسي للمتصفحات التي تراعي الأمن لمنع الوصول للقراءة إلى الاستجابات من مصادر مختلفة، بافتراض أن غالبية المستخدمين يختارون استخدام متصفحات متوافقة. لا تمنع هذه السياسة عمليات الكتابة. يتطلب التصدي لإساءة استخدام إذن الكتابة توفير حماية إضافية ضد هجمات تزوير الطلبات عبر المواقع (CSRF) من قِبل المواقع المستهدفة.

تخفيف سياسة الأصل الواحد

في بعض الحالات، تكون سياسة المصدر نفسه مقيدة للغاية، مما يُسبب مشاكل للمواقع الإلكترونية الكبيرة التي تستخدم نطاقات فرعية متعددة . في البداية، تم استخدام عدد من الحلول البديلة، مثل استخدام مُعرّف الجزء أو window.nameالخاصية، لتمرير البيانات بين المستندات الموجودة في نطاقات مختلفة. تدعم المتصفحات الحديثة تقنيات متعددة لتخفيف سياسة المصدر نفسه بطريقة مُحكمة.

تلوث البيانات

احتوى متصفح نتسكيب نافيغيتور لفترة وجيزة على ميزة فحص التلوث . أُضيفت هذه الميزة تجريبيًا عام ١٩٩٧ كجزء من نتسكيب ٣. [ ٩ ] كانت الميزة مُعطّلة افتراضيًا، ولكن في حال تفعيلها من قِبل المستخدم، فإنها تسمح للمواقع الإلكترونية بمحاولة قراءة خصائص جافا سكريبت للنوافذ والإطارات التابعة لنطاق مختلف. ثم يسأل المتصفح المستخدم عما إذا كان يسمح بالوصول المطلوب. [ ١٠ ] [ ١١ ]

خاصية document.domain

إذا احتوت نافذتان (أو إطاران) على نصوص برمجية تُعيّن قيمة النطاق إلى القيمة نفسها، فسيتم تخفيف سياسة المصدر نفسه لهاتين النافذتين، وسيتمكن كل منهما من التفاعل مع الآخر. على سبيل المثال، قد تُعيّن النصوص البرمجية المتعاونة في المستندات المُحمّلة من orders.example.com وcatalog.example.com خصائصها document.domainإلى "example.com"، مما يجعل المستندات تبدو وكأنها من المصدر نفسه، ويُمكّن كل مستند من قراءة خصائص الآخر. يؤدي تعيين هذه الخاصية ضمنيًا إلى تعيين المنفذ إلى قيمة فارغة (null)، وهو ما ستُفسّره معظم المتصفحات بشكل مختلف عن المنفذ 80 أو حتى منفذ غير مُحدد. لضمان السماح بالوصول من قِبل المتصفح، عيّن خاصية document.domain لكلا الصفحتين. [ 12 ]

تم تقديم هذا document.domainالمفهوم كجزء من برنامج Netscape Navigator 3، [ 13 ] الذي تم إصداره في عام 1996. [ 9 ]

مشاركة الموارد عبر المناطق

تُعرف التقنية الأخرى لتخفيف قيود سياسة المصدر نفسه باسم مشاركة الموارد عبر المصادر (CORS). يُوسّع هذا المعيار بروتوكول HTTP بإضافة Originرأس طلب ورأس Access-Control-Allow-Originاستجابة جديدين. [ 14 ] يسمح هذا المعيار للخوادم باستخدام رأس لتحديد المصادر التي يُسمح لها بطلب ملف، أو استخدام رمز بدل (*) للسماح لأي موقع بطلب ملف. تستخدم متصفحات مثل Firefox 3.5 وSafari 4 و Internet Explorer 10 هذا الرأس للسماح بطلبات HTTP عبر المصادر باستخدام XMLHttpRequest، والتي كانت ستُحظر لولا ذلك بموجب سياسة المصدر نفسه.

المراسلة بين المستندات

تتيح تقنية أخرى، وهي المراسلة بين المستندات ، لبرنامج نصي من صفحة ما إرسال رسائل نصية إلى برنامج نصي آخر في صفحة أخرى، بغض النظر عن مصدر البرنامج النصي. يؤدي استدعاء دالة postMessage() على كائن Window بشكل غير متزامن إلى إطلاق حدث "onmessage" في تلك النافذة، مما يُفعّل أي معالجات أحداث مُعرّفة من قِبل المستخدم. لا يزال البرنامج النصي في إحدى الصفحات غير قادر على الوصول مباشرةً إلى الدوال أو المتغيرات في الصفحة الأخرى، لكنهما يستطيعان التواصل بأمان من خلال تقنية تمرير الرسائل هذه.

JSONP

بما أن عناصر HTML <script>مسموح لها باسترجاع المحتوى وتنفيذه من نطاقات أخرى، يمكن للصفحة تجاوز سياسة المصدر نفسه واستقبال بيانات JSON من نطاق مختلف عن طريق تحميل مورد يُعيد حمولة JSONP. تتكون حمولات JSONP من حمولة JSON داخلية مُغلّفة باستدعاء دالة مُعرّفة مسبقًا. عند تحميل مورد البرنامج النصي بواسطة المتصفح، سيتم استدعاء دالة رد الاتصال المُخصصة لمعالجة حمولة JSON المُغلّفة.

WebSockets

تسمح المتصفحات الحديثة للبرامج النصية بالاتصال بعنوان WebSocket دون تطبيق سياسة المصدر نفسه. ومع ذلك، فهي تتعرف على استخدام عنوان URI لـ WebSocket، وتُضيف ترويسة Origin: إلى الطلب تُشير إلى مصدر البرنامج النصي الذي يطلب الاتصال. ولضمان أمان المواقع المتعددة، يجب على خادم WebSocket التحقق من أن هذا المصدر مُصرّح له بتلقي الرد.

الحالات الشاذة

لا يزال سلوك عمليات التحقق من المصدر نفسه والآليات ذات الصلة غير محدد بدقة في عدد من الحالات الشاذة، مثل البروتوكولات الوهمية التي لا يرتبط عنوان URL الخاص بها باسم مضيف أو منفذ محدد بوضوح (مثل file: و data: وما إلى ذلك). وقد تسبب هذا تاريخيًا في عدد لا بأس به من المشكلات الأمنية، مثل قدرة أي ملف HTML مخزن محليًا، وهي قدرة غير مرغوب فيها عمومًا، على الوصول إلى جميع الملفات الأخرى على القرص، أو التواصل مع أي موقع على الإنترنت.

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

الهجمات

معلومات القراءة

حتى مع تطبيق سياسة المصدر نفسه (دون تخفيفها بواسطة مشاركة الموارد عبر المصادر)، يمكن تنفيذ بعض الهجمات عبر المصادر. يمكن استخدام WebRTC لمعرفة عنوان IP الداخلي للضحية. [ 15 ] عند محاولة الاتصال بمنفذ عبر المصادر، لا يمكن قراءة الاستجابات في ظل سياسة المصدر نفسه، ولكن يمكن لبرنامج JavaScript استنتاج ما إذا كان المنفذ مفتوحًا أم مغلقًا من خلال التحقق من حدث التحميل/الخطأ، أو من حدوث مهلة. يتيح هذا فرصًا لمسح المنافذ عبر المصادر .

علاوة على ذلك، يمكن لمقاطع جافا سكريبت استخدام تقنيات مثل تسريبات المواقع المتعددة [ 16 ] لاستغلال ثغرات تسريب المعلومات القديمة في المتصفح لاستنتاج معلومات من مصادر متعددة. يمكن التصدي لهذه الهجمات بتطبيق ترويسة سياسة موارد المصادر المتعددة (CORP)، التي تسمح لمالك الموقع الإلكتروني بحظر موارد المصادر المتعددة أو المواقع المتعددة، مثل الصور والفيديوهات وأوراق الأنماط. كما يمكن لـ CORP حظر fetchالطلبات التي تبدأها جافا سكريبت، ولكن فقط إذا تم إرسالها باستخدام وضع الطلب no-cors[ 17 ] . [ 18 ]

كتابة المعلومات (CSRF)

لا تمنع سياسة المصدر نفسه المتصفح من إرسال طلبات GET وPOST وOPTIONS وTRACE، بل تمنع فقط قراءة الاستجابات بواسطة كود المستخدم. لذا، إذا استخدمت نقطة نهاية إحدى طرق الطلب "الآمنة" هذه لكتابة معلومات أو تنفيذ إجراء نيابةً عن المستخدم، فقد يستغلها المهاجمون.

تسريب أو كتابة المعلومات عبر ملفات تعريف الارتباط

تجدر الإشارة إلى أن سياسة المصدر نفسه لا تنطبق على ملفات تعريف الارتباط لأسباب تاريخية. [ 19 ] في حال نشر مواقع خبيثة متعددة على نفس اسم المضيف بأرقام منافذ مختلفة، خلافًا لسياسة المصدر نفسه، يتم مشاركة جميع ملفات تعريف الارتباط التي تُنشئها أي من هذه المواقع. يمكن استغلال ذلك لتسريب رموز جلسات المستخدمين وسرقة معلومات حساباتهم. لذا، ينبغي فصل خدمات الويب باستخدام نطاقات فرعية مميزة بدلاً من أرقام المنافذ.

انظر أيضاً

للمزيد من القراءة

مراجع

  1. "دليل نتسكيب 3.0 - مواضيع متقدمة" . netscape.com . مؤرشف من الأصل بتاريخ 8 أغسطس 2002. تم الاطلاع عليه بتاريخ 16 فبراير 2020. يمنع برنامج Navigator الإصدار 2.02 والإصدارات الأحدث تلقائيًا البرامج النصية على خادم واحد من الوصول إلى خصائص المستندات على خادم آخر.
  2. "جافا سكريبت 1.0 - 1995" . www.webdesignmuseum.org . تاريخ الاسترجاع: 19 يناير 2020 .
  3. "مرحباً بكم في متصفح نتسكيب نافيجاتور الإصدار 2.0" . netscape.com . 14 يونيو 1997. مؤرشف من الأصل في 14 يونيو 1997. تم الاطلاع عليه بتاريخ 16 فبراير 2020 .
  4. "دليل أمان المتصفح، الجزء 2" . تم الاطلاع عليه بتاريخ 31 يناير 2014 .
  5. "سياسة المنشأ نفسه" . اتحاد شبكة الويب العالمية . تم الاطلاع عليه بتاريخ 31 يناير 2014 .
  6. كيتامورا، إيجي. "فهم "الموقع نفسه" و"الأصل نفسه"" . Web.dev . Google . تم الاطلاع عليه بتاريخ 26 يناير 2023 .
  7. "الأصل" . وثائق الويب لشبكة مطوري موزيلا . موزيلا . تم الاسترجاع في 26 يناير 2023 .
  8. لورانس، إريك. "IEInternals - سياسة المصدر نفسه الجزء 1" . تم الاطلاع عليه بتاريخ 22 أكتوبر 2013 .
  9. ١ ٢ "نتسكيب نافيجاتور ٣.٠ - ما الجديد" . netscape.com . ١٤ يونيو ١٩٩٧. مؤرشف من الأصل في ١٤ يونيو ١٩٩٧. تم الاطلاع عليه بتاريخ ١٦ فبراير ٢٠٢٠ .
  10. "دليل جافا سكريبت 1.3 - الأمان" . netscape.com . 21-02-2003. مؤرشف من الأصل في 21-02-2003 . تم الاطلاع عليه في 16-02-2020 .
  11. "دليل جافا سكريبت 1.3 - الأمان" . docs.oracle.com . مؤرشف من الأصل بتاريخ 24-08-2012 . تم الاطلاع عليه بتاريخ 16-02-2020 .
  12. ليبرا، سكوت. "مشاكل أمن النطاقات المتعددة" . زن جافا سكريبت الغريب . تم الاسترجاع في 4 أبريل 2014 .
  13. "دليل جافا سكريبت لمتصفح نتسكيب 3.0" . netscape.com . مؤرشف من الأصل بتاريخ 3 أكتوبر 2002. تم الاطلاع عليه بتاريخ 16 فبراير 2020 .
  14. إنشاء برمجيات وسيطة WSGI
  15. "WebRTC: الاتصال في الوقت الحقيقي في المتصفحات" . اتحاد شبكة الويب العالمية . تم الاطلاع عليه بتاريخ 27-08-2024 .
  16. "مقدمة" . ويكي إكس إس ليكس . تم الاطلاع عليه بتاريخ 27-10-2024 .
  17. "معيار الجلب" . fetch.spec.whatwg.org . تم الاطلاع عليه بتاريخ 27-10-2024 .
  18. "تطبيق سياسة الموارد عبر المصادر (CORP) - الأمن على الويب | MDN" . developer.mozilla.org . 2024-08-07 . تاريخ الاسترجاع: 2024-10-27 .
  19. بارث، آدم (27-04-2011). آلية إدارة حالة HTTP (تقرير). فريق عمل هندسة الإنترنت.