توسعه دهندگانی که از COEP استفاده می کنند اکنون می توانند iframe های شخص ثالثی را که خودشان از COEP استفاده نمی کنند جاسازی کنند.
چرا ما به COEP نیاز داریم
برخی از APIهای وب خطر حملات کانال جانبی مانند Spectre را افزایش می دهند. برای کاهش این خطر، مرورگرها یک محیط ایزوله مبتنی بر انتخاب به نام انزوا با مبدا متقابل را ارائه می دهند که از جمله موارد دیگر، مستلزم استقرار COEP است. این به وبسایتها اجازه میدهد از ویژگیهای ممتاز از جمله SharedArrayBuffer
، performance.measureUserAgentSpecificMemory()
و تایمرهای با دقت بالا با وضوح بهتر استفاده کنند.
برای فعال کردن جداسازی مبدا متقاطع، وبسایتها باید دو عنوان HTTP زیر را ارسال کنند:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
چالشها با فعال کردن COEP
در حالی که انزوا با مبدا متقاطع امنیت بیشتری را برای صفحات وب به ارمغان می آورد و توانایی فعال کردن ویژگی های قدرتمند را دارد، استقرار COEP می تواند دشوار باشد. یکی از بزرگترین چالشها این است که همه iframeهای متقاطع نیز باید COEP و CORP را مستقر کنند. Iframes بدون آن هدرها توسط مرورگر بارگیری نمیشوند.
iframe ها معمولاً توسط شخص ثالثی ارائه می شوند که ممکن است به کارگیری COEP برای آنها آسان نباشد.
iframe ناشناس برای نجات
اینجاست که iframe ناشناس وارد میشود. با افزودن ویژگی anonymous
به عنصر <iframe>
، iframe از یک پارتیشن ذخیرهسازی زودگذر متفاوت بارگیری میشود و دیگر مشمول محدودیتهای COEP نمیشود.
مثال:
<iframe anonymous src="https://example.com">
Iframe در یک زمینه زودگذر جدید ایجاد شده است و به هیچ یک از کوکی های مرتبط با وب سایت سطح بالا دسترسی ندارد. از یک ظرف خالی کوکی شروع می شود. به همین ترتیب، API های ذخیره سازی مانند LocalStorage
، CacheStorage
، IndexedDB
و غیره، داده ها را در پارتیشن زودگذر جدید بارگیری و ذخیره می کنند. محدوده پارتیشن به سند سطح بالای فعلی و مبدا iframe است. پس از بارگیری سند سطح بالا، فضای ذخیرهسازی پاک میشود.
iframe های ناشناس مشمول قوانین تعبیه COEP نیستند. این هنوز امن است، زیرا آنها هر بار از یک زمینه خالی جدید بارگیری می شوند. آنها بدون شخصی سازی اطلاعات آنها بارگیری می شوند. آنها فقط حاوی داده های عمومی هستند که برای یک مهاجم ارزشمند نیستند.
نسخه ی نمایشی
می توانید یک iframe ناشناس را در آدرس زیر بررسی کنید: https://anonymous-iframe.glitch.me/
برای آزمایش اولیه ثبت نام کنید
برای اطمینان از اینکه iframes های Anonymous به توسعه دهندگان کمک می کند تا جداسازی مبدا متقاطع را اتخاذ کنند، آنها را در Chrome از نسخه 106 تا 108 به عنوان نسخه آزمایشی اصلی در دسترس قرار می دهیم.
برای فعال کردن وب سایت خود برای استفاده از iframes های ناشناس برای آزمایش اصلی ثبت نام کنید:
- یک نشانه برای مبدا خود درخواست کنید .
- از توکن به یکی از روش های زیر استفاده کنید:
- در HTML شما:
html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
- در جاوا اسکریپت:
js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
- در سرصفحه های HTTP:
text Origin-Trial: TOKEN_GOES_HERE
- در HTML شما:
- یک iframe ناشناس به صفحه خود اضافه کنید:
html <iframe anonymous src="https://example.com">
اگر بازخوردی در مورد این ویژگی دارید، مشکلی را در مخزن GitHub ثبت کنید.
کارآزمایی منشا شخص ثالث
نسخه آزمایشی اصلی برای اسکریپت های شخص ثالث نیز در دسترس است. این بدان معنی است که می توان آن را با اسکریپت های تعبیه شده در صفحه فعال کرد.
Leran درباره نحوه ثبت نام برای آزمایش اولیه شخص ثالث بیشتر است.
سوالات متداول
آیا این ویژگی توسط سایر مرورگرها پذیرفته می شود؟
- درخواست موزیلا برای موقعیت: در انتظار
- Webkit درخواست موقعیت: بدون سیگنال
- W3C TAG درخواست برای موقعیت: راضی شد
آیا iframe های تو در تو در <iframe anonymous>
ناشناس هستند؟
بله. ارثی است. هنگامی که یک iframe ناشناس است، برای همه iframe ها در کل زیردرخت حتی بدون ویژگی anonymous
اعمال می شود.
آیا پاپ آپ های ایجاد شده از <iframe anonymous>
نیز ناشناس هستند؟
پاپآپها طوری باز میشوند که گویی noopener
تنظیم شده است. آنها از یک بافت سطح بالای منظم جدید ایجاد شده اند و ناشناس نیستند. آنها نمی توانند با iframe ناشناس ارتباط برقرار کنند.
منابع
- با استفاده از COOP و COEP وبسایت خود را "مبدأ متقاطع ایزوله" کنید
- چرا برای ویژگیهای قدرتمند به «منشا متقاطع جدا شده» نیاز دارید
- راهنمای فعال کردن جداسازی با مبدا متقابل
- بهروزرسانیهای SharedArrayBuffer در Android Chrome 88 و Desktop Chrome 92
- بارگیری منابع متقاطع بدون سرصفحه CORP با استفاده از
COEP: credentialless