Browser Support
Cada cookie contiene un par clave-valor junto con una serie de atributos que controlan cuándo y dónde se usa esa cookie.
La introducción del atributo SameSite (definido en RFC6265bis) te permite declarar si tu cookie está restringida a un contexto propio o del mismo sitio. Es útil comprender exactamente qué significa "sitio" en este contexto.
El sitio es la combinación del sufijo del dominio y la parte del dominio que se encuentra justo
antes de él. Por ejemplo, el dominio www.web.dev forma parte del sitio web.dev.
Término clave: Si el usuario está en www.web.dev y solicita una imagen de static.web.dev, se trata de una solicitud del mismo sitio.
La lista de sufijos públicos define qué páginas se consideran parte del mismo sitio. No solo depende de dominios de nivel superior, como .com,
sino que también puede incluir servicios como github.io. Esto permite que your-project.github.io y my-project.github.io se cuenten como sitios independientes.
Término clave: Si el usuario está en your-project.github.io y solicita una imagen de my-project.github.io, se trata de una solicitud entre sitios.
Usa el atributo SameSite para declarar el uso de cookies
El atributo SameSite de una cookie proporciona tres formas diferentes de controlar este comportamiento. Puedes optar por no especificar el atributo o usar
Strict o Lax para limitar la cookie a las solicitudes del mismo sitio.
Si estableces SameSite en Strict, tu cookie solo se puede enviar en un
contexto propio, es decir, si el sitio de la cookie coincide con el sitio que se muestra
en la barra de direcciones del navegador. Por lo tanto, si la cookie promo_shown se configura de la siguiente manera:
Set-Cookie: promo_shown=1; SameSite=Strict
Cuando el usuario está en tu sitio, la cookie se envía con la solicitud como se espera.
Sin embargo, si el usuario sigue un vínculo a tu sitio desde otro, la cookie
no se envía en esa solicitud inicial.
Esto es bueno para las cookies relacionadas con funciones que siempre están detrás de una navegación
inicial, como cambiar una contraseña o realizar una compra, pero es demasiado
restrictivo para una cookie como promo_shown. Si el lector sigue el vínculo
al sitio, quiere que se envíe la cookie para que se pueda aplicar su preferencia.
SameSite=Lax permite que el navegador envíe la cookie con estas navegaciones de nivel superior. Por ejemplo, si otro sitio hace referencia al contenido de tu sitio, en
este caso, usando la foto de tu gato y proporcionando un vínculo a tu artículo de la siguiente manera:
<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>
Con una cookie configurada en Lax de la siguiente manera:
Set-Cookie: promo_shown=1; SameSite=Lax
Cuando el navegador solicita amazing-cat.png para el blog de la otra persona, tu sitio no envía la cookie. Sin embargo, cuando el lector sigue el vínculo a cat.html en tu sitio, esa solicitud incluye la cookie.
Recomendamos usar SameSite de esta manera, configurando las cookies que afectan la visualización del sitio web en Lax y las cookies relacionadas con las acciones del usuario en Strict.
También puedes establecer SameSite en None para indicar que quieres que la cookie se envíe en todos los contextos. Si proporcionas un servicio que consumen otros sitios, como widgets, contenido incorporado, programas de afiliados, publicidad o acceso en varios sitios, usa None para asegurarte de que tu intención sea clara.
None, Lax o Strict.
Cambios en el comportamiento predeterminado sin SameSite
Browser Support
El atributo SameSite es ampliamente compatible, pero no se ha adoptado de forma generalizada.
En el pasado, cuando se configuraban cookies sin SameSite, se enviaban de forma predeterminada en todos los contextos, lo que dejaba a los usuarios vulnerables a CSRF y a la filtración involuntaria de información. Para alentar a los desarrolladores a que indiquen su intención
y brindarles a los usuarios una experiencia más segura, la propuesta de la IETF,
Incrementally Better Cookies,
establece dos cambios clave:
- Las cookies que no tienen un atributo
SameSitese consideranSameSite=Lax. - Las cookies con
SameSite=Nonetambién deben especificarSecure, lo que significa que requieren un contexto seguro.
Ambos cambios son retrocompatibles con los navegadores que implementaron correctamente
la versión anterior del atributo SameSite, así como
con los navegadores que no admiten versiones anteriores de SameSite. Su objetivo es
reducir la dependencia de los desarrolladores del comportamiento predeterminado de los navegadores haciendo explícito el comportamiento
y el uso previsto de las cookies. Los clientes que no reconozcan
SameSite=None deben ignorarlo.
SameSite=Lax de forma predeterminada
Si envías una cookie sin especificar su atributo SameSite, el navegador
la trata como si estuviera configurada como SameSite=Lax. De todas maneras, te recomendamos que configures SameSite=Lax de forma explícita para que la experiencia del usuario sea más coherente en todos los navegadores.
SameSite=None debe ser seguro
Cuando crees cookies para seguimiento entre sitios con SameSite=None, también debes configurarlas
como Secure para que el navegador las acepte:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Puedes probar este comportamiento a partir de Chrome 76 habilitando about://flags/#cookies-without-same-site-must-be-secure y, desde Firefox 69, configurando network.cookie.sameSite.noneRequiresSecure en about:config.
También te recomendamos que actualices las cookies existentes a Secure lo antes posible.
Si dependes de servicios que proporcionan contenido de terceros en tu sitio, asegúrate de que
tu proveedor de servicios actualice sus cookies y actualiza los fragmentos o
las dependencias de tu sitio para asegurarte de que use el comportamiento nuevo.
Recetas de galletas de SameSite
Para obtener más detalles sobre cómo actualizar tus cookies para controlar correctamente estos
cambios en SameSite=None y las diferencias en el comportamiento del navegador, consulta el
artículo de seguimiento, Recetas de cookies de SameSite.
Agradecemos las contribuciones y los comentarios de Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner y Vivek Sekhar.