Iframe credentialless: iframe ها را به راحتی در محیط های COEP جاسازی کنید

آرتور سونزوگنی
Arthur Sonzogni

توسعه دهندگانی که از COEP استفاده می کنند اکنون می توانند iframe های شخص ثالثی را که خودشان از COEP استفاده نمی کنند جاسازی کنند.

Iframe credentialless به‌طور پیش‌فرض از Chrome نسخه 110 فعال است. شایع‌ترین شکایت‌هایی را که توسعه‌دهندگانی که با Cross-Origin-Embedder-Policy (COEP) کار می‌کنند، حل می‌کند: جاسازی iframe‌های شخص ثالث که COEP را تنظیم نمی‌کنند.

چرا ما به COEP نیاز داریم

برخی از APIهای وب خطر حملات کانال جانبی مانند Spectre را افزایش می دهند. برای کاهش این خطر، مرورگرها یک محیط ایزوله مبتنی بر انتخاب به نام انزوا با مبدا متقابل را ارائه می‌دهند که به استقرار COEP نیاز دارد. جداسازی با مبدا متقابل به وب‌سایت‌ها اجازه می‌دهد از ویژگی‌های ممتاز از جمله SharedArrayBuffer ، performance.measureUserAgentSpecificMemory() و تایمرهای با دقت بالا با وضوح بهتر استفاده کنند.

برای فعال کردن جداسازی مبدا متقاطع، وب‌سایت‌ها باید سرصفحه‌های HTTP زیر را ارسال کنند:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP:credentialless همچنین می تواند به عنوان جایگزینی برای require-corp استفاده شود. برای جزئیات بیشتر به مستندات مراجعه کنید.

چالش‌ها با فعال کردن COEP

در حالی که انزوا با مبدا متقاطع امنیت بیشتری را برای صفحات وب به ارمغان می آورد و توانایی فعال کردن ویژگی های قدرتمند را دارد، استقرار COEP می تواند دشوار باشد. یکی از بزرگترین چالش ها این است که همه iframe های متقاطع باید از COEP و CORP استفاده کنند. آی فریم های بدون آن هدرها توسط مرورگر بارگیری نمی شوند.

بدون اعتبار اگر فریم را نجات دهید

ما <iframe credentialless> را برای کمک به جاسازی iframe های شخص ثالثی که COEP را تنظیم نمی کنند، معرفی می کنیم. با افزودن ویژگی credentialless به عنصر <iframe> ، iframe از یک زمینه متفاوت و خالی بارگیری می شود. به ویژه، بدون کوکی بارگیری می شود. این اجازه می دهد تا محدودیت COEP را حذف کنید.

مثال:

<iframe credentialless src="https://example.com">

این iframe در یک زمینه زودگذر جدید ایجاد شده است و به هیچ یک از کوکی های مرتبط با وب سایت سطح بالا دسترسی ندارد. در عوض، با یک ظرف کوکی خالی شروع می شود. به همین ترتیب، API های ذخیره سازی مانند LocalStorage ، CacheStorage ، IndexedDB ، و غیره، داده ها را در پارتیشن زودگذر جدید بارگیری و ذخیره می کنند. محدوده پارتیشن هم به سند سطح بالای فعلی و هم مبدا iframe است. پس از بارگیری سند سطح بالا، تمام این فضای ذخیره سازی پاک می شود.

iframe های بدون اعتبار مشمول قوانین تعبیه COEP نیستند. آنها هنوز امن هستند: چون هر بار از یک زمینه خالی جدید بارگیری می شوند، نباید حاوی داده های شخصی شده باشند، چیزی که مهاجمان به دنبال آن هستند. اگر یک iframe فقط حاوی داده های عمومی باشد، برای یک مهاجم ارزشی ندارد.

نسخه ی نمایشی

می توانید نسخه ی نمایشی یک iframe بدون اعتبار را بررسی کنید.

سوالات متداول

آیا این ویژگی توسط سایر مرورگرها پذیرفته می شود؟

آیا یک <iframe> داخل یک <iframe credentialless> بدون اعتبار است؟

بله. ارثی است. هنگامی که یک iframe بدون اعتبار باشد، این امر برای همه iframe ها در کل زیردرخت حتی بدون ویژگی credentialless اعمال می شود.

آیا پاپ آپ ها از <iframe credentialless> نیز بدون اعتبار ایجاد می شوند؟

پاپ‌آپ‌ها طوری باز می‌شوند که گویی noopener تنظیم شده است. آنها در یک بافت سطح بالای منظم جدید ایجاد می شوند و بدون اعتبار نیستند. آنها نمی توانند با iframe بدون اعتبار ارتباط برقرار کنند.

چگونه تشخیص دهیم که سند در یک iframe بدون اعتبار جاسازی شده است؟

window.credentialless در داخل iframe بدون credentialless درست است و در غیر این صورت false است. مقدار آن در یک مرورگر وب که <iframe credentialless> پشتیبانی نمی کند، undefined است.

منابع