Cookies de SameSite explicadas

Navegadores compatibles

  • Chrome: 51.
  • Límite: 16.
  • Firefox: 60.
  • Safari: 13.

Origen

Cada cookie contiene un par clave-valor junto con varios atributos que controlan cuándo y dónde se usa la cookie.

La introducción del atributo SameSite (definido en RFC6265bis). te permite declarar si tu cookie está restringida a un tercero o el contexto del mismo sitio. Es útil comprender exactamente qué "sitio" significa aquí. El sitio es la combinación del sufijo del dominio y la parte del dominio antes. Por ejemplo, el dominio www.web.dev es parte del sitio web.dev.

Término clave: si el usuario está en www.web.dev y solicita una imagen a static.web.dev, es una solicitud del mismo sitio.

La lista de sufijo público define las páginas que cuentan como estén en el mismo sitio. No depende solo de dominios de nivel superior, como .com, pero también puede incluir servicios como github.io. Esto permite your-project.github.io y my-project.github.io para que se registren como sitios separados.

Término clave: si el usuario está en your-project.github.io y solicita una imagen a my-project.github.io es 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 solicitudes del mismo sitio.

Si estableces SameSite como Strict, la cookie solo se podrá enviar 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 está configurada 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 la navegación, como cambiar una contraseña o hacer una compra, pero también 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 estos permisos de nivel superior de navegación. Por ejemplo, si otro sitio hace referencia al contenido de tu sitio, en este caso usando la foto de tu gato y un vínculo a tu artículo como sigue:

<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, como se muestra a continuación:

Set-Cookie: promo_shown=1; SameSite=Lax

Cuando el navegador solicita amazing-cat.png para el blog de la otra persona, tu sitio web no envía la cookie. Sin embargo, cuando el lector sigue a cat.html en tu sitio, esa solicitud incluye la cookie.

Te recomendamos usar SameSite de esta forma y establecer las cookies que afectan el sitio web. mostrar a Lax, y las cookies relacionadas con las acciones del usuario a Strict.

También puedes establecer SameSite en None para indicar que deseas que la cookie se enviados en todos los contextos. Si proporciona un servicio que consumen otros sitios, como widgets, contenido incorporado, programas de afiliados, publicidad o acceso en toda varios sitios, usa None para asegurarte de que tu intención sea clara.

Tres cookies etiquetadas como Ninguna, Laxa o Estricto según su contexto
Marca de forma explícita el contexto de una cookie como None, Lax o Strict.

Cambios en el comportamiento predeterminado sin SameSite

Navegadores compatibles

  • Chrome: 80
  • Borde: 86.
  • Firefox: detrás de una marca.
  • Safari: no es compatible.

El atributo SameSite es ampliamente compatible, pero no se ha adoptado ampliamente. Antes, cuando se configuraban cookies sin SameSite, se configuraban de forma predeterminada para enviarlas en en todos los contextos, lo que deja a los usuarios vulnerables a CSRF y a de filtración de información. Alentar a los desarrolladores a expresar su intención y brindarles a los usuarios una experiencia más segura, la propuesta de IETF, Cookies cada vez mejores establece dos cambios clave:

  • Las cookies que no tienen un atributo SameSite se consideran SameSite=Lax.
  • Las cookies con SameSite=None también deben especificar Secure, lo que significa que requieren en un contexto seguro.

Ambos cambios son retrocompatibles con los navegadores que tienen implementó la versión anterior del atributo SameSite navegadores que no son compatibles con versiones anteriores de SameSite. Están destinados a reducir las probabilidades de que los desarrolladores la dependencia de las capacidades de los navegadores, el comportamiento predeterminado haciendo que las cookies y el uso previsto explícito. Todos los clientes que no reconocen SameSite=None debe ignorarla.

SameSite=Lax de forma predeterminada

Si envías una cookie sin especificar su atributo SameSite, el navegador trata esa cookie como si estuviera configurada en SameSite=Lax. Aún recomendamos Configura SameSite=Lax de forma explícita para que la experiencia del usuario sea más coherente en todos los navegadores.

El campo SameSite=None debe ser seguro

Cuando creas cookies entre sitios con SameSite=None, también debes configurarlas en Secure para que el navegador las acepte:

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

Para probar este comportamiento a partir de Chrome 76, habilita about://flags/#cookies-without-same-site-must-be-secure y Firefox 69 estableciendo network.cookie.sameSite.noneRequiresSecure en about:config

También te recomendamos actualizar 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 actualiza sus cookies y cualquier fragmento o las dependencias de tu sitio para asegurarte de que use el comportamiento nuevo.

Si desea obtener más detalles sobre la actualización de las cookies para procesar correctamente estas cambios a SameSite=None y las diferencias en el comportamiento del navegador, consulta la artículo de seguimiento Recetas de cookies de SameSite.

Gracias por las contribuciones y los comentarios de Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner y Vivek Sekhar.

Imagen hero de cookie de Pille-Riin Priske activado Eliminar salpicadura