سيوقف Chrome تعديل document.domain للتخفيف من حدة سياسة المصدر نفسه.

إذا كان موقعك الإلكتروني يعتمد على إعداد document.domain، يجب اتخاذ إجراء.

إيجي كيتامورا
إيجي كيتامورا

آخر الأخبار

  • 30 أيار (مايو) 2023: أعلنّا أنّ الإيقاف النهائي لأداة document.domain سيدخل حيز التنفيذ في الإصدار 115 من Chrome.
  • 7 نيسان (أبريل) 2023: رصدنا مشكلة قبل شحن هذا التغيير في Chrome 112. قيمة ضبط document.domain التي ستتم إزالتها تلقائيًا معلّقة حاليًا ولم يتم تحديد محطة الشحن الجديدة بعد. يُرجى مراجعة مشاركة المدونة هذه أو الاشتراك في blink-dev وسلسلة المحادثات هذه.
  • 20 كانون الثاني (يناير) 2023: تعديل في المخطط الزمني: ستتم تلقائيًا إزالة دالة الضبط على document.domain بدءًا من الإصدار 112 من Chrome. وستتم أيضًا إضافة إشارة إلى سياسة المؤسسة للتحكّم في سلوك document.domain.
  • 25 تموز (يوليو) 2022: تعديل على المخطط الزمني: ستتم تلقائيًا إزالة دالة الضبط على document.domain بدءًا من الإصدار 109 من Chrome.
  • 4 شباط (فبراير) 2022: تم تعديل هذه المعلومات وفقًا للمخطّط الزمني الجديد، وسنعرض تحذيرًا في لوحة "المشاكل" بدءًا من الإصدار 100 من Chrome، مع إزالة دالة ضبط document.domain تلقائيًا بدءًا من الإصدار 106 من Chrome.

تم تصميم document.domain للحصول على اسم المضيف الأصلي أو ضبطه.

على Chrome، لن تتمكّن المواقع الإلكترونية من ضبط document.domain. ستحتاج إلى استخدام مناهج بديلة، مثل postMessage() أو Channel Messaging API، للتواصل من مصادر متعددة. ونستهدف Chrome 112 لشحن هذا التغيير في أقرب وقت، ولكن هذا يعتمد على الاستجابة إلى Intent to Ship (نوايا الشحن).

إذا كان موقعك الإلكتروني يعتمد على تخفيف في سياسة المصدر نفسه من خلال document.domain ليعمل بشكل صحيح، سيحتاج الموقع الإلكتروني إلى إرسال العنوان Origin-Agent-Cluster: ?0، بالإضافة إلى جميع المستندات الأخرى التي تتطلب هذا السلوك (يُرجى العلم أنّ document.domain لن يكون له أي تأثير إذا تم ضبطه على مستند واحد فقط).

لماذا جعل document.domain غير قابل للتغيير؟

تضبط العديد من المواقع الإلكترونية السمة document.domain على السماح بالاتصال بين صفحات الموقع الإلكتروني نفسه ولكن من مصادر متعددة.

إليك كيفية الاستخدام:

لنفترض أن صفحة على https://parent.example.com تتضمن صفحة iframe من https://video.example.com. تتضمّن هذه الصفحات نفس المستوى الأعلى من المستوى الأعلى (eTLD+1) (example.com) مع نطاقات فرعية مختلفة. عند ضبط document.domain لكلتا الصفحتين على 'example.com'، سيتعامل المتصفّح مع المصدرَين كما لو كانا من المصدر نفسه.

ضبط document.domain لـ https://parent.example.com:

// Confirm the current origin of "parent.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

ضبط document.domain لـ https://video.example.com:

// Confirm the current origin of "video.example.com"
console.log(document.domain);

// Set the document.domain
document.domain = 'example.com';
console.log(document.domain);

يمكنك الآن إنشاء معالجة DOM من مصادر متعددة على https://parent.example.com مقابل https://video.example.com.

تضبط المواقع الإلكترونية السمة document.domain لإتاحة إمكانية التواصل بسهولة أكبر مع المستندات المتوفّرة على الموقع الإلكتروني نفسه. لأنّ هذا التغيير يساعد في تخفيف سياسة المصدر نفسه، يمكن للصفحة الرئيسية الوصول إلى مستند iframe واجتياز شجرة DOM والعكس صحيح.

وهذه الطريقة مناسبة، إلا أنّها تمثّل خطرًا أمنيًا.

مخاوف متعلقة بالأمان لدى "document.domain"

أدّت المخاوف المرتبطة بالأمان حول document.domain إلى تغيير في المواصفات التي تحذّر المستخدمين من تجنُّب استخدامها. تسير المناقشة الحالية مع مورّدي المتصفح الآخرين في الاتجاه نفسه.

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

لمعرفة المزيد من المعلومات عن الآثار الأمنية لإعداد document.domain، يُرجى الاطّلاع على صفحة"Document.domain" على MDN.

يخطط Chrome لجعل document.domain غير قابل للتغيير في Chrome 112.

كيف يمكنني معرفة ما إذا كان موقعي الإلكتروني قد تأثر أم لا؟

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

عند تعديل document.domain، يتم عرض تحذير في لوحة "المشاكل".
عند تعديل document.domain، يظهر تحذير في لوحة "المشاكل".

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

يمكنك تشغيل موقعك الإلكتروني من خلال تدقيق واجهة برمجة التطبيقات الذي تم إيقافه نهائيًا لـ LightHouse للعثور على جميع واجهات برمجة التطبيقات التي تمّت جدولة إزالتها من Chrome.

الاتصال البديل من مصادر متعددة

في الوقت الحالي، لديك ثلاثة خيارات لاستبدال document.domain لموقعك الإلكتروني.

استخدام postMessage() أو Channel Messaging API

في معظم حالات الاستخدام، يمكن أن تحلّ postMessage() أو Channel Messaging API على نطاق document.domain.

في المثال التالي:

  1. يطلب https://parent.example.com https://video.example.com ضمن إطار iframe لمعالجة DOM عن طريق إرسال رسالة عبر postMessage().
  2. يعالج https://video.example.com عنصر DOM فور استلام الرسالة وإعلامه بنجاح العنصر الرئيسي.
  3. يقرّ "https://parent.example.com" بنجاحك.

في https://parent.example.com:

// Send a message to https://video.example.com
iframe.postMessage('Request DOM manipulation', 'https://video.example.com');

// Receive messages
iframe.addEventListener('message', (event) => {
  // Reject all messages except ones from https://video.example.com
  if (event.origin !== 'https://video.example.com') return;

  // Filter success messages
  if (event.data === 'succeeded') {
    // DOM manipulation is succeeded
  }
});

في https://video.example.com:

// Receive messages
window.addEventListener('message', (event) => {
  // Reject all messages except ones from https://parent.example.com
  if (event.origin !== 'https://parent.example.com') return;

  // Do a DOM manipulation on https://video.example.com.

  // Send a success message to https://parent.example.com
  event.source.postMessage('succeeded', event.origin);
});

ما عليك سوى تجربة هذه الميزة والاطّلاع على آلية عملها. إذا كانت لديك متطلبات محدّدة لن تعمل مع postMessage() أو Channel Messaging API، يُرجى إعلامنا بذلك على Twitter عبر @ChromiumDev أو طرح سؤال على Stack Overflow باستخدام علامة document.domain.

كحل أخير، أرسِل العنوان Origin-Agent-Cluster: ?0.

إذا كانت لديك أسباب قوية لمواصلة ضبط document.domain، يمكنك إرسال عنوان الاستجابة Origin-Agent-Cluster: ?0 مع المستند المستهدف.

Origin-Agent-Cluster: ?0

يحدِّد عنوان Origin-Agent-Cluster المتصفّح ما إذا كان يجب التعامل مع المستند من خلال مجموعة الوكلاء المستنِدة إلى المصدر. لمزيد من المعلومات حول Origin-Agent-Cluster، يُرجى الاطّلاع على طلب عزل الأداء باستخدام عنوان Origin-Agent-Cluster.

عند إرسال هذا العنوان، يمكن أن يستمر المستند في ضبط document.domain حتى بعد أن يصبح غير قابل للتغيير تلقائيًا.

ضبط OriginAgentClusterDefaultEnabled لسياسة المؤسسة

اختياريًا، يمكن للمشرف ضبط سياسة OriginAgentClusterDefaultEnabled على false لضبط document.domain تلقائيًا على نُسخ Chrome في مؤسستك. لمزيد من المعلومات، يُرجى الاطّلاع على قائمة سياسات Chrome Enterprise وإدارتها | المستندات.

توافُق المتصفح

المراجِع

شكر وتقدير

تصوير برايدون أندرسون على قناة Unsplash