إذا كان موقعك الإلكتروني يعتمد على إعداد 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 تحذيرًا في لوحة مشاكل "أدوات مطوّري البرامج". لاحظ العلامة الصفراء في أعلى الجانب الأيسر.
إذا سبق لك إعداد نقطة نهاية لإعداد التقارير، سيتم أيضًا إرسال تقارير الإيقاف النهائي إليك. مزيد من المعلومات حول كيفية استخدام Reporting API مع خدمات جمع التقارير الحالية أو من خلال إنشاء حلّ داخلي خاص بك
يمكنك تشغيل موقعك الإلكتروني من خلال تدقيق واجهة برمجة التطبيقات الذي تم إيقافه نهائيًا لـ LightHouse للعثور على جميع واجهات برمجة التطبيقات التي تمّت جدولة إزالتها من Chrome.
الاتصال البديل من مصادر متعددة
في الوقت الحالي، لديك ثلاثة خيارات لاستبدال document.domain
لموقعك الإلكتروني.
استخدام postMessage()
أو Channel Messaging API
في معظم حالات الاستخدام، يمكن أن تحلّ
postMessage()
أو Channel Messaging API
على نطاق document.domain
.
في المثال التالي:
- يطلب
https://parent.example.com
https://video.example.com
ضمن إطار iframe لمعالجة DOM عن طريق إرسال رسالة عبرpostMessage()
. - يعالج
https://video.example.com
عنصر DOM فور استلام الرسالة وإعلامه بنجاح العنصر الرئيسي. - يقرّ "
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 وإدارتها | المستندات.
توافُق المتصفح
- تنص مواصفات المصدر على أنه يجب إزالة الميزة.
- تعتبر شركة Mozilla عدم جدوى إيقاف
document.domain
تلقائيًا. - أشارت WebKit إلى أنها إيجابية نوعًا ما بشأن إيقاف ميزة
document.domain
setter.
المراجِع
Document.domain
- واجهات برمجة تطبيقات الويب | MDN- عزل المصدر وإيقافه نهائيًا
document.domain
- جارٍ إيقاف
document.domain
نهائيًا. · المشكلة رقم 564 · w3ctag/design-reviews
شكر وتقدير
تصوير برايدون أندرسون على قناة Unsplash