از 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، مشکلی را بایگانی کنید.