کوکی های SameSite توضیح داده شده است

Browser Support

  • کروم: ۵۱.
  • لبه: ۱۶.
  • فایرفاکس: ۶۰.
  • سافاری: ۱۳.

هر کوکی شامل یک جفت کلید-مقدار به همراه تعدادی ویژگی است که زمان و مکان استفاده از آن کوکی را کنترل می‌کنند.

معرفی ویژگی SameSite (تعریف شده در RFC6265bis ) به شما امکان می‌دهد تا مشخص کنید که آیا کوکی شما به یک زمینه شخص اول یا همان سایت محدود شده است. درک دقیق معنای «سایت» در اینجا مفید است. سایت ترکیبی از پسوند دامنه و بخشی از دامنه درست قبل از آن است. به عنوان مثال، دامنه www.web.dev بخشی از سایت web.dev است.

اصطلاح کلیدی: اگر کاربر در www.web.dev باشد و تصویری را از static.web.dev درخواست کند، این یک درخواست same-site است.

فهرست پسوندهای عمومی، صفحاتی را که در یک سایت قرار دارند، تعریف می‌کند. این فهرست فقط به دامنه‌های سطح بالا مانند .com بستگی ندارد، بلکه می‌تواند شامل سرویس‌هایی مانند github.io نیز باشد. این امر باعث می‌شود your-project.github.io و my-project.github.io به عنوان سایت‌های جداگانه در نظر گرفته شوند.

اصطلاح کلیدی: اگر کاربر در your-project.github.io باشد و تصویری را از my-project.github.io درخواست کند، این یک درخواست بین سایتی است.

از ویژگی SameSite برای اعلام استفاده از کوکی استفاده کنید

ویژگی SameSite در یک کوکی، سه روش مختلف برای کنترل این رفتار ارائه می‌دهد. می‌توانید این ویژگی را مشخص نکنید، یا می‌توانید Strict یا Lax برای محدود کردن کوکی به درخواست‌های same-site استفاده کنید.

اگر SameSite روی Strict تنظیم کنید، کوکی شما فقط می‌تواند در یک زمینه شخص ثالث ارسال شود؛ یعنی اگر سایت کوکی با سایتی که در نوار آدرس مرورگر نشان داده شده است مطابقت داشته باشد. بنابراین، اگر کوکی promo_shown به صورت زیر تنظیم شود:

Set-Cookie: promo_shown=1; SameSite=Strict

وقتی کاربر در سایت شما است، کوکی مطابق انتظار همراه با درخواست ارسال می‌شود. با این حال، اگر کاربر از طریق لینکی از سایت دیگری وارد سایت شما شود، کوکی در آن درخواست اولیه ارسال نمی‌شود. این برای کوکی‌های مربوط به ویژگی‌هایی که همیشه پشت یک پیمایش اولیه هستند، مانند تغییر رمز عبور یا خرید، خوب است، اما برای کوکی‌ای مانند promo_shown بیش از حد محدودکننده است. اگر خواننده شما لینک را وارد سایت کند، می‌خواهد کوکی ارسال شود تا تنظیمات مورد نظرش اعمال شود.

SameSite=Lax به مرورگر اجازه می‌دهد کوکی را با این پیمایش‌های سطح بالا ارسال کند. برای مثال، اگر سایت دیگری به محتوای سایت شما ارجاع دهد، در این مورد با استفاده از عکس گربه شما و ارائه لینک به مقاله شما به شرح زیر:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

با یک کوکی که به صورت زیر روی Lax تنظیم شده است:

Set-Cookie: promo_shown=1; SameSite=Lax

وقتی مرورگر فایل amazing-cat.png را برای وبلاگ شخص دیگری درخواست می‌کند، سایت شما کوکی را ارسال نمی‌کند. با این حال، وقتی خواننده لینک cat.html را در سایت شما دنبال می‌کند، آن درخواست شامل کوکی می‌شود.

ما توصیه می‌کنیم از SameSite به این روش استفاده کنید، کوکی‌هایی که بر نمایش وب‌سایت تأثیر می‌گذارند را روی Lax و کوکی‌های مربوط به اقدامات کاربر را روی Strict تنظیم کنید.

همچنین می‌توانید SameSite روی None تنظیم کنید تا نشان دهید که می‌خواهید کوکی در همه زمینه‌ها ارسال شود. اگر خدماتی ارائه می‌دهید که سایت‌های دیگر از آن استفاده می‌کنند، مانند ابزارک‌ها، محتوای جاسازی‌شده، برنامه‌های وابسته، تبلیغات یا ورود به سیستم در چندین سایت، از None استفاده کنید تا مطمئن شوید که قصد شما واضح است.

سه کوکی با برچسب‌های None، Lax یا Strict بسته به زمینه‌شان
زمینه یک کوکی را به طور صریح به صورت None ، Lax یا Strict علامت‌گذاری کنید.

تغییرات در رفتار پیش‌فرض بدون SameSite

Browser Support

  • کروم: ۸۰.
  • لبه: ۸۶.
  • فایرفاکس: پشت یک پرچم.
  • سافاری: پشتیبانی نمی‌شود.

ویژگی SameSite به طور گسترده پشتیبانی می‌شود، اما به طور گسترده مورد استفاده قرار نگرفته است. در گذشته، تنظیم کوکی‌ها بدون SameSite به طور پیش‌فرض آنها را در همه زمینه‌ها ارسال می‌کرد، که کاربران را در برابر CSRF و نشت اطلاعات غیرعمدی آسیب‌پذیر می‌کرد. برای تشویق توسعه‌دهندگان به بیان قصد خود و ارائه تجربه‌ای امن‌تر به کاربران، پیشنهاد IETF، کوکی‌های بهتر تدریجی ، دو تغییر کلیدی را ارائه می‌دهد:

  • کوکی‌های بدون ویژگی SameSite به صورت SameSite=Lax در نظر گرفته می‌شوند.
  • کوکی‌هایی که SameSite=None دارند، باید Secure نیز مشخص کنند، به این معنی که به یک زمینه امن نیاز دارند.

هر دوی این تغییرات با مرورگرهایی که نسخه قبلی ویژگی SameSite را به درستی پیاده‌سازی کرده‌اند، و همچنین مرورگرهایی که از نسخه‌های قبلی SameSite پشتیبانی نمی‌کنند، سازگار با نسخه‌های قبلی هستند. هدف از این تغییرات کاهش وابستگی توسعه‌دهندگان به رفتار پیش‌فرض مرورگرها با مشخص کردن رفتار کوکی و کاربرد مورد نظر است. هر کلاینتی که SameSite=None را تشخیص نمی‌دهد، باید آن را نادیده بگیرد.

SameSite=Lax به طور پیش‌فرض

اگر کوکی را بدون مشخص کردن ویژگی SameSite آن ارسال کنید، مرورگر با آن کوکی طوری رفتار می‌کند که انگار روی SameSite=Lax تنظیم شده است. ما همچنان توصیه می‌کنیم SameSite=Lax را به طور صریح تنظیم کنید تا تجربه کاربری شما در مرورگرهای مختلف سازگارتر باشد.

SameSite=None نباید امن باشند

وقتی کوکی‌های بین‌سایتی را با استفاده از SameSite=None ایجاد می‌کنید، باید آنها را روی Secure نیز تنظیم کنید تا مرورگر آنها را بپذیرد:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

شما می‌توانید این رفتار را در کروم ۷۶ با فعال کردن about://flags/#cookies-without-same-site-must-be-secure و در فایرفاکس ۶۹ با تنظیم network.cookie.sameSite.noneRequiresSecure در about:config آزمایش کنید.

ما همچنین توصیه می‌کنیم کوکی‌های موجود را در اسرع وقت به Secure به‌روزرسانی کنید. اگر به سرویس‌هایی متکی هستید که محتوای شخص ثالث را در سایت شما ارائه می‌دهند، مطمئن شوید که ارائه‌دهنده خدمات شما کوکی‌های خود را به‌روزرسانی می‌کند و هرگونه قطعه کد یا وابستگی را در سایت خود به‌روزرسانی کنید تا مطمئن شوید که از رفتار جدید استفاده می‌کند.

برای جزئیات بیشتر در مورد به‌روزرسانی کوکی‌هایتان برای مدیریت موفقیت‌آمیز این تغییرات در SameSite=None و تفاوت‌های رفتار مرورگر، به مقاله بعدی، دستور العمل‌های کوکی SameSite ، مراجعه کنید.

از مشارکت‌ها و بازخوردهای لیلی چن، مالت یوبل، مایک وست، راب دادسون، تام اشتاینر و ویوک سخار متشکرم.

تصویر قهرمان کوکی توسط Pille-Riin Priske در Unsplash