از کروم ۱۳۵، میتوانید از مقدار جدید sandbox استفاده کنید: allow-same-site-none-cookies . وقتی این خطمشی مشخص شده باشد و کوکیهای شخص ثالث در دسترس نباشند، مرورگر فقط کوکیهای SameSite=None را در درخواستهای HTTP که از iframeهای sandboxed شخص ثالث سرچشمه میگیرند، ارسال میکند.
آیفریم سندباکس شده چیست؟
آیفریمهای سندباکس، آیفریمهایی با محدودیتهای خاص هستند. آنها به عنوان یک مبدأ null و غیرشفاف در نظر گرفته میشوند. به طور پیشفرض، ویژگیهای بالقوه مضر مانند اسکریپتها، فرمها و پنجرههای بازشو در آیفریمهای سندباکس در دسترس نیستند.
از ویژگی sandbox برای مشخص کردن ویژگیهایی که یک iframe در حالت sandbox باید داشته باشد، استفاده کنید. برای مثال:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
استفاده از سندباکس همیشه ایده خوبی است، زیرا به شما امکان میدهد مجوزهای مورد نیاز برای بارگذاری موفقیتآمیز محتوای جاسازیشده را بهطور جزئی انتخاب کنید، در حالی که دامنه سوءاستفادههای احتمالی را محدود میکنید.
چرا به این سیاست جدید نیاز داریم؟
قبل از معرفی allow-same-site-none-cookies ، میتوانستید دو سناریوی کوکی را درون یک iframe سندباکس پیکربندی کنید:
- بدون توکن
allow-same-originدر ویژگیsandbox، مبدا iframe به صورتnullسریالی میشود و باعث میشود همه درخواستها از صفحه sandbox شده، cross-site شوند. در این حالت، فقط کوکیهایی باSameSite=Noneدر درخواستها گنجانده میشوند. - با استفاده از توکن
allow-same-originدر ویژگیsandbox، درخواستها طوری در نظر گرفته میشوند که انگار از مبدا واقعی iframe ارسال شدهاند و به کوکیهایی با هر مقدارSameSiteاجازه ارسال میدهند.
با مسدود شدن کوکیهای شخص ثالث، یک iframe در محیط سندباکس که allow-same-origin ندارد، قادر به ارسال هیچ کوکیای نیست، مگر اینکه allow-same-site-none-cookies فعال کنید.
یک iframe با allow-same-origin همچنان میتواند کوکیها را در درخواستهای same-site وارد کند، حتی زمانی که کوکیهای شخص ثالث مسدود شده باشند. با این حال، کل کوکیهای origin در معرض فعالیتهای وب بالقوه مخرب قرار میگیرند.
با allow-same-site-none-cookies ، یک iframe میتواند کوکیهای SameSite=None را در درخواستهای HTTP ارسال کند، در حالی که کوکیهای SameSite=Strict و SameSite=Lax که به طور بالقوه حساس هستند، شامل نمیشوند.
مثال عملی
سایتی practice-coding.example را در نظر بگیرید که به کاربران اجازه میدهد پروژههای کدنویسی سفارشی ایجاد و اجرا کنند و کد سایر کاربران را جاسازی کنند. برای استفاده از این سرویس، کاربران باید وارد سیستم شوند و در نتیجه یک کوکی نشست SameSite=Strict تنظیم میشود.
کاربر دیگری پروژهای practice-coding.example/cookie-theft ایجاد میکند که سایر کاربران میتوانند بهطور ناخودآگاه آن را بهعنوان یک iframe در پروژههای خود جاسازی کنند. اگر کوکیهای SameSite=Strict و SameSite=Lax در معرض iframe practice-coding.example/cookie-theft قرار گیرند، کاربر مخرب میتواند کوکیهای جلسه کاربران دیگر را بدزدد.
در این سناریو، صاحب سایت ممکن است بخواهد دسترسی به کوکیهای بالقوه حساس را محدود کند. با این حال، ممکن است همچنان بخواهد کوکیهای SameSite=None را در iframeهای sandboxed مجاز بداند. برای مثال، practice-coding.example/coding-interview iframe sandboxed ممکن است کوکیهای SameSite=None را لازم داشته باشد تا به داوطلبان اجازه دهد کد خود را دوباره بررسی کنند. allow-same-site-none-cookies از افشای کل کوکیها جلوگیری میکند در حالی که به طور انتخابی کوکیهای SameSite=None لازم را مجاز میداند.
چگونه میتوانم فقط SameSite=None در فریمهای سندباکس شدهی شخص ثالث مجاز کنم؟
برای فعال کردن کوکیهای SameSite=None در درخواستهای صفحات سندباکس شدهی شخص ثالث، توکن allow-same-site-none-cookies در تگ iframe مشخص کنید. برای مثال:
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
همچنین میتوانید یک سیاست allow-same-site-none-cookies با یک هدر HTTP از Content-Security-Policy تنظیم کنید:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
خودتان با نسخه آزمایشی ما امتحان کنید.
مشارکت کنید و بازخورد خود را به اشتراک بگذارید
برای به اشتراک گذاشتن بازخورد یا گزارش مشکلات، یک مشکل ثبت کنید یا به بحث در GitHub بپیوندید.