بارگیری منابع متقاطع بدون سرصفحه CORP با استفاده از COEP: credentialless

منابع متقاطع ارائه شده توسط شخص ثالث اغلب شامل هدرهای CORP کافی نیستند. اگر می‌توان آن‌ها را بدون اعتبار درخواست کرد، اکنون می‌توانید با علامت‌گذاری آن‌ها به‌عنوان چنین، جداسازی مبدا متقاطع را فعال کنید.

ما ارزش جدید Cross-Origin Embedder Policy (COEP) را credentialless ارسال کرده‌ایم که به مرورگر اجازه می‌دهد با ارسال درخواستی بدون اعتبار، مانند کوکی، منابع متقاطع را که از خط‌مشی منابع متقاطع (CORP) استفاده نمی‌کنند، بارگیری کند. . این به توسعه‌دهندگان کمک می‌کند تا راحت‌تر از جداسازی متقاطع استفاده کنند.

چرا ما به جداسازی متقاطع نیاز داریم؟

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

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

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

در حالت ایزوله از مبدأ متقاطع، همه منابع متقاطع باید با CORS ارائه شوند یا یک سرصفحه Cross-Origin-Resource-Policy برای بارگذاری تنظیم کنید.

چالش‌های فعال کردن جداسازی با مبدا متقابل

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

این منابع متقاطع معمولاً توسط اشخاص ثالثی ارائه می شوند که ممکن است اضافه کردن هدرهای لازم برای آنها آسان نباشد.

اما اگر بدانیم منبع به اندازه کافی ایمن است که بارگذاری شود چه؟ در واقع، تنها منابعی که در معرض خطر هستند منابعی هستند که با اعتبار درخواست شده اند، زیرا به طور بالقوه حاوی اطلاعات حساسی هستند که مهاجم نمی تواند به تنهایی بارگذاری کند. این بدان معناست که منابعی که می‌توان بدون اعتبار درخواست کرد، در دسترس عموم هستند و بارگیری آنها امن است.

credentialless برای نجات

اینجاست که COEP: credentialless وارد می شود. credentialless یک مقدار جدید برای سربرگ Cross-Origin-Embedder-Policy است. مشابه require-corp ، می‌تواند جداسازی با مبدا متقاطع را فعال کند، اما به جای نیاز به یک سرصفحه CORP:cross-origin برای درخواست‌های no-cors-origin، آنها بدون اعتبار (مثلاً کوکی‌ها) ارسال می‌شوند.

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

Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin

این بدان معناست که سرور متقاطع درخواستی نمی تواند با یک منبع حساس پاسخ دهد و درخواست کننده همیشه می تواند فرض کند که پاسخ فقط حاوی اطلاعات در دسترس عموم است.

این همچنین با طرح مرورگرها برای حذف تدریجی کوکی‌های شخص ثالث همسو است.

نسخه ی نمایشی

می توانید گزینه های مختلف هدر را در این نسخه آزمایشی امتحان کنید: https://cross-origin-isolation.glitch.me

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

آیا می توانم در محیط credentialless درخواستی ارسال کنم؟

قطعاً، به قیمت تغییر حالت درخواست برای نیاز به بررسی CORS در پاسخ. برای برچسب‌های HTML مانند <audio> ، <img> ، <link> ، <script> ، و <video> ، فقط crossorigin="use-credentials" را صریحاً اضافه کنید تا مرورگر را برای ارسال درخواست‌های اعتبارسنجی مطلع کنید.

برای مثال، حتی اگر سندی در https://www.example.com دارای سرصفحه Cross-Origin-Embedder-Policy: credentialless باشد، <img src="https://images.example.com/avatar.png" crossorigin="use-credentials"> یک درخواست اعتبارنامه ارسال می کند.

برای fetch() API، request.mode = 'cors' می تواند استفاده شود.

ارائه COEP: credentialless ، چگونه COEP: require-corp هنوز برای وب سایت من مفید است؟

COEP: require-corp در صورت نیاز به کوکی‌ها برای برخی از منابع فرعی متقاطع، نیازی نیست که به طور دستی حالت درخواست را به CORS تغییر دهید.

آیا می توانم iframe های متقاطع را بدون سرصفحه های خاص تحت یک محیط credentialless بارگیری کنم؟

خیر. بارگیری iframe های متقاطع تحت یک محیط credentialless همچنان به همان شرایطی نیاز دارد که require-corp . اسناد iframe باید با دو سربرگ ارائه شوند:

  • Cross-Origin-Embedder-Policy: credentialless (یا require-corp )
  • Cross-Origin-Resource-Policy: cross-origin

خبر خوب این است که یک بحث مداوم در مورد مجاز کردن بارگیری iframe های متقاطع بدون آن هدرها با دادن iframes crossorigin="anonymous" وجود دارد. این اجازه می دهد iframe های متقاطع بدون هدر اما بدون اعتبار بارگیری شوند.

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

بعدش چی میاد

دو به روز رسانی اضافی برای کاهش سایر چالش های مربوط به جداسازی مبدا متقابل وجود دارد:

کسانی که برای نسخه آزمایشی اصلی Chrome برای تمدید تغییر SharedArrayBuffer به دلیل موانع بالا ثبت نام کرده‌اند، ممکن است از خود بپرسند که چه زمانی خاتمه می‌یابد. در ابتدا اعلام کردیم که در کروم 96 خاتمه خواهد یافت، اما تصمیم گرفتیم این را به کروم 106 موکول کنیم.

منابع

عکس مارتین آدامز در Unsplash