هنگام تعامل با پنجرههای بازشو، از ایزولهسازی بین مبدا و محافظت در برابر نشتهای بین سایتی بهرهمند شوید.
یک مقدار جدید برای Cross-Origin Opener Policy (COOP) در دسترس است: restrict-properties . این مقدار مزایای امنیتی را به همراه دارد و پذیرش جداسازی بین مبدا را آسانتر میکند، در حالی که به سایت شما اجازه میدهد با پنجرههای بازشو شخص ثالث برای پرداختها، احراز هویت یا سایر موارد استفاده تعامل داشته باشد.
برای شروع آزمایش با restrict-properties ، در نسخه آزمایشی origin که از کروم ۱۱۶ شروع میشود، شرکت کنید.
چرا restrict-properties استفاده کنیم؟
restrict-properties دو مورد استفاده اصلی دارد:
- جلوگیری از نشتیهای بین سایتی بدون شکستگی.
- سایت خود را بین مبداها ایزوله کنید.
جلوگیری از نشتیهای بین سایتی بدون شکستگی
به طور پیشفرض، هر وبسایتی میتواند برنامه شما را در یک پنجره بازشو باز کند و به آن ارجاع دهد.
یک وبسایت مخرب میتواند از این موضوع به نفع خود برای انجام حملاتی مانند نشت اطلاعات بین سایتی استفاده کند. برای کاهش این خطر، میتوانید از هدر Cross-Origin-Opener-Policy (COOP) استفاده کنید.
تاکنون، گزینههای شما برای Cross-Origin-Opener-Policy محدود بود. شما میتوانستید یکی از این دو کار را انجام دهید:
- تنظیم
same-origin,که تمام تعاملات بین مبدا و مبدا با پاپآپها را مسدود میکند. - تنظیم
same-origin-allow-popupsکه تمام تعاملات بین مبدا و مقصد که سایت شما را در یک پنجره بازشو باز میکنند، مسدود میکند. -
unsafe-noneرا تنظیم کنید، که تمام تعاملات بین مبدا و مقصد با پاپآپها را مجاز میکند.
این امر باعث میشد وبسایتهایی که نیاز به باز شدن در یک پنجره پاپآپ و تعامل با بازکننده خود داشتند، نتوانند COOP را اجرا کنند. این امر موارد استفاده کلیدی مانند ورود یکپارچه و پرداختها را در برابر نشتهای بین سایتی محافظت نشده باقی میگذاشت.
Cross-Origin-Opener-Policy: restrict-properties این مشکل را حل میکند.
با restrict-properties ، ویژگیهایی که میتوانند برای شمارش فریم و سایر حملات نشت بین سایتی استفاده شوند، در دسترس نیستند - اما ارتباط اولیه بین پنجرهها از طریق postMessage و closed مجاز است.
این امر امنیت سایت را بهبود میبخشد و در عین حال موارد استفاده کلیدی را حفظ میکند. برای مثال:
- اگر خدماتی را در یک پنجره بازشو ارائه میدهید، تنظیم
Cross-Origin-Opener-Policy: restrict-propertiesشما را در برابر طیف وسیعی از حملات نشت اطلاعات بین سایتی محافظت میکند. شما همچنان میتوانید تمام صفحاتی را که قبلاً میتوانستید باز کنید، باز کنید. - اگر نیاز به دسترسی به یک پنجره پاپآپ بینمنبعی دارید، تنظیم
Cross-Origin-Opener-Policy: restrict-propertiesبه طور مشابه سایت شما را از شمارش iframe محافظت میکند. شما قادر خواهید بود همان مجموعه پاپآپهایی را که امروز میتوانید باز کنید، باز کنید. - اگر هم opener و هم openee هدر را تنظیم کنند و صفحات cross-origin باشند، مشابه حالتی رفتار میکند که یکی از آنها هدر را تنظیم کرده باشد. اگر same-origin باشند، دسترسی کامل اعطا میشود.
سایت خود را به صورت چند-مبدأی ایزوله کنید
چرا به جداسازی بین خاستگاهی نیاز داریم؟
برخی از APIهای وب، خطر حملات کانال جانبی مانند Spectre را افزایش میدهند. برای کاهش این خطر، مرورگرها یک محیط ایزوله مبتنی بر انتخاب به نام جداسازی متقابل مبدا ارائه میدهند. با حالت جداسازی متقابل مبدا، صفحه وب میتواند از ویژگیهای ممتازی از جمله SharedArrayBuffer ، performance.measureUserAgentSpecificMemory() و تایمرهای با دقت بالا با وضوح بهتر استفاده کند، در حالی که مبدا را از سایرین جدا میکند، مگر اینکه آنها انتخاب شده باشند.
تاکنون، برای استفاده از این APIها، باید Cross-Origin-Opener-Policy: same-origin تنظیم میکردید. با این حال، این کار هرگونه جریان پاپآپ بین مبدایی مورد نیاز شما، مانند ورود یکپارچه و پرداختها را مختل میکرد.
Cross-Origin-Opener-Policy: restrict-properties اکنون میتواند به جای Cross-Origin-Opener-Policy: same-origin برای فعال کردن جداسازی بین مبدا استفاده شود. به جای قطع رابطهی بازکننده، صرفاً آن را به زیرمجموعهی ارتباطی حداقلی window.postMessage() و window.closed محدود میکند.
شما میتوانید با دو هدر زیر، ایزولهسازی بین مبدا (cross-origin isolation) را فعال کنید:
Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: require-corp
یا
Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: credentialless
برای کسب اطلاعات بیشتر در مورد credentialless به بارگذاری منابع بین مبدا بدون هدرهای CORP با استفاده از COEP: credentialless مراجعه کنید.
نسخه آزمایشی
گزینههای مختلف هدر را در این نسخه آزمایشی ایزولاسیون بینمنبعی امتحان کنید.
با آزمایش مبدا آزمایش کنید
برای آزمایش با Cross-Origin-Opener-Policy: restrict-properties ، نسخه آزمایشی origin را انتخاب کنید.
پشتیبانی مرورگر
Cross-Origin-Opener-Policy: restrict-properties در حال حاضر فقط در کروم پشتیبانی میشود. مرورگرهای دیگر نیز به طور فعال در بحث استانداردسازی مشارکت دارند.
سوالات متداول
وبسایت من نیاز دارد که با پاپآپهای same-origin ارتباط برقرار کند، آیا باید COOP: restrict-properties برای فعال کردن ایزولهسازی بین مبدایی استفاده کنم؟
تنظیم COOP: restrict-properties هم در پنجره بازشو و هم در صفحه اصلی شما محدودیتی ایجاد نمیکند. تنظیم آن فقط در پنجره بازشو یا فقط در صفحه اصلی، از دسترسی به ویژگیهایی غیر از postMessage و closed در سراسر صفحه بازشو جلوگیری میکند، حتی اگر منشأ یکسانی داشته باشند.
آیا مجموعه ویژگیهای مجاز ثابت است؟
بر اساس بازخوردهای تاکنون، به نظر میرسد window.postMessage و window.closed برای اکثر گردشهای کاری کافی باشند، اما ما هنوز در حال بررسی باز کردن آن برای سایر ویژگیها هستیم. اگر موردی دارید که با استفاده از postMessage و closed قابل حل نیست، بازخورد خود را در تاپیک Intent to Experiment بگذارید.
منابع
- ایجاد وبسایت «ایزوله بینمنشأیی» با استفاده از COOP و COEP
- چرا برای ویژگیهای قدرتمند به «ایزولهسازی بین مبدا» نیاز دارید؟
- راهنمایی برای فعال کردن جداسازی بین مبدائی
- بهروزرسانیهای SharedArrayBuffer در کروم اندروید ۸۸ و کروم دسکتاپ ۹۲
- بارگذاری منابع بینمنبعی بدون هدرهای CORP با استفاده از
COEP: credentialless- توسعهدهندگان کروم - آزمایش مبدا iframe ناشناس: به راحتی iframe ها را در محیط های COEP جاسازی کنید - توسعه دهندگان Chrome