منابع متقاطع ارائه شده توسط شخص ثالث اغلب شامل هدرهای 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 های متقاطع بدون هدر اما بدون اعتبار بارگیری شوند.
آیا این ویژگی توسط سایر مرورگرها پذیرفته می شود؟
- مشکل ردیابی فایرفاکس
- Webkit درخواست موقعیت: بدون سیگنال
- درخواست W3C TAG برای موقعیت: در انتظار
بعدش چی میاد
دو به روز رسانی اضافی برای کاهش سایر چالش های مربوط به جداسازی مبدا متقابل وجود دارد:
کسانی که برای نسخه آزمایشی اصلی Chrome برای تمدید تغییر SharedArrayBuffer به دلیل موانع بالا ثبت نام کردهاند، ممکن است از خود بپرسند که چه زمانی خاتمه مییابد. در ابتدا اعلام کردیم که در کروم 96 خاتمه خواهد یافت، اما تصمیم گرفتیم این را به کروم 106 موکول کنیم.
منابع
- با استفاده از COOP و COEP وبسایت خود را «منشأ متقاطع ایزوله» کنید
- چرا برای ویژگیهای قدرتمند به «منشا متقاطع جدا شده» نیاز دارید
- راهنمای فعال کردن جداسازی با مبدا متقابل
- بهروزرسانیهای SharedArrayBuffer در Android Chrome 88 و Desktop Chrome 92
عکس مارتین آدامز در Unsplash