اگر وب سایت شما به تنظیم document.domain متکی است، اقدام شما ضروری است.
به روز رسانی ها
- 30 مه 2023 : ما اعلام کردهایم که منسوخ شدن تنظیمکننده
document.domainدر Chrome 115 مؤثر خواهد بود. - 7 آوریل 2023 : قبل از ارسال این تغییر در Chrome 112، مشکلی را شناسایی کردهایم. تنظیمکننده
document.domainکه بهطور پیشفرض حذف میشود در حال حاضر به حالت تعلیق درآمده است و نقطه عطف ارسال جدید هنوز مشخص نشده است. لطفاً دوباره این پست وبلاگ را بررسی کنید یا در blink-dev و این موضوع مشترک شوید. - 20 ژانویه 2023 : خط زمانی بهروزرسانی شده— تنظیمکننده
document.domainبهطور پیشفرض از Chrome 112 حذف خواهد شد. همچنین، اشارهای درباره خطمشی سازمانی برای کنترل رفتارdocument.domainاضافه شده است. - 25 ژوئیه 2022 : جدول زمانی بهروزرسانی شده - تنظیمکننده
document.domainبهطور پیشفرض از Chrome 109 حذف میشود. - 4 فوریه 2022 : با خط زمانی جدید بهروزرسانی شد - هشداری را در پانل مشکلات از Chrome 100 نشان میدهیم که تنظیمکننده
document.domainبهطور پیشفرض از Chrome 106 حذف میشود.
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);
اکنون می توانید در https://parent.example.com در مقابل https://video.example.com یک دستکاری DOM با منبع متقاطع ایجاد کنید.
وبسایتها document.domain را تنظیم میکنند تا امکان ارتباط آسانتر اسناد همان سایت را فراهم کنند. از آنجایی که این تغییر خط مشی مبدا یکسان را کاهش می دهد ، صفحه اصلی می تواند به سند iframe دسترسی داشته باشد و درخت DOM را طی کند و بالعکس.
این یک تکنیک راحت است، با این حال یک خطر امنیتی را معرفی می کند.
document.domain نگرانی های امنیتی در مورد document.domain منجر به تغییر در مشخصات شده است که به کاربران هشدار می دهد از استفاده از آن خودداری کنند . بحث فعلی با سایر فروشندگان مرورگر در همین راستا در حال حرکت است.
به عنوان مثال، وقتی دو صفحه document.domain را تنظیم میکنند، میتوانند وانمود کنند که یک منبع هستند. این به ویژه زمانی که این صفحات از یک سرویس میزبانی مشترک با زیر دامنه های مختلف استفاده می کنند بسیار مهم است. تنظیم document.domain دسترسی به سایر سایتهای میزبانی شده توسط همان سرویس را باز میکند، که دسترسی مهاجمان به سایتهای شما را آسانتر میکند. این امکان پذیر است زیرا document.domain قسمت شماره پورت دامنه را نادیده می گیرد.
برای کسب اطلاعات بیشتر در مورد مفاهیم امنیتی تنظیم document.domain ، صفحه «Document.domain» را در MDN بخوانید.
کروم قصد دارد document.domain در کروم 112 غیرقابل تغییر کند.
اگر وب سایت شما تحت تأثیر این تغییر قرار گیرد، Chrome در پانل DevTools Issues هشدار می دهد. به پرچم زرد در گوشه بالا سمت راست توجه کنید.
اگر نقطه پایانی گزارش دهی تنظیم کرده اید، گزارش های منسوخ شدن نیز برای شما ارسال می شود. درباره نحوه استفاده از Reporting API با خدمات جمعآوری گزارشهای موجود یا با ساخت راهحل داخلی خود، بیشتر بیاموزید.
میتوانید سایت خود را از طریق ممیزی API منسوخ شده LightHouse اجرا کنید تا همه APIهایی را که قرار است از Chrome حذف شوند، پیدا کنید.
در این زمان، شما سه گزینه برای جایگزینی document.domain برای وب سایت خود دارید.
postMessage() یا Channel Messaging API استفاده کنید در بیشتر موارد استفاده، postMessage() cross-origin یا Channel Messaging API میتواند جایگزین document.domain شود.
در مثال زیر:
-
https://parent.example.comازhttps://video.example.comدر iframe درخواست می کند تا با ارسال پیام از طریقpostMessage()DOM را دستکاری کند. -
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 | مستندات .
- مشخصات Origin بیان می کند که این ویژگی باید حذف شود.
- موزیلا غیرفعال کردن
document.domainرا بهطور پیشفرض ارزش نمونهسازی میداند . - WebKit نشان داد که آنها نسبت به منسوخ کردن تنظیمکننده
document.domainنسبتاً مثبت هستند .
-
Document.domain- Web API | MDN - Origin Isolation و Deprecating
document.domain - در حال منسوخ شدن
document.domain. · شماره 564 · w3ctag/design-reviews
عکس برایدون اندرسون در Unsplash