از Chrome 135، میتوانید از مقدار sandbox جدید استفاده کنید: allow-same-site-none-cookies . وقتی این خطمشی مشخص شده باشد و کوکیهای شخص ثالث در دسترس نباشد، مرورگر فقط کوکیهای SameSite=None را در درخواستهای HTTP ارسال میکند که از iframeهای سندباکس شخص اول نشات میگیرند.
iframe sandboxed چیست؟
آی فریم های Sandboxed آیفریم هایی با محدودیت های خاص هستند. آنها به عنوان منشأ null و مات تلقی می شوند. بهطور پیشفرض، ویژگیهای بالقوه مضر مانند اسکریپتها، فرمها، و پنجرههای بازشو در iframe های جعبه ایمنی در دسترس نیستند.
از ویژگی sandbox برای مشخص کردن ویژگیهایی که یک iframe sandboxed باید در دسترس باشد استفاده کنید. به عنوان مثال:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
Sandboxing همیشه ایده خوبی است، زیرا به شما امکان میدهد مجوزهای مورد نیاز برای بارگیری موفقیتآمیز محتوای جاسازی شده را بهطور دقیق انتخاب کنید، در حالی که دامنه سوءاستفادههای بالقوه را محدود میکند.
چرا به این سیاست جدید نیاز داریم؟
قبل از معرفی allow-same-site-none-cookies ، میتوانید دو سناریو کوکی را در یک iframe sandbox پیکربندی کنید:
- بدون علامت
allow-same-originدر ویژگیsandbox، مبدا iframe به صورتnullدر نظر گرفته میشود و همه درخواستها از صفحه sandbox شده به صورت متقاطع سایت میشوند. در این صورت فقط کوکی هایی باSameSite=Noneدر درخواست ها گنجانده می شوند. - با توکن
allow-same-originدر ویژگیsandbox، درخواستها به عنوان منشا واقعی iframe تلقی میشوند و اجازه میدهند کوکیهایی با هر مقدارSameSiteارسال شوند.
وقتی کوکیهای شخص ثالث مسدود شدهاند، یک iframe sandbox فاقد allow-same-origin نمیتواند هیچ کوکی ارسال کند، مگر اینکه allow-same-site-none-cookies فعال کنید.
یک iframe با allow-same-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های جعبه ایمنی مجاز کنند. به عنوان مثال، iframe sandboxed practice-coding.example/coding-interview ممکن است به کوکیهای 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"/>
همچنین میتوانید با سربرگ HTTP Content-Security-Policy یک خطمشی allow-same-site-none-cookies تنظیم کنید:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
خودتان آن را با نسخه ی نمایشی ما امتحان کنید.
مشارکت کنید و بازخورد را به اشتراک بگذارید
برای به اشتراک گذاشتن بازخورد یا گزارش مشکلات، یا پیوستن به بحث در GitHub، مشکلی را بایگانی کنید.